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