第二章 机器人运动学基础:坐标系与位姿描述、齐次变换矩阵、正运动学与逆运动学概念

各位同学,大家好。我是老张,在工业机器人这行摸爬滚打了十几年。今天咱们聊点硬核的——运动学基础。

说实话,很多新手一上来就急着写程序、调轨迹。结果呢?机器人撞了、抓不准、路径奇奇怪怪。为什么?说白了,就是没搞懂坐标系和位姿。你想想看,连机器人在哪、手爪朝哪都不知道,怎么让它干活?

这一章,咱们就把地基打牢。坐标系、位姿、齐次变换、正逆运动学——这些概念搞明白了,后面编程就是水到渠成的事。

2.1 坐标系与位姿描述

先问个问题:你站在车间里,怎么告诉别人「那个工件在哪」?

你可能会说:「在我右手边两米,离地一米高。」——看,这就是坐标系思维。你以自己为原点,定义了三个方向(左右、前后、上下),再加上距离,就定位了一个点。

机器人也一样。它有自己的「世界坐标系」,通常以机器人底座中心为原点。但光有位置不够,你还要告诉它手爪怎么转——这就是姿态。

位置 + 姿态 = 位姿。记住这个公式,后面全用得上。

核心概念:

  • 位置:用 (x, y, z) 三个坐标值表示,单位毫米或米
  • 姿态:用 (Rx, Ry, Rz) 或四元数表示,描述绕各轴的旋转
  • 位姿:位置 + 姿态,完整描述一个刚体在空间中的状态

我在项目里遇到过一件事。有个同事调试码垛程序,机器人总是把箱子放歪。查了半天,发现是姿态参数写错了——他用了欧拉角,但顺序搞反了。嗯,这里要注意:不同品牌的机器人,欧拉角的定义顺序可能不一样。ABB和KUKA就不一样,千万别想当然。

2.2 齐次变换矩阵

好,现在我们知道了一个点的位姿。但问题来了:机器人有多个关节,每个关节都有自己的坐标系。怎么把一个点的坐标从一个坐标系转换到另一个?

答案就是——齐次变换矩阵

说白了,它是一个 4×4 的矩阵。长这样:

| R11  R12  R13  Tx |
| R21  R22  R23  Ty |
| R31  R32  R33  Tz |
|  0    0    0    1  |

左上角 3×3 是旋转矩阵,描述姿态。右上角 3×1 是平移向量,描述位置。最后一行固定是 [0 0 0 1],这是齐次坐标的规矩。

为什么用 4×4?因为这样可以把旋转和平移写在一个矩阵里,一次运算搞定。你想想看,如果分开算,先旋转再平移,多麻烦?

我的小技巧:

写代码时,我习惯把齐次变换矩阵存成一个 4×4 的数组。调试时打印出来,一眼就能看出旋转和平移对不对。我曾经用这个方法,五分钟就找到了一个同事花了两小时没找到的 bug。

举个实际例子。假设机器人基座坐标系下有一个点 P(100, 200, 300)。现在机器人末端执行器相对于基座有一个变换矩阵 T。那么末端坐标系下,这个点的坐标就是:

P_末端 = T^(-1) * P_基座

注意,是逆矩阵。因为我们要从基座坐标系「回到」末端坐标系。这个逻辑搞反了,机器人就会往反方向跑——我见过不止一次。

2.3 正运动学与逆运动学概念

这两个概念,是机器人编程的「任督二脉」。打通了,你就入门了。

2.3.1 正运动学

正运动学:已知每个关节的角度,求末端执行器的位姿。

说白了就是——你告诉机器人「关节1转30度,关节2转45度,关节3转60度……」,然后它告诉你「我的手现在在 (x, y, z),姿态是 (Rx, Ry, Rz)」。

这个过程是确定的、唯一的。给定一组关节角度,末端位姿是唯一确定的。数学上就是一连串的齐次变换矩阵相乘:

T_末端 = T_1 * T_2 * T_3 * ... * T_n

每个 T_i 是相邻两个关节之间的变换矩阵。乘起来,就是末端相对于基座的位姿。

我在调试六轴机器人时,经常用正运动学来验证。比如手动转关节到某个位置,然后读一下实际末端坐标,跟理论值对比。如果偏差超过 0.1mm,那就要检查机械零位或者减速器间隙了。

2.3.2 逆运动学

逆运动学:已知末端执行器的目标位姿,求每个关节的角度。

这个就难了。你告诉机器人「把手放到 (x, y, z),并且保持这个姿态」,它要自己算出「关节1该转多少度,关节2该转多少度……」。

为什么难?因为逆运动学通常有多个解,甚至无解。

注意:

  • 多解问题:同一个末端位姿,可能有多种关节角度组合。比如「肘部朝上」和「肘部朝下」都能到达同一个点。
  • 奇异点:某些位姿下,关节速度会变得无穷大,机器人会突然加速——很危险。
  • 无解:目标点超出了机器人的工作范围,怎么算都到不了。

我曾经在调试一个焊接机器人时,遇到逆运动学无解的情况。程序一直报错,我以为是代码写错了。后来一查,是工件放得太远,机器人根本够不着。嗯,有时候问题不在软件,在工艺布局。

实际编程中,我们通常这样处理:

  1. 先判断目标位姿是否在机器人工作空间内
  2. 如果有多个解,选择最接近当前关节角度的那个(减少运动时间)
  3. 避开奇异点,必要时微调目标位姿

2.4 知识体系总览

说了这么多,咱们用一张图来总结一下本章的核心逻辑:

机器人运动学基础 - 知识体系 坐标系与位姿描述 位置(x,y,z) + 姿态(Rx,Ry,Rz) 齐次变换矩阵 4×4矩阵:旋转+平移 正运动学 关节角度 → 末端位姿 逆运动学 末端位姿 → 关节角度 关键要点: • 位姿 = 位置 + 姿态,缺一不可 • 齐次变换矩阵是坐标转换的「万能钥匙」 • 正运动学唯一确定,逆运动学可能有多个解 • 实际编程中,逆运动学需要处理奇异点和多解选择

这张图把本章的核心逻辑串起来了。从左到右:先有坐标系和位姿的概念,然后用齐次变换矩阵做转换,最后应用到正逆运动学中。你把这个逻辑理清了,后面学轨迹规划、动力学就轻松多了。

我的建议:

初学者不要急着写复杂的运动学代码。先拿一个简单的两关节机器人练手,手动算正运动学和逆运动学。算通了,再上六轴。我当年就是这么过来的,虽然慢,但基础扎实。


公众号:蓝海资料掘金营,微信deep3321