先区分三个参考系

按照 ROS REP 105 的约定,base_link 固连在机器人底盘上;odom 用于连续的局部运动参考,但会累积漂移;map 用于长期全局参考,定位修正时,机器人在其中的位姿可以发生跳变。

坐标系关注的问题关键性质
base_link以机器人自身为参考与底盘固定连接
odom短时间内如何运动连续,但可能漂移
map在地图中的位置全局参考,允许修正跳变

把两类估计连接起来

基本的父子关系是 map → odom → base_link。里程计提供 odombase_link 的变换,定位模块结合当前里程计位姿,给出 mapodom 的修正。

这里约定 T_A_B 将 B 系中的点变换到 A 系,则有:

T_map_base = T_map_odom * T_odom_base

T_map_odom = T_map_base * inverse(T_odom_base)

使用这个关系时,两份位姿必须对应同一时刻。坐标变换正确、时间不一致,结果依然可能错误。

一个用于排查的思路

下面是一种工程排查思路:如果机器人显示的位置突然移动,先分别观察里程计输出与全局修正,再检查时间戳。局部运动连续而全局位置跳变,与里程计本身跳变,是两类不同的问题。

坐标系名称只是起点。把参考系、时间和变换方向一起写清楚,才能让定位、规划和控制之间的接口容易理解。

延伸阅读

ROS REP 105 · Coordinate Frames for Mobile Platforms ↗