1. 程式人生 > 其它 >robot_pose_ekf包保姆級使用教程

robot_pose_ekf包保姆級使用教程

EKF融合...

1.下載地址

https://github.com/udacity/robot_pose_ekf

本文對odom資料以及imu資料進行融合。

2.如何方便完成訂閱話題?

為了方便對訂閱話題的管理,對原始檔進行修改:

robot_pose_ekf/robot_pose_ekf.launch:

<launch>

<node pkg="robot_pose_ekf" type="robot_pose_ekf" name="robot_pose_ekf">
  <param name="output_frame" value="odom"/>
  <param name="base_footprint_frame" value="base_footprint"/>
  <param name="freq" value="50.0"/>
  <param name="sensor_timeout" value="1.0"/>

  <param name="odom_used" value="true"/>
  <param name="odom_data" value="odom"/>
  
  <param name="imu_used" value="true"/>
  <param name="imu_data" value="imu"/>

  <param name="vo_used" value="false"/>
</node>

</launch>

robot_pose_ekf/odom_estimation_node.cpp:

找到相應的程式碼行,新增:

...
nh_private.param("odom_used", odom_used_, true);
nh_private.param("odom_data", odom_data_, std::string("/odom_data"));

nh_private.param("imu_used",  imu_used_, true);
nh_private.param("imu_data", imu_data_, std::string("/imu_data"));
...
odom_sub_ = nh.subscribe(odom_data_, 10, &OdomEstimationNode::odomCallback, this);
...
imu_sub_ = nh.subscribe(imu_data_, 10,  &OdomEstimationNode::imuCallback, this);

同樣,對標頭檔案進行修改:

robot_pose_ekf/include/robot_pose_ekf/odom_estimation_node.h:

...
std::string output_frame_, base_footprint_frame_, tf_prefix_, odom_data_, imu_data_;
...

至此,可以通過上述修改的launch檔案完成對話題的修改,當話題修改時,只需要修改launch檔案中的引數即可,而不需要重新編譯。

3.編譯

在工作空間目錄下,執行:

catkin_make

4.如何使用?

如果你使用的是實際的機器人,則需要將釋出odom座標轉換的相關程式碼註釋掉,一般位於底盤的啟動檔案中,注意是座標轉換

,也就是tf brodcaster,而不是里程計資料,里程計資料需要保留。

如果使用的是gazebo模擬環境下的機器人,則需要對控制器進行修改,以差速機器人為例:

<gazebo>
	<plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
...
	<publishOdomTF>true</publishOdomTF>
...
</gazebo> 

沒有找到相關引數的話,新增即可。

執行:

roslaunch robot_pose_ekf robot_pose_ekf.launch

此時,開啟tf樹,會發現odom到base_link(base_footprint)的轉換為robot_pose_ekf釋出,這說明EKF配置成功。

如果給您帶來幫助,希望能給點個關注,以後還會陸續更新有關機器人的內容,點個關注不迷路~歡迎大家一起交流學習,有問題評論區留言。
都看到這了,點個推薦再走吧~
未經允許,禁止轉載。