robot_pose_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配置成功。

如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习,有问题评论区留言。
都看到这了,点个推荐再走吧~
未经允许,禁止转载。

posted @ 2021-08-09 19:39  Love&Robot  阅读(3254)  评论(0编辑  收藏  举报