如何从SLAM算法的gmapping包中获取机器人位姿估计数据?
gmapping位姿估计获取与校验方法
1. 位姿数据获取路径
gmapping的位姿估计有两种常用获取方式:
- 路径1:通过
/tf话题获取
gmapping运行时会发布map坐标系到odom坐标系的TF变换,用于修正底盘里程计的漂移。你需要的机器人全局位姿是map坐标系到base_link坐标系的变换,由TF树自动拼接得到(map → odom → base_link,其中odom→base_link由底盘里程计节点发布)。 - 路径2:直接订阅gmapping输出的位姿话题
gmapping默认会发布私有话题/slam_gmapping/pose,消息类型为geometry_msgs/PoseWithCovarianceStamped,直接输出base_link在map坐标系下的位姿数据,包含xyz坐标和xyzw四元数,和你获取的真值格式完全匹配,更适合直接做偏差比对。
2. 对应坐标系说明
gmapping输出的位姿对应的是机器人基坐标系base_link,而非base_scan、imu_link等传感器坐标系。你和真值比对前需要确认真值数据的坐标系是否也为base_link,如果真值为其他传感器坐标系,需要先通过静态TF变换做坐标校准,避免出现固定系统偏差。
3. 终端打印位姿的方法
打印/slam_gmapping/pose话题位姿
直接用rostopic工具即可,命令如下:
rostopic echo /slam_gmapping/pose
打印TF树中map到base_link的位姿变换
用tf自带的tf_echo工具即可,命令如下:
rosrun tf tf_echo map base_link
输出会同时显示平移量、四元数、RPY角度,你可以直接提取和真值格式匹配的字段。
内容的提问来源于stack exchange,提问作者AmirulJ
相关产品推荐
相关产品推荐

