4、多机器人坐标系规划:全局坐标系与局部坐标系、机器人间相对位姿定义、协同工作时的坐标变换链设计
坐标系规划,说白了就是给每个机器人发一张「地图」和一张「身份证」。地图告诉它世界长什么样,身份证告诉它自己站在哪、脸朝哪。多机器人协同要是坐标系没规划好,那场面就像一群人在黑夜里乱撞——你以为是握手,其实是撞头。
我刚开始做多机项目时,就吃过这个亏。两台机械臂协同搬运,各自都觉得自己在正确的位置,结果一配合,直接撞上了。查了半天,发现是全局坐标系定义差了 5 毫米。嗯,从那以后,坐标系规划成了我每次开工前必做的第一件事。
4.1 全局坐标系与局部坐标系:谁管谁?
先搞清楚两个概念:
- 全局坐标系(World Frame):整个工作空间的参考。所有机器人的位置、目标物体的位置,最终都要换算到这个坐标系下。
- 局部坐标系(Local Frame / Base Frame):每个机器人自己的「原点」。通常固定在机器人基座中心,Z 轴朝上,X 轴朝前。
你想想看,如果每个机器人都用自己的局部坐标系说话,那 A 说「往右移 10 厘米」,B 根本不知道往哪移——因为 A 的「右」和 B 的「右」可能完全相反。
所以,全局坐标系就是那个「翻译官」。所有局部坐标最终都要转换到全局坐标下,才能实现真正的协同。
核心原则:全局坐标系只设一个,且尽量选在场地中心或某个固定参照物上。局部坐标系每个机器人一个,固定在基座。
4.2 机器人间相对位姿定义:谁在哪儿?
相对位姿,就是机器人 A 看机器人 B,觉得 B 在它的什么位置、什么朝向。用数学语言说,就是 平移向量 + 旋转矩阵(或者四元数)。
我在项目中遇到过一种常见做法:先标定好全局坐标系,然后让每个机器人通过激光雷达或视觉标记物,自动测量自己相对于全局坐标系的位姿。这样,任意两个机器人之间的相对位姿就可以通过全局坐标系间接算出来。
举个例子:
- 机器人 A 在全局坐标系下的位姿:
T_A_W - 机器人 B 在全局坐标系下的位姿:
T_B_W - 那么 A 看 B 的相对位姿:
T_B_A = T_A_W⁻¹ × T_B_W
这个公式看着简单,但实际标定时很容易出错。我建议你用一个固定的标定板,放在所有机器人都能看到的位置,然后分别测量每个机器人到标定板的变换,再统一换算到全局坐标系。
避坑指南:我曾经用视觉标定,结果因为光照变化,同一个标记物在不同时间测出的位姿差了 2 度。后来我改用激光雷达 + 反光柱,稳定多了。视觉标定一定要考虑环境光的影响。
4.3 协同工作时的坐标变换链设计
多机器人协同,本质上就是一连串的坐标变换。你从机器人 A 的末端执行器出发,经过 A 的基座、全局坐标系、B 的基座,最后到达 B 的末端执行器。这条路径就是 坐标变换链。
设计变换链时,我习惯用树状结构来组织:
- 根节点:全局坐标系
- 一级子节点:每个机器人的基座坐标系
- 二级子节点:每个机器人的末端执行器坐标系
- 三级子节点:工具坐标系(如夹爪、焊枪)
这样,任何两个节点之间的变换,都可以通过向上走到根节点、再向下走到目标节点来得到。说白了,就是「先回老家,再去串门」。
下面这张图展示了典型的多机器人协同坐标变换链结构:
你看,从工具A到工具B,中间经过了 6 次变换。每次变换都可能引入误差,所以变换链越短越好。我一般建议:能直接测量的相对位姿,就不要通过全局坐标系间接推算。
4.4 实战中的坐标系规划步骤
说了这么多理论,来点实际的。我总结了一套坐标系规划的步骤,你照着做基本不会出大问题:
- 确定全局坐标系原点:选在场地中心、地面上的固定标记点,或者某个机器人的基座(如果它不动)。
- 标定每个机器人的基座位姿:用激光跟踪仪、视觉标定板或机械式探针,测量每个机器人基座相对于全局坐标系的位姿。
- 定义每个机器人的局部坐标系:在 URDF 中,每个机器人的
<link>和<joint>都基于自己的基座坐标系定义。 - 建立变换链:在协同控制程序中,用 TF 树(ROS 中的坐标变换框架)管理所有坐标系之间的变换关系。
- 验证:让两个机器人分别移动到同一个空间点,检查它们的末端位置是否一致。不一致就重新标定。
注意:我曾经跳过验证步骤,结果两台机器人协同焊接时,焊缝偏差了 3 毫米。后来老老实实拿一个标准球,让两台机器人分别去碰触,反复标定了三次才搞定。验证这一步,千万别省。
4.5 常见坐标系规划方案对比
不同的应用场景,坐标系规划方案也不一样。我整理了一个对比表,方便你选型:
| 方案类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 单全局坐标系 | 固定工位、多机协同搬运 | 结构简单,易于理解 | 全局标定精度要求高 |
| 相对位姿直接标定 | 移动机器人编队、AGV 协同 | 变换链短,误差小 | 需要实时测量设备 |
| 分层坐标系 | 大型产线、多工位协同 | 扩展性好,局部误差不扩散 | 管理复杂,需要中间节点 |
| 动态坐标系 | 人机协作、移动操作臂 | 适应性强,可实时更新 | 计算量大,延迟敏感 |
我个人比较推荐 单全局坐标系 + 相对位姿直接标定 的混合方案。全局坐标系用来做统一管理,关键机器人之间再直接标定相对位姿,这样既保证了整体一致性,又减少了长链误差。
小技巧:在 URDF 中,你可以用 <gazebo> 标签为每个机器人添加一个虚拟的「全局坐标系参考点」,这样在仿真中就能直接看到所有机器人的相对位置关系,方便调试。
好了,坐标系规划这块就聊到这儿。记住一句话:坐标系规划不是一次性的工作,而是需要反复标定和验证的持续过程。你做得越细致,后面协同控制就越顺畅。