ros載入yaml檔案
ROS官方提供了自動載入yaml檔案的功能,並且整合到了launch檔案裡面,只需要使用rosparam標籤就能把yaml配置檔案載入到ros的引數伺服器裡面,然後使用nodehandle.getParam()函式就可以方便的使用了。
下面給出關鍵的使用步驟:
- 編寫yaml檔案。注: 避免使用-分割陣列,否則容易產生bug,陣列使用[],逗號分隔元素。
- 編寫launch檔案,載入yaml。核心命令
<rosparam command="load" file="filepath" />
- cpp檔案中訪問yaml。直接使用nodehandle.getParam方法,注意引數的名稱空間即可。
launch檔案
<launch>
<arg name="global_file" default="global_param.yaml" />
<!-- 在node節點外部新增yaml檔案,載入到引數伺服器 -->
<rosparam command="load" file="$(find learning_load_yaml)/param/$(arg global_file)" />
</launch>
直接使用
程式碼中訪問
int main(int argc, char** argv) {
ros::init(argc, argv, "load_yaml");
ros::NodeHandle nh;
std::string global_car_name;
// 獲取全域性yaml引數
nh.getParam("/car_name", global_car_name);
std::cout << "global_car_name: " << global_car_name << std::endl;
}
備註:yaml中的陣列對應cpp標準庫中的std::vector,字串對應為std::string
功能包使用方法
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone ...
cd ~/catkin_ws
catkin_make
source ./devel/setup.bash
roslaunch learning_load_yaml start.launch
完整專案
完整專案請檢視github倉庫。