先区分三个参考系
按照 ROS REP 105 的约定,base_link 固连在机器人底盘上;odom 用于连续的局部运动参考,但会累积漂移;map 用于长期全局参考,定位修正时,机器人在其中的位姿可以发生跳变。
| 坐标系 | 关注的问题 | 关键性质 |
|---|---|---|
base_link | 以机器人自身为参考 | 与底盘固定连接 |
odom | 短时间内如何运动 | 连续,但可能漂移 |
map | 在地图中的位置 | 全局参考,允许修正跳变 |
把两类估计连接起来
基本的父子关系是 map → odom → base_link。里程计提供 odom 到 base_link 的变换,定位模块结合当前里程计位姿,给出 map 到 odom 的修正。
这里约定 T_A_B 将 B 系中的点变换到 A 系,则有:
T_map_base = T_map_odom * T_odom_base
T_map_odom = T_map_base * inverse(T_odom_base)使用这个关系时,两份位姿必须对应同一时刻。坐标变换正确、时间不一致,结果依然可能错误。
一个用于排查的思路
下面是一种工程排查思路:如果机器人显示的位置突然移动,先分别观察里程计输出与全局修正,再检查时间戳。局部运动连续而全局位置跳变,与里程计本身跳变,是两类不同的问题。
坐标系名称只是起点。把参考系、时间和变换方向一起写清楚,才能让定位、规划和控制之间的接口容易理解。