第一章:机器人运动学基础

大家好,欢迎来到《从零搭建机器人运动模型》的第一章。

说实话,运动学这东西,听起来挺唬人的。什么坐标系、变换矩阵、齐次坐标……我刚入行那会儿,看到这些词就头大。但后来我发现,搞懂它,其实就是搞懂一件事:机器人怎么知道自己的手在哪儿。

嗯,咱们今天就把这事儿掰扯清楚。

1.1 坐标系与变换矩阵

先问个问题:你站在房间里,说“杯子在桌子右边”。那“右边”是谁的右边?是你的,还是桌子的?

你看,这就是坐标系的意义。没有坐标系,位置就是一笔糊涂账。

在机器人里,我们常用两种坐标系:

  • 世界坐标系:固定在地面上的,全局参考系。比如车间里那个固定的激光雷达,它的坐标就是世界坐标。
  • 机体坐标系:绑在机器人身上的,跟着它动。比如机械臂末端的手爪,它的坐标就是相对于机械臂基座的。

那怎么把一个点从机体坐标转到世界坐标?用变换矩阵。

我习惯把变换矩阵想象成一个“翻译官”。它把机器人自己脑子里的位置,翻译成我们能看懂的世界位置。

核心公式:

P_world = T * P_body

其中 T 就是变换矩阵,它包含了旋转和平移的信息。

举个例子。假设机械臂末端在机体坐标系下是 (1, 0, 0),而机体坐标系相对于世界坐标系旋转了 90 度,还平移了 (2, 0, 0)。那它在世界坐标系下是多少?

算一下你就知道,不是简单的 (3, 0, 0)。因为旋转会改变方向。这就是变换矩阵存在的意义——它把旋转和平移打包处理了。

我的小经验: 刚开始写代码时,我总搞混左乘和右乘的顺序。记住:T * P 是先旋转再平移,P * T 是先平移再旋转。顺序错了,机器人就跑到墙里去了。

1.2 刚体运动的描述

什么叫刚体?说白了,就是不会变形的物体。机械臂的连杆、机器人的底盘,都是刚体。

刚体运动,就是它从 A 点跑到 B 点,同时可能还转了个身。描述这种运动,我们需要两个东西:

  • 位置:用三维坐标 (x, y, z) 表示
  • 姿态:用旋转矩阵、欧拉角或四元数表示

我个人最常用的是旋转矩阵。为什么?因为它直观,而且方便做矩阵运算。但旋转矩阵有个问题——它有 9 个元素,却只描述 3 个自由度,冗余信息太多。

所以后来我慢慢转向了四元数。四元数只有 4 个参数,没有奇点问题,插值也平滑。我记得第一次用四元数做机械臂轨迹规划时,那个顺滑感,真的让人舒服。

避坑指南: 我曾经在项目里直接用欧拉角做姿态插值,结果机械臂在某个角度突然“翻了个跟头”。后来才发现,那是万向锁问题。从那以后,凡是涉及姿态插值的,我全换成了四元数。

1.3 齐次坐标与齐次变换

好,现在问题来了。我们既要描述旋转,又要描述平移。如果分开写,代码会变得很啰嗦。

齐次坐标就是来解决这个问题的。它把三维坐标 (x, y, z) 扩展成四维 (x, y, z, 1)。多出来的那个 1,就是齐次因子。

你想想看,这样一来,旋转和平移就可以合并成一个 4x4 的矩阵了。这个矩阵,就叫齐次变换矩阵。

齐次变换矩阵的结构:

| R  T |
| 0  1 |

其中 R 是 3x3 旋转矩阵,T 是 3x1 平移向量。

用齐次变换矩阵,我们可以把一连串的变换串联起来。比如机械臂从基座到末端,中间经过好几个关节,每个关节都有一个变换矩阵。把它们乘起来,就得到了末端相对于基座的位姿。

这就是机器人运动学的核心思想:链式变换。

我的习惯: 在 ROS 里,我经常用 tf2 库来处理齐次变换。它帮你管理了所有坐标系之间的关系,你只需要发布和监听变换就行。省心得很。

知识体系总览

下面这张图,是我自己画的本章知识结构。你可以把它当作一张地图,随时回来看看。

机器人运动学基础 坐标系 刚体运动描述 齐次坐标与变换 世界坐标系 / 机体坐标系 变换矩阵:旋转 + 平移 位置 (x, y, z) 姿态:旋转矩阵 / 欧拉角 / 四元数 4x4 齐次变换矩阵 链式变换:T1 * T2 * ... * Tn 核心思想:用齐次变换矩阵描述刚体在空间中的位姿

本章小结

这一章我们聊了三件事:

  1. 坐标系:世界坐标和机体坐标,以及它们之间的变换矩阵。
  2. 刚体运动:位置加姿态,用旋转矩阵或四元数描述。
  3. 齐次变换:把旋转和平移打包成 4x4 矩阵,方便链式计算。

这些东西,是机器人运动学的基石。后面的章节里,我们会用它们来搭建完整的运动模型。到时候你会发现,今天学的每一个概念,都会反复出现。

嗯,今天就到这儿。下一章我们聊正运动学——怎么从关节角度算出末端位置。到时候见。

可可精品资料库