第一章:运动学基础——坐标系与位姿描述

各位同学好,我是你们这门课的老朋友。

咱们今天聊点最基础,但也最核心的东西——坐标系与位姿描述

说白了,就是搞清楚一个刚体在空间里到底在哪儿,脸朝哪边。你想想看,做机器人也好,做机械臂也好,如果连这个都搞不清楚,后面什么轨迹规划、动力学分析,全是空中楼阁。我个人习惯,每接手一个新项目,第一件事就是把坐标系定义清楚,这能省掉后面80%的调试痛苦。

1.1 刚体在空间中的位置

一个刚体在三维空间里,有6个自由度。哪6个?三个平移,三个旋转。

先说平移。描述一个点P的位置,最简单的方式就是用坐标。比如在直角坐标系{A}中,点P的位置可以写成:

AP = [px, py, pz]^T

这个上标A,表示这个向量是在坐标系{A}下描述的。嗯,这里要注意,坐标系是描述一切的基准。没有坐标系,位置就是一句空话。

我在做移动机器人定位时,遇到过一个问题:传感器数据明明显示障碍物在正前方,但机器人就是撞上去了。后来一查,原来是传感器坐标系和机器人基坐标系没对齐。你看,坐标系搞错,后果很严重。

1.2 刚体在空间中的姿态

位置好理解,姿态就稍微绕一点。姿态描述的是刚体“脸朝哪边”。

最直观的方式,就是给刚体绑一个坐标系{B},然后看{B}相对于参考系{A}是怎么转的。这个关系,用旋转矩阵来表示。

旋转矩阵 R 的性质:

  • 它是一个3x3的正交矩阵
  • 行列式为+1(右手系)
  • 逆矩阵等于转置矩阵:R^{-1} = R^T

举个例子,坐标系{B}绕{A}的Z轴转θ角,旋转矩阵长这样:

R_z(θ) = [cosθ  -sinθ  0;
          sinθ   cosθ  0;
          0      0     1]

为什么会这样?你想想看,绕Z轴转,Z坐标不变,X和Y在旋转。这就是最基础的旋转矩阵。

我记得刚入行时,总把旋转矩阵的乘法顺序搞反。后来养成一个习惯:先转的矩阵放右边,后转的放左边。这个顺序,你写代码时一定要小心。

1.3 齐次变换矩阵

旋转矩阵只处理旋转,位置还得单独写个向量。能不能把位置和姿态统一起来?能。这就是齐次变换矩阵

齐次变换矩阵T是一个4x4的矩阵:

T = [R   p;
     0   1]

其中R是3x3旋转矩阵,p是3x1位置向量。最后一行是[0 0 0 1]。

这个矩阵的好处是,你可以把旋转和平移放在一个矩阵里,连续变换就是矩阵乘法。比如从坐标系{A}到{B},再到{C}:

^A_T_C = ^A_T_B * ^B_T_C

这个链式法则,是运动学里最常用的工具。我在做六轴机械臂正运动学时,就是靠这个一层层算下去的。

我的一个小技巧:

写代码时,我习惯把齐次变换矩阵拆成两部分:旋转部分和平移部分。调试时分别验证,能快速定位问题。比如先检查旋转矩阵是否正交,再检查平移向量是否正确。

1.4 知识体系结构图

下面这张图,是我自己总结的运动学基础核心逻辑。你看一遍,应该能对本章内容有个整体把握。

运动学基础:坐标系与位姿描述 刚体在空间中的描述 位置描述(平移) 姿态描述(旋转) 位置向量 [px, py, pz]^T 旋转矩阵 R (3x3) 齐次变换矩阵 T (4x4)

从这张图你能看到,整个运动学基础就是围绕“刚体”展开的。位置用向量,姿态用旋转矩阵,最后用齐次变换矩阵把两者统一起来。这个结构,我建议你记在心里,后面学动力学、控制时还会反复用到。

1.5 避坑指南

我曾经踩过的坑:

  • 坐标系定义不统一:不同模块用不同坐标系,最后拼起来全是错的。我建议项目一开始就定好全局坐标系和局部坐标系规范。
  • 旋转矩阵不正交:数值计算久了,旋转矩阵可能漂移。我习惯每迭代几步就做一次正交化处理。
  • 齐次矩阵乘法顺序:左乘和右乘结果完全不同。记住:相对于固定坐标系用左乘,相对于当前坐标系用右乘

1.6 本章小结

这一章,我们聊了三个核心概念:

  • 位置:用坐标向量描述
  • 姿态:用旋转矩阵描述
  • 位姿统一:用齐次变换矩阵描述

这些是运动学的地基。地基打不牢,后面盖什么楼都晃。我个人建议,你花点时间把旋转矩阵的推导手算一遍,再写几行MATLAB代码验证一下。嗯,这样印象会深很多。

好,这一章就到这儿。咱们下一章见。


专注资料整理