第二章 机器人运动学基础:坐标系与位姿描述、齐次变换矩阵、正运动学与逆运动学概念
各位同学,大家好。我是老张,在工业机器人这行摸爬滚打了十几年。今天咱们聊点硬核的——运动学基础。
说实话,很多新手一上来就急着写程序、调轨迹。结果呢?机器人撞了、抓不准、路径奇奇怪怪。为什么?说白了,就是没搞懂坐标系和位姿。你想想看,连机器人在哪、手爪朝哪都不知道,怎么让它干活?
这一章,咱们就把地基打牢。坐标系、位姿、齐次变换、正逆运动学——这些概念搞明白了,后面编程就是水到渠成的事。
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该转多少度……」。
为什么难?因为逆运动学通常有多个解,甚至无解。
注意:
- 多解问题:同一个末端位姿,可能有多种关节角度组合。比如「肘部朝上」和「肘部朝下」都能到达同一个点。
- 奇异点:某些位姿下,关节速度会变得无穷大,机器人会突然加速——很危险。
- 无解:目标点超出了机器人的工作范围,怎么算都到不了。
我曾经在调试一个焊接机器人时,遇到逆运动学无解的情况。程序一直报错,我以为是代码写错了。后来一查,是工件放得太远,机器人根本够不着。嗯,有时候问题不在软件,在工艺布局。
实际编程中,我们通常这样处理:
- 先判断目标位姿是否在机器人工作空间内
- 如果有多个解,选择最接近当前关节角度的那个(减少运动时间)
- 避开奇异点,必要时微调目标位姿
2.4 知识体系总览
说了这么多,咱们用一张图来总结一下本章的核心逻辑:
这张图把本章的核心逻辑串起来了。从左到右:先有坐标系和位姿的概念,然后用齐次变换矩阵做转换,最后应用到正逆运动学中。你把这个逻辑理清了,后面学轨迹规划、动力学就轻松多了。
我的建议:
初学者不要急着写复杂的运动学代码。先拿一个简单的两关节机器人练手,手动算正运动学和逆运动学。算通了,再上六轴。我当年就是这么过来的,虽然慢,但基础扎实。
公众号:蓝海资料掘金营,微信deep3321