使用 hector_slam 进行本地化

Using hector_slam for localization

我正在研究 ROS 中的导航算法,到目前为止我一直在使用 amcl 进行本地化。现在我想尝试不同的本地化算法,比如 hector_slam,所以我有点困惑。当我 运行 hector_slam 时,它是像 amcl 一样发布 map 到 odom 的转换,还是发布它自己的 odom 而我需要 amcl 来从 map 到 odom 的转换? 谢谢

hector_slam 只是启动文件,实际节点是 hector_mapping,在 Wiki 页面上提到以下主题已发布:

map_metadata (nav_msgs/MapMetaData)

地图 (nav_msgs/OccupancyGrid)

slam_out_pose (geometry_msgs/PoseStamped)

姿势更新 (geometry_msgs/PoseWithCovarianceStamped)

amcl 主题是:

amcl_pose (geometry_msgs/PoseWithCovarianceStamped)

粒子云 (geometry_msgs/PoseArray)

tf (tf/tfMessage)

不确定我是否理解你的问题,但你需要额外的 tf 主题 hector 如果你想发布地图到不同的框架。

hector_mapping 确实发布里程计。 可以通过将“pub_odometry”参数设置为“true”来使用它。它还发布了“map”框架到“odom”框架的转换。

您可以使用 hector_mapping 而不是 amcl,但您只能在映射环境时这样做,而不是像使用 amcl 那样在预制地图上这样做。

如果您希望利用 hector_mapping 提供良好里程计这一事实,您可以选择通过节点发布里程计,然后将 amcl 与它一起使用,如 this q&a 中所述。

这是一个简单的过程。将 hector 启动文件中的地图框架和主题名称重新映射到其他内容。将 pub_odometry 设置为真。将 pub_map_odom_transform 设置为 false(因为这将由 amcl 发布)。如果你的机器人基地也发布了 odom,请将其重新映射到其他东西,这样它就不会干扰 hector 的。将 odom 主题交给 amcl。我已经在我的机器人上测试过它,效果很好,比编码器的 odom 要好得多,编码器在表面摩擦力变化时会变得不准确。