3. 坐标系与位姿描述
各位同学,今天我们来聊聊机器人学里最基础、也最绕不开的一个话题——坐标系与位姿描述。
说实话,我刚入行那会儿,觉得坐标系这东西不就是初中数学嘛,有什么好学的?结果第一次调试机械臂,工具撞到工件上,我才意识到——坐标系搞不清楚,机器人就是个瞎子。
3.1 四大坐标系,你搞清楚了吗?
机械臂的世界里,有四个核心坐标系。我习惯把它们比作「四层地图」:
- 世界坐标系:固定在车间地面的参考系。所有东西的位置,最终都要换算到这里。
- 基坐标系:固定在机械臂底座。机器人出厂时,这个坐标系就定死了。
- 工具坐标系:固定在机械臂末端,比如焊枪尖、夹爪中心。你想想看,机器人要抓杯子,它关心的是「夹爪中心」在哪,而不是机械臂第六轴在哪。
- 工件坐标系:固定在你要加工的工件上。比如一块电路板,它的原点在板子左下角。
核心原则:所有运动指令,最终都要统一到同一个坐标系下执行。否则就是鸡同鸭讲。
我在项目中遇到过一件事:一个同事把工具坐标系设错了,结果机器人每次抓取都偏了5毫米。查了两天才发现,原来是工具长度参数少输了一个零。嗯,这种低级错误,谁没犯过呢?
3.2 位置描述:x, y, z 就够了?
位置很简单,就是三个数字:(x, y, z)。比如工具坐标系原点相对于基坐标系的位置是 (300, 200, 150),单位毫米。
但这里有个坑——位置是相对的。你说「杯子在桌子上」,那是以桌子为参考。你说「杯子在机器人右边」,那是以机器人为参考。所以每次写位置数据,一定要问自己:这个坐标是相对于哪个坐标系的?
避坑指南:我曾经在调试时,直接把示教器上读到的坐标写进程序,结果机器人跑到天上去。后来才发现,示教器显示的是工具坐标系下的坐标,而我程序里用的是基坐标系。坐标值一样,参考系不同,差之毫厘谬以千里。
3.3 姿态描述:光有位置不够
位置告诉你「在哪」,姿态告诉你「朝向哪」。比如一个杯子,你不仅要让夹爪移动到杯子位置,还要让夹爪的朝向对准杯把。
描述姿态有两种主流方式:
3.3.1 RPY 欧拉角
RPY 就是 Roll(滚转)、Pitch(俯仰)、Yaw(偏航)。说白了,就是绕三个轴转三下:
- Roll (φ):绕 X 轴旋转,像飞机翻滚
- Pitch (θ):绕 Y 轴旋转,像飞机抬头低头
- Yaw (ψ):绕 Z 轴旋转,像飞机左右转向
举个例子:一个焊枪要竖直向下焊接,它的姿态可能是 (180°, 0°, 0°)——绕 X 轴转 180 度,让枪头朝下。
个人经验:RPY 很直观,但有个致命问题——万向锁。当 Pitch 接近 ±90° 时,Roll 和 Yaw 会变得无法区分。我调试六轴机器人时遇到过,程序里写得好好的,一到特定角度就乱转。后来改用四元数,问题就解决了。
3.3.2 四元数
四元数听起来高大上,其实就是一个四维向量 (w, x, y, z),用来表示旋转。它没有万向锁问题,而且插值平滑。
你不需要手算四元数,机器人控制器会自动转换。但你要知道:
- 四元数必须归一化(长度 = 1),否则旋转会变形
- 两个四元数相乘表示旋转叠加
- 单位四元数
(1, 0, 0, 0)表示不旋转
// 示例:四元数表示绕 Z 轴旋转 90°
// 角度转弧度:90° = π/2
// 公式:w = cos(θ/2), z = sin(θ/2)
// 结果:w = 0.707, x = 0, y = 0, z = 0.707
// 在机器人程序中这样写:
pose = [300, 200, 150, 0.707, 0, 0, 0.707] // 位置 + 四元数
3.4 坐标系变换:从 A 到 B
实际编程中,你经常需要把一个点从一个坐标系转换到另一个坐标系。比如:
- 工件上的点(工件坐标系)→ 机器人抓取点(基坐标系)
- 视觉识别的坐标(相机坐标系)→ 机器人运动坐标(世界坐标系)
变换公式其实就一个矩阵乘法:
// 齐次变换矩阵 T 包含旋转 R 和平移 t
// P_base = T_base_to_tool * P_tool
// 举个具体例子:
// 工具坐标系原点在基坐标系下的位置是 (300, 0, 200)
// 工具坐标系相对于基坐标系没有旋转(姿态相同)
// 那么工具坐标系下的点 (0, 0, 100) 在基坐标系下就是:
// x = 300 + 0 = 300
// y = 0 + 0 = 0
// z = 200 + 100 = 300
// 结果:(300, 0, 300)
记住这个原则:坐标系变换就是「先旋转,再平移」。顺序不能乱,乱了就全错了。
3.5 实战中的坐标系管理
我个人的习惯是:
- 先定义,后使用:在程序开头就把所有坐标系定义清楚,不要写到一半临时加
- 命名规范:比如
world_frame、base_frame、tool_frame、work_frame - 验证方法:让机器人移动到某个已知点,检查示教器上的坐标值是否和理论值一致
- 备份标定数据:坐标系标定一次不容易,标定完立刻保存到文件
我曾经踩过的坑:有一次更换了夹爪,忘了重新标定工具坐标系。结果机器人抓取时,夹爪中心位置偏了,把工件夹变形了。从那以后,我每次换工具,第一件事就是重新标定 TCP(工具中心点)。
3.6 本章知识体系
下面这张图,是我自己总结的坐标系与位姿知识结构,你把它存下来,以后遇到问题回来翻翻:
嗯,这一章的内容就到这里。坐标系和位姿是机器人编程的「语言」,你越早掌握它,后面学运动学、轨迹规划就越轻松。别嫌基础,基础不牢,地动山摇。
一个小练习:打开你的机器人示教器,找到坐标系设置页面。看看当前用的是哪个坐标系?试着把工具坐标系的原点沿 X 轴移动 50mm,看看机器人末端位置怎么变。动手试一次,比看十遍书都管用。