ROS 載入yaml教程

Ladisson-blog發表於2024-03-04

ros載入yaml檔案

ROS官方提供了自動載入yaml檔案的功能,並且整合到了launch檔案裡面,只需要使用rosparam標籤就能把yaml配置檔案載入到ros的引數伺服器裡面,然後使用nodehandle.getParam()函式就可以方便的使用了。

下面給出關鍵的使用步驟:

  1. 編寫yaml檔案。注: 避免使用-分割陣列,否則容易產生bug,陣列使用[],逗號分隔元素。
  2. 編寫launch檔案,載入yaml。核心命令 <rosparam command="load" file="filepath" />
  3. 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>

直接使用就能將yaml檔案解析成記憶體cpp物件,然後呼叫引數伺服器訪問。

程式碼中訪問

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倉庫

相關文章