robot_pose_ekf包保姆級使用教程
阿新 • • 發佈:2021-08-09
EKF融合...
,也就是tf brodcaster,而不是里程計資料,里程計資料需要保留。
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座標轉換的相關程式碼註釋掉,一般位於底盤的啟動檔案中,注意是座標轉換
如果使用的是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配置成功。
如果給您帶來幫助,希望能給點個關注,以後還會陸續更新有關機器人的內容,點個關注不迷路~歡迎大家一起交流學習,有問題評論區留言。
都看到這了,點個推薦再走吧~
未經允許,禁止轉載。