一、坐标变换基础:为什么机器人规划需要坐标变换?

做机器人规划这些年,我见过太多新手在坐标变换上栽跟头。说实话,这玩意儿看着简单,但真要上手调试,坑多得很。今天咱们就从最基础的东西聊起。

1.1 为什么非得搞坐标变换?

你想想看,机器人身上有那么多传感器——激光雷达、摄像头、IMU,每个都有自己的坐标系。激光雷达看到的是“前方2米有障碍”,但这个“前方”是雷达自己的前方,不是机器人的前方,更不是世界坐标系下的位置。

规划算法要的是什么呢?它要知道障碍物在世界坐标系下的位置,这样才能规划出一条安全的路径。所以,坐标变换说白了就是“翻译官”——把不同传感器看到的东西,统一到同一个坐标系下。

核心观点:没有坐标变换,规划算法就是个瞎子。传感器数据再多,对不上号也是白搭。

我在项目里遇到过这么个事:有一次调试AGV,激光雷达检测到前方有障碍,但规划模块死活不避障。查了半天,发现是雷达坐标系到机器人基坐标系的变换矩阵写反了。嗯,这种低级错误,犯过一次就长记性了。

1.2 世界坐标系 vs 机器人基坐标系

先搞清楚两个基本概念:

  • 世界坐标系:固定在地面上的参考系,通常用W表示。地图、目标点、全局路径都在这个坐标系下。
  • 机器人基坐标系:固定在机器人底盘上的参考系,通常用B表示。传感器、机械臂末端都相对于这个坐标系定义。

说白了,世界坐标系是“大地图”,机器人基坐标系是“我当前在哪”。规划算法需要把大地图上的目标点,换算成机器人“我该怎么走”的指令。

1.3 变换矩阵推导——从W到B

假设机器人在世界坐标系下的位置是 (x, y, θ),其中θ是朝向角。那么从世界坐标系到机器人基坐标系的变换,包含两步:

  1. 旋转:绕Z轴旋转 -θ 角度
  2. 平移:平移 (-x, -y)

写成齐次变换矩阵就是:

T_W2B = [cosθ   sinθ   0   -x*cosθ - y*sinθ]
        [-sinθ  cosθ   0    x*sinθ - y*cosθ]
        [0      0      1    0            ]
        [0      0      0    1            ]

这个矩阵怎么来的?我习惯这么理解:先把世界坐标系旋转到和机器人朝向一致,再平移到机器人位置。顺序不能乱,先旋转后平移。

小技巧:实际写代码时,我建议用Eigen或tf2库来管理变换,别手写矩阵。手写容易出错,而且不好调试。我曾经手写过一次,结果符号搞反了,机器人原地转圈圈...

1.4 逆变换——从B到W

反过来,从机器人基坐标系到世界坐标系的变换,就是T_W2B的逆矩阵:

T_B2W = [cosθ   -sinθ   0   x]
        [sinθ    cosθ   0   y]
        [0       0      1   0]
        [0       0      0   1]

你看,逆变换其实就是先平移再旋转,和正变换正好相反。这个性质在调试时很有用——你可以用正变换算一遍,再用逆变换算回来,看能不能回到原点。能回来,说明矩阵写对了。

1.5 知识体系总览

下面这张图把本章的核心逻辑串起来了:

坐标变换知识体系 世界坐标系 (W) 固定在地面 地图、目标点 T_W2B 机器人基坐标系 (B) 固定在底盘 传感器、执行器 T_B2W 激光雷达 传感器坐标系 摄像头 传感器坐标系 IMU 传感器坐标系 规划算法 需要统一坐标系 才能规划路径 核心逻辑:传感器数据 → 统一到机器人基坐标系 → 再变换到世界坐标系 → 规划算法使用

1.6 实际调试中的坑

坐标变换看着简单,但调试起来真能让人抓狂。我总结几个常见问题:

问题 现象 原因 解决办法
机器人原地转圈 规划路径时机器人不停旋转 旋转矩阵符号反了 检查sin/cos符号,用单位圆验证
位置偏移 机器人实际位置和规划位置对不上 平移量计算错误 用正逆变换互验
传感器数据错位 障碍物显示在错误位置 传感器到基坐标的变换缺失 检查变换链是否完整

避坑指南:我曾经在调试时发现,明明变换矩阵算对了,但机器人就是走不对。后来发现是时间戳没对齐——传感器数据是100ms前的,但变换矩阵用的是当前时刻的位姿。嗯,时间同步这个坑,后面章节会细讲。

1.7 小结

坐标变换是机器人规划的基石。说白了,就是把不同坐标系下的数据统一起来,让规划算法能看懂全局。今天咱们只讲了世界坐标系到机器人基坐标系的基础变换,后面会逐步深入。

记住一句话:变换矩阵写对了,规划就成功了一半。另一半是什么?嗯,是后面的内容了。

可可精品资料库