机器人运动学:关节角怎样变成末端坐标
WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
运动学不问力,只问几何。给定关节角,手在哪(正运动学 FK);给定手要去的点,关节该怎么弯(逆运动学 IK);角转得快,手就瞬时往哪冲(雅可比)。本章用平面 2R 把这三件事从向量加法推到公式、再推到数字例子。力与加速度见 动力学;时间轴上的
见 轨迹规划;六轴怎么写成矩阵链见 DH。先读 导论 里「工作空间 ≠ 构型空间」。
本章阅读方式:正文永远先给结论公式和几何直觉;需要逐步代数时点开灰色的「逐步推导」。每个推导旁都有一张原理图。建议第一遍只读正文和数字例,卡在某一行再展开推导。
一、先建立画面:两根刚尺,两次「转完再走一截」
把基座钉在原点
第二根杆长度
把

图解说明:左图
从第一杆的延长线量起;中图第二杆对基座的绝对角是 ;右图把两次「旋转 + 沿杆平移」接成向量和。
保姆级数字例(先不用矩阵)。 取与 demo 相同的杆长
| 肘 | 手 | 你该看见什么 | ||
|---|---|---|---|---|
| 两杆沿 | ||||
| 第二杆折回来,内边界 | ||||
| 整条臂竖起来 | ||||
| 第二杆相对第一杆再转 |
公式和 NumPy 的 sin/cos 只用弧度。打印给人看时再用 rad2deg。混用是运动学第一大笔误。
平面齐次变换把点写成

图解说明:左是坐标系旋转平移;中是
乘齐次点;右是两帧连乘。最后一列是原点,左上是姿态。
逐步推导:为什么 长成这样(点击展开)
先只谈一个坐标系相对另一个做「绕原点转
第 1 步:旋转。 平面里把基座标
第一列是新
第 2 步:平移。 下一关节的原点,就在「沿新
第 3 步:齐次坐标。 旋转加平移对普通二维向量不是线性的(有常数项
把
第 4 步:两杆连乘。 点先在手坐标系里是
乘出来只看最后一列,正是 T1 @ T2。
第 5 步:第三维为什么是
二、正运动学:唯一、圆环带、以及一个必须手算的数字
把上一节的向量和写开:
永远唯一:一组角只对应一个点。反向不唯一——同一点可以肘上也可以肘下。
可达半径
外圆:两杆伸直(

图解说明:
的第三边就是 。余弦定理给出 。 只旋转整个三角形。
逐步推导:从正运动学平方相加到余弦定理(点击展开)
目标:证明
把
前两项各是
这里
因此
开方(半径非负)得到
数字例(与 demo 相同)。
落在
C++ fk2r.hpp 就是那两行余弦,用来对照 Python。

图解说明:左图由
推出末端,虚线圆是最大/最小伸长;右图同一目标有肘上、肘下两套角。余弦定理先解 ,再用 解 。
动画说明:先正运动学扫一圈;再对同一目标画出肘上 / 肘下;最后把目标拖出工作空间,两圆不再相交。
三、逆解:把「两圆相交」写成可执行的三步
已知

图解说明:左:两圆相交得到两个肘点;中:
沿对角线 翻折就是另一支;右: 丢象限, 保住第三象限。
第 1 步:只由距离定
若右边绝对值 clip 到 sqrt 变 NaN,物理上应先检查再求解。
第 2 步:正弦的符号 = 肘号。
第 3 步:
则
必须用 atan2(y,x),参数顺序是先 arccos 会丢象限,手在第三象限时
逐步推导:从余弦定理到 的 公式(点击展开)
A.
平面 2R 的
与正运动学平方相加完全一致。解出
atan2(s2, c2) 而不是 arccos,因为 arccos 只返回
B.
它在「第一杆坐标系」里指向手。再把这个向量绕基座转
两边左乘
移项即正文。直觉:
C. 与 demo 对表。 目标
再代入 atan2 顺序或肘号。
工业臂还要在连续轨迹上选哪一支(不能这一采样肘上、下一采样肘下)。那是路径规划;本章只把两支都画出来。
四、雅可比:对 FK 逐项求导,列就是「单关节速度」
末端速度是位置对时间的导数。链式法则:
把正运动学逐项求导(记
列的含义(保姆级):第一列是「只转关节 1、关节 2 锁死」时手的速度方向——整个臂绕基座转,手速度垂直于「基座→手」。第二列是只转肘,手绕肘转,速度垂直于第二杆。这就是平面版的「雅可比列 = 关节旋量」。

图解说明:左:两列给出的速度张成平面。右:两杆共线时两支速度平行,丢失一个方向。底栏
。
逐步推导:正运动学怎样变成 的四个元素(点击展开)
从
出发。对
对
排成矩阵就是
行列式(2R 有闭式):把
代入后交叉项消去,只剩
(可以用符号计算或耐心展开验证。练习建议:令

图解说明:上半
;下半两杆共线时 。奇异附近不要硬求 。
动画说明:橙箭头是「只转基座」给手的速度方向,绿箭头是「只转肘」。伸直时两支变成平行,
。
速度逆解
五、静力学一句:虚功把末端力变成关节力矩
功率
末端顶墙的力,会以

图解说明:功率相等
。把 代入即得 。近奇异时顶墙会要很大的关节力矩。
逐步推导:从「功率相等」到 (点击展开)
电机做的瞬时功率是各关节力矩乘角速度之和:
末端力
运动学已经给出
这对任意
这为 动力学 做铺垫:那边还要加上惯性与科氏,但「力从哪来」这一段已经是
六、常见疑问
Q:肘上肘下哪一个是「上」?
本代码默认 up。不同教材、不同基座朝向会反过来。以 FK 核验 为准,不要死记名字。
Q:为什么
Q:工作空间里的点一定有两个 IK 吗?
边界上两支合成一支(
Q:3D 六轴还是闭式 IK 吗?
部分腕部分离的臂(Pieper 条件)有代数解;一般臂用牛顿法:
Q:角增量能不能当向量加?
平面一个
Q:齐次矩阵最后一列和左上角分别是什么?
最后一列前两维 = 下一坐标系原点写在当前系;左上
Q:奇异时机器人卡死了吗?
不是卡死。瞬时少了一个可动的笛卡尔方向,沿那个方向的速度逆解会爆炸。你仍可以沿剩下的方向动,也可以改变构型离开奇异(例如不要走完全伸直)。
七、代码在做什么
demo.py 对目标
cd docs/robotics/kinematics/code
python demo.py
g++ -std=c++17 demo.cpp -o fk_demo
八、小结
| 概念 | 一句话 |
|---|---|
| FK | 角 → 末端;唯一;两杆绝对角 |
| 齐次 | 左上姿态,最后一列原点 |
| IK | 点 → 角;2R 常两解;atan2 保象限 |
| 工作空间 | 圆环带,圈外无解; |
| 单关节运动时手的速度 | |
| 奇异 | |
| 力到力矩,速度映射的对偶 | |
| 下游 | 轨迹、动力学、DH、李群、旋量、ROS 2 |
下一章 轨迹规划:起终点有了,中间
怎么走才不甩。
📥 Code
| File | View | Download |
|---|---|---|
| demo.py | Open | Download |
| fk2r.hpp | — | Download |
| demo.cpp | — | Download |
| exercise.py | Open | Download |
参考
- Craig, Introduction to Robotics(正逆解与雅可比)
- Siciliano et al., Robotics: Modelling, Planning and Control
- Lynch & Park, Modern Robotics(速度旋量观点)