1. 坐标系基础:刚体与位姿描述、旋转矩阵、齐次变换矩阵

各位同学,咱们开始第一讲。

做机器人控制,说白了就是跟坐标系打交道。你想想看,机械臂末端在哪儿?相机看到的物体在哪儿?这些都得靠坐标系串起来。我刚开始做项目时,总觉得坐标系变换是数学课的事,结果第一次联调就栽了跟头——机械臂抓歪了,查了半天才发现是旋转矩阵写反了。从那以后,我再也不敢轻视这个基础了。

1.1 刚体与位姿描述

什么是刚体?简单说,就是受力不变形的物体。我们的机械臂连杆、末端执行器,都可以近似看作刚体。

描述一个刚体在空间中的状态,需要两个信息:位置和姿态。合起来叫位姿。

  • 位置:用三维坐标 (x, y, z) 表示,相对于某个参考坐标系。
  • 姿态:描述刚体怎么“转”的,常用旋转矩阵、欧拉角、四元数等。

核心概念:位姿 = 位置 + 姿态。缺一不可。

我习惯用齐次变换矩阵把两者打包在一起,后面会细讲。

1.2 旋转矩阵

旋转矩阵是描述姿态最直接的工具。它是一个 3×3 的正交矩阵,行列式为 +1。

为什么用矩阵?因为方便计算。两个旋转叠加,就是矩阵乘法。我当年在调试视觉引导抓取时,相机坐标系到机械臂基坐标系的旋转,就是靠矩阵乘法一步步算出来的。

绕坐标轴的旋转

绕 X、Y、Z 轴旋转 θ 角,对应的旋转矩阵如下:

旋转轴 旋转矩阵 R
绕 X 轴
[1      0       0   ]
[0  cosθ  -sinθ ]
[0  sinθ   cosθ ]
绕 Y 轴
[ cosθ  0  sinθ ]
[ 0     1  0    ]
[-sinθ  0  cosθ ]
绕 Z 轴
[cosθ  -sinθ  0]
[sinθ   cosθ  0]
[0      0     1]

个人经验:写代码时,我习惯用右手定则验证旋转方向。大拇指指向旋转轴正方向,四指弯曲方向就是正旋转。曾经有个同事把正负号搞反了,结果机械臂在调试时直接撞到安全围栏……嗯,还好速度不快。

旋转矩阵的性质

  • 正交性:RTR = I,R-1 = RT
  • 行列式为 +1:保证是纯旋转,没有镜像
  • 不满足交换律:R1R2 ≠ R2R1,旋转顺序很重要

避坑指南:我曾经在写运动学正解时,把两个旋转矩阵的顺序搞反了。结果算出来的末端位置差了十万八千里。记住:矩阵乘法不满足交换律,先转哪个轴,后转哪个轴,必须跟实际物理顺序一致。

1.3 齐次变换矩阵

旋转矩阵只能描述姿态,不能描述位置。齐次变换矩阵把旋转和平移统一到一个 4×4 矩阵里:

T = [R   t]
    [0   1]

其中:
R:3×3 旋转矩阵
t:3×1 平移向量
0:1×3 零向量
1:标量 1

为什么用齐次坐标?因为可以把旋转和平移合并成一次矩阵乘法。这在串联机械臂的运动学计算中特别有用——每个关节的变换矩阵连乘,就能得到末端位姿。

齐次变换矩阵的逆

实际控制中,经常需要求逆变换。比如已知末端在基坐标系下的位姿,想求基坐标系在末端坐标系下的位姿。

T^(-1) = [R^T   -R^T * t]
         [0      1       ]

这个公式我建议你记牢。我在做手眼标定时,几乎每天都在用这个逆变换。

1.4 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作坐标系变换的“地图”。

坐标系基础知识体系 坐标系基础:知识体系 刚体位姿描述 位置 (x, y, z) 姿态 (旋转) 齐次变换矩阵 旋转矩阵 欧拉角 / 四元数 绕 X/Y/Z 轴 正交性 不满足交换律 4×4 矩阵形式 💡 核心逻辑 刚体位姿 = 位置 + 姿态 → 用齐次变换矩阵统一表达 旋转矩阵是姿态的核心,齐次变换矩阵是计算的利器 所有坐标变换,最终都归结为矩阵乘法

1.5 实战要点总结

知识点 关键点 常见坑
位姿描述 位置 + 姿态,缺一不可 只记位置忘了姿态
旋转矩阵 正交、行列式为 1、不交换 旋转顺序搞反、正负号写错
齐次变换矩阵 4×4,统一旋转和平移 逆变换公式记错
矩阵乘法 左乘右乘意义不同 坐标系变换方向搞混

我的习惯:每次写变换代码前,先在纸上画坐标系。画清楚再写代码,能省掉一半的调试时间。真的,别偷这个懒。

好了,这一章就到这里。坐标系变换是机器人控制的“语言”,不熟练的话后面寸步难行。建议你把旋转矩阵和齐次变换矩阵的公式手推一遍,写代码时心里才有底。