旋量与 PoE:从 DH 坐标系到螺旋轴运动学
目录
第一次学习机器人正运动学,我们通常从 DH 参数法开始:沿着机械臂逐节放置坐标系,填写参数表,再把一串齐次变换乘起来。它可靠、经典,也确实解决了问题。
但用得久了,往往会冒出一个更直接的问题:关节明明只是在绕一条轴转动,为什么我们总要先讨论坐标系应该怎么摆?
旋量理论给出的回答很干脆:那就从轴本身出发。
这里会经常遇到另一个名字:PoE,全称是 Product of Exponentials,中文通常译作指数积公式。它不是另一种关节或旋量,而是一条组合规则:先把每个关节沿自身螺旋轴产生的运动写成矩阵指数,再按照关节顺序依次相乘,最终得到末端位姿。
简单地说:**旋量描述一个关节怎样运动,PoE 描述整台机器人怎样由这些关节运动组合而成。**具体公式会在第 5 节自然出现,现在先记住这层分工就足够了。
这背后体现了机器人学中几种很迷人的建模语言:
- 拉格朗日法从能量这个标量出发,组织复杂系统的动力学;
- 旋量与 PoE从螺旋轴这个几何对象出发,组织刚体与机构的运动学;
- 对偶四元数把旋转和平移放进统一的代数结构,适合空间计算与插值。
这是这个系列的第一篇。我们先不急着钻进六维向量,而是从熟悉的 Denavit-Hartenberg(DH)参数法出发,顺着几何直觉回答三个问题:
- 为什么还需要另一套运动学语言?
- 六维旋量究竟在描述什么?
- 这套语言在串联机器人和并联机构中分别带来了什么?
如果只带走一句话,希望是这一句:
DH 的核心对象是相邻连杆坐标系之间的变换;旋量的核心对象是关节允许发生的瞬时运动。PoE 则把这些关节运动按真实顺序复合起来。
DH 和 PoE 并不矛盾,也不存在精度上的高下。它们描述的是同一个刚体运动,只是一个习惯沿连杆记账,另一个选择直接凝视关节轴。
1. DH 参数法解决了什么
先回到 DH。面对一台串联机械臂,它会让我们从基座出发,沿着连杆依次建立坐标系,再用四个参数记录相邻坐标系之间的关系。对于标准 DH 约定,第 节变换写成:
四个参数分别是:
- :绕 轴旋转;
- :沿 轴平移;
- :沿 轴平移;
- :绕 轴旋转。
串联机械臂的正运动学就是逐节相乘:
1955 年,Denavit 与 Hartenberg 把这套记号系统化。DH 真正重要的地方不只是上面的公式,而是它给“坐标系应该放在哪里”制定了规则:只要规则一致,一台空间机构就能被压缩成一张参数表。这对手工推导、教材讲解和工业软件都非常实用。
但它的麻烦也恰好藏在这里:在开始计算之前,必须先把每一个中间坐标系放对。
1.1 DH 容易让人困惑的地方
如果机械臂只在平面内运动,这件事通常不难;一旦关节轴进入三维空间,建模就很容易变成一场细致的“坐标系记账”:
- 标准 DH 与改进 DH 的变换次序不同;
- 坐标系放置不唯一,不同建模者可以得到不同参数表;
- 平行、相交或近乎重合的轴会让公法线和 轴的选择显得生硬;
- 插入、删除或重排一个关节,常常要重新检查其后的坐标系;
- 看到一行 ,不一定能立即恢复关节轴在空间中的几何位置。
这些都不会让 DH 的结果变得不准确,却会让建模过程变得脆弱:公式可能没有错,错的是某根轴的方向、某条公法线,或者标准 DH 与改进 DH 在脑中悄悄混到了一起。
1.2 旋量不是为机器人发明的
有趣的是,旋量并不是为了机器人发明的新工具。早在机器人出现一个多世纪以前,几何学家已经在追问:空间中的刚体运动,能不能被一个简单的几何对象概括?
19 世纪初,Chasles 给出了一个漂亮的答案:刚体的任意有限位移,都可以归结为绕某条直线旋转,再沿同一条直线平移。几乎同时,Poinsot 从受力的另一侧发现,一般力系可以归结为沿某条直线的力,再加上绕同一条直线的力矩。一个谈“怎样动”,一个谈“怎样受力”,它们后来分别发展为 twist 与 wrench。
到了 1900 年,Robert Stawell Ball 在 A Treatise on the Theory of Screws 中把这些思想整理成系统的旋量理论。运动、力、约束,以及它们之间的互易关系,第一次被放进同一种几何语言。后来,齐次变换、李群和矩阵指数又为这套经典几何提供了现代计算工具,于是才有了今天机器人学里常见的“旋量 + 指数映射 + PoE”。
暂时忘掉六维向量和矩阵指数。你可以先把旋量想成一条带有运动属性的空间直线。看到它,我们就能回答三件事:
- 轴线朝哪个方向;
- 轴线经过空间中的什么位置;
- 绕轴转动时,是否还会按固定比例沿轴平移。
这样一来,旋转副不再只是参数表里的“一个角度”,而是“绕这条空间轴转动”;移动副也不需要另起炉灶,它只是角速度部分为零的特殊旋量。PoE 所做的事也很朴素:让每个关节沿自己的旋量运动,再按机构中的先后顺序把这些运动组合起来。
这段历史还埋下了一条重要线索:旋量不只会算正运动学。twist 告诉我们机构“能怎样动”,wrench 告诉我们它“能传什么力、受到什么约束”,二者又能通过功率联系起来。后面的串联实例主要使用前者;到了并联机构,两者会一起登场。
1.3 公平地比较 DH 与 PoE
| 维度 | DH 参数法 | 旋量与 PoE |
|---|---|---|
| 直接描述的对象 | 相邻连杆坐标系的相对变换 | 关节的空间螺旋轴与末端零位姿 |
| 中间坐标系 | 通常每节连杆都需要 | 空间形式只需基座坐标系和末端零位姿 |
| 旋转副与移动副 | 使用不同的可变量 | 都表示为六维旋量 |
| 表格化与工具生态 | 成熟、紧凑、广泛使用 | 现代机器人学与李群工具中更自然 |
| 几何可读性 | 依赖坐标系放置规则 | 轴的方向、位置和螺距直接可见 |
| 闭环与并联机构 | 可用,但要额外写闭环约束 | 每条支链统一建模,再用约束旋量或互易旋量组合 |
| 数学精度 | 精确 | 精确 |
如果只看这张表,PoE 似乎处处更漂亮。不过先别急着下结论:它不是“参数一定更少”的魔法。每个螺旋轴要用六个数表达,只是这些数受到单位长度和 Plücker 条件等约束;到了标定问题,真正可辨识的自由度仍要单独分析。
更公平的说法是:**DH 擅长把连杆关系整理成表,PoE 擅长把关节运动保留成几何。**选择哪一个,取决于我们接下来想看清什么。
2. 刚体运动为什么是一颗螺钉
现在暂时把机械臂放到一边,想象手里有一颗螺钉。拧动它时,会同时发生两件事:它绕自身轴线旋转,也沿这条轴线向前移动。
令人惊讶的是,空间刚体的一般有限位移也能这样理解。除纯平移等退化情况外,一个刚体从一个位姿到另一个位姿,总可以被整理为:
- 绕某条空间直线旋转 ;
- 同时沿这条直线平移 。
这里的 称为螺距,单位是长度每弧度。也就是说,只要找到那条合适的轴,一次看似复杂的空间位移,就变成了熟悉的“旋转 + 沿轴平移”。这就是 Mozzi-Chasles 定理给出的几何图景。
几个熟悉的关节只是它的特殊情况:
- 旋转副:,只绕轴转动;
- 螺旋副:,旋转和平移耦合;
- 移动副:没有旋转,可看作无穷大螺距的极限,但计算时直接令角速度部分为零。
所以,“螺旋”并不是为了写公式而附会出来的比喻。它本来就藏在刚体运动里,旋量只是把它找了出来。
3. 从一条轴到一个六维旋量
一条空间直线看起来只需要“方向 + 轴上一点”就能说清。为什么到了旋量,却要写成六个数?
下面采用现代机器人学中常见的排列顺序:角速度在前,线速度在后。
设螺旋轴方向为单位向量 ,轴上任意一点为 ,螺距为 。它的六维表示为:
这里的 告诉我们轴朝向哪里, 是轴上任意一点, 则描述每转过一弧度要沿轴前进多远。由于 , 同时把轴线相对坐标原点的位置和沿轴平移的分量编码了进去。
3.1 为什么需要六个数
只给出 ,只能说明“朝哪个方向转”,却无法回答“究竟绕哪一条轴转”。
想象一扇门。真实的门轴与一米外的另一条平行直线方向完全相同,因此具有相同的 ;但如果门真的绕后一条轴转,门上每一点的速度都会改变。 保存的正是这部分“轴在哪里”的信息。
对纯旋转关节,:
对沿单位方向 的移动关节:
于是,旋转、平移和边转边移不再是三套公式,而是同一种六维语言的三个特例。
3.2 旋量、twist 与指数坐标
这里容易出现一个术语上的小陷阱:中文里的“旋量”,有时指几何螺旋轴,有时又指正在发生的刚体速度。为了不在后文混淆,我们作一个简单区分:
- :单位螺旋轴,描述允许运动的方向;
- :twist,描述此刻真实发生的刚体速度;
- :指数坐标,描述沿这条轴积累的有限运动。
可以把三者理解为“道路、车速和里程”: 指出允许沿哪条路运动, 决定此刻走多快, 则记录已经沿这条路走了多少。twist 的前三维是角速度,后三维是坐标原点处对应的线速度;它不是两组数字的随意拼接,而是对整个刚体瞬时速度场的紧凑描述。
4. 指数映射:让瞬时运动长成有限位姿
接下来是全文最抽象的一步:怎样把“沿某条旋量轴运动”变成真正的有限位姿?
答案是矩阵指数。公式看起来稍显陌生,但它做的事情只有一句话:把瞬时运动积累成有限运动。
先把三维向量 写成反对称矩阵:
那么六维旋量对应的 矩阵为:
这样,矩阵指数就能把李代数 中的瞬时运动映射到刚体变换群 :
当 时:
其中:
旋转部分由 Rodrigues 公式给出:
对于纯移动关节,,指数映射退化成直观的平移:
如果暂时不关心展开式,可以只记住 这个整体:它表示刚体沿旋量轴 运动了 。指数映射最漂亮的地方正在这里——旋转和平移不再被拆开拼装,“一次关节运动”可以作为一个完整的几何对象进入计算。
5. PoE:把关节运动按顺序乘起来
现在把镜头拉回机器人。面对一台 自由度串联机械臂,PoE 只要求我们先做两件事:把机器人放到约定的零位姿,然后记录:
- 每个关节轴在空间坐标系中的旋量 ;
- 零位姿下末端相对基座的齐次变换 。
有了这两样东西,正运动学几乎可以直接写出来。这就是指数积(Product of Exponentials,PoE):
从右向左读, 是末端的起点;每个指数项代表一个关节施加的运动。它们像一串有先后顺序的动作,逐个把末端从零位姿带到当前位姿。
这里的顺序不能随意交换。先转再移,与先移再转,通常不会到达同一个位置;空间刚体运动一般不满足交换律:
5.1 空间雅可比为什么会自然出现
PoE 还有一个很自然的副产品:雅可比。第一个关节运动以后,后续关节轴会跟着前面的连杆一起改变位置。伴随变换 做的,正是把零位姿下记录的旋量“搬运”到当前位置。
空间雅可比的第 列为:
因此:
于是,空间雅可比不再像是对一大串矩阵求导后突然冒出的结果。它的每一列都有清楚的画面:当前姿态下,第 个关节会让末端怎样瞬时运动。
6. 串联实例:平面 2R 机械臂
先从最熟悉的例子开始。想象一台放在桌面上的两连杆机械臂:关节 1 固定在基座,长度为 的连杆 1 接到关节 2,再由长度为 的连杆 2 连接末端。两个关节都绕纸面外的 轴转动。
我们把两根连杆沿 轴水平伸直的姿态定义为零位姿。
6.1 用标准 DH 参数描述
用标准 DH 法,我们会在基座、关节 2 和末端依次放置坐标系,再把相邻坐标系之间的关系填进参数表。对于这个平面例子,表格非常规整:
| 关节 | ||||
|---|---|---|---|---|
| 1 | ||||
| 2 |
沿着坐标系逐节相乘,就得到:
6.2 用 PoE 描述
换成 PoE,我们保留基座坐标系和末端坐标系,但不再为每根连杆强制放置中间坐标系。整个建模过程只需要三步,而且几乎都能从图上直接读出。
第一步:看末端在零位姿时在哪里。
两根连杆水平伸直时,末端没有旋转,位置在 。因此零位姿矩阵为:
第二步:看两个关节分别绕哪条轴转。
两个关节都绕 轴,所以:
关节 1 的轴经过原点,取轴上一点 ,线速度部分自然为零:
关节 2 的轴经过 ,因此:
两个旋量轴于是直接写成:
第三步:按关节顺序写出指数积。
展开后末端位置仍然是熟悉的结果:
到这里,正运动学已经建立完成。PoE 并没有改变结果,只改变了我们到达结果的路径。
回头比较刚才的两种思路:
- DH 先问:“相邻坐标系如何变换?”
- PoE 先问:“每个关节绕哪条轴运动,末端起初在哪里?”
对于平面 2R,DH 的表格其实已经足够简洁,PoE 并没有压倒性的优势。这个例子真正值得体会的是它的建模习惯:我们只是看了看末端起初在哪里,又看了看两个关节轴的方向和位置。
当轴线开始倾斜、偏置,机构混合旋转副与移动副,或者模型需要频繁用于雅可比计算和标定时,这种“看轴而不是摆坐标系”的思路会越来越清爽。
6.3 奇异性并不会被表示法消除
优雅的表示法不会改变机构本身。对末端位置求导,仍然得到二维位置雅可比:
其行列式为:
当 或 时,两根连杆伸成或折成一条直线。此时无论怎样组合两个关节的微小转动,末端都无法产生某个方向的瞬时速度。
PoE 的价值,是让雅可比每一列来自哪根关节轴更加清楚,而不是让奇异性凭空消失。还要注意:这里讨论的是“末端位置”任务;如果把末端姿态也纳入任务变量,雅可比的维度和秩判断都会随之改变。
7. 并联实例:平面五杆机构
如果说串联机械臂像一条从肩膀延伸到手掌的手臂,那么并联机构更像几个人共同托住同一个平台:每条支链都连接基座与末端,也都对末端施加约束。
问题因此发生了变化。我们不再只有一条运动链可以从头乘到尾,而必须保证:
每条支链都声称末端在某个位置,这些结果必须彼此一致。
以两自由度平面五杆机构为例。桌面上固定着两个电机,位置分别为 、;它们驱动关节 、,通过左右两组连杆共同牵引末端点 。中间的 、 没有电机,是随机构运动的被动关节。
我们真正控制的是两个主动关节,却不得不面对两个额外的被动关节速度。这正是并联机构速度分析中最容易让公式膨胀的地方。
7.1 闭环约束
先用最普通的位置关系把闭环写出来。定义沿角度 方向的单位向量:
左右两侧第二根连杆的绝对方向分别是:
现在分别沿左支链和右支链走到末端。两条路径必须到达同一个 :
这就是闭环约束:左边算出的 与右边算出的 必须重合。每条支链都可以用 PoE 和空间雅可比描述,但多条支链最终还要在末端“对上账”。
7.2 用一次投影消掉被动关节
如果直接对闭环方程求导,再联立消元,当然可以得到速度关系。但旋量的思路更像是在问:能不能找一个方向,让我们不关心的被动关节速度自己消失?
先定义平面内逆时针旋转 的矩阵:
因为 恰好与 垂直,左支链的末端速度可以写成:
注意第二项:它是被动关节 参与产生的速度,而且方向始终垂直于第二根连杆。
这给了我们一个很自然的选择——沿第二根连杆的轴向投影。令 ,用 左乘速度方程:
关键就在下面这个再简单不过的正交关系:
沿杆方向与垂直于杆的速度做点积,结果必然为零。于是,包含未知被动速度 的整项被消掉,只留下主动关节 。对右支链做同样的投影:
把左右两个结果叠在一起:
一个原本同时含有主动、被动关节速度的闭环问题,现在被整理成了只含主动速度和末端速度的映射。更妙的是,等式两边的两个矩阵恰好把并联机构的两类奇异性分开了。
7.3 两类奇异性一眼可见
先看右侧的 。当它降秩时,发生支链或串联奇异:
从图上看,就是某一侧的两根连杆完全伸直或折叠。主动关节虽然还在转,却无法把速度有效传到末端的某个方向。
再看左侧的 。当它降秩时,发生并联奇异:
这意味着左右两根末端连杆相互平行或共线,它们提供的两个约束方向变得线性相关。此时即使主动关节锁住,末端仍可能存在非零的瞬时运动方向——机构在这个方向上失去了约束刚度。
一边是“驱动传不出去”,另一边是“约束撑不住末端”。两个行列式背后不是抽象的代数退化,而是可以直接在机构图上看见的几何构型。如果 与 同时降秩,则属于更特殊的组合退化,需要结合具体构型单独分析。
8. 互易旋量:运动与力之间的优雅对偶
刚才那次沿连杆方向的投影,看起来像一个为五杆机构量身定做的小技巧。其实,它正是互易旋量在二维平面上的影子。
设刚体 twist 为:
力旋量(wrench)为:
把 twist 看作运动,把 wrench 看作力与力矩,它们之间最自然的联系就是瞬时功率:
若:
就称二者互易。翻译成物理语言就是:这个力旋量对该运动不做瞬时功。
回头看五杆机构:如果沿末端连杆施加一个轴向力,它穿过被动关节,因此不会对该关节产生力矩;等价地说,这个轴向力与被动转动造成的末端切向速度正交。我们并不是用代数技巧“碰巧”消掉了 ,而是找到了一个对它不做功的力方向。
把这个思路推广到 Stewart 平台等空间并联机构,步骤仍然相同:
- 为每条支链写出允许的关节 twist;
- 寻找与被动关节 twist 互易的约束或驱动力 wrench;
- 把各支链 wrench 组装成并联雅可比;
- 通过这些旋量的线性相关性判断自由度、传力特性和奇异性。
这正是旋量在并联机构中格外迷人的地方:同一种语言,一面描述“能怎样动”,另一面描述“能传什么力”;复杂的消元过程,被转化为寻找运动与力之间的几何正交关系。
9. 旋量与 PoE 不是什么
讲到这里,旋量很容易给人一种“它能把一切都变简单”的感觉。越是漂亮的工具,越需要看清它的边界。
9.1 它不是自动求解器
PoE 能给出结构清楚的正运动学和雅可比,却不会自动奉送闭式逆运动学、最优轨迹或控制器。逆解仍可能需要几何分解、Paden-Kahan 子问题或数值迭代。
9.2 它不会消除坐标系
旋量仍然要在某个坐标系中表达,空间旋量与机体旋量之间也要通过伴随变换转换。PoE 减少的是大量中间连杆坐标系的强制放置,并没有消除坐标概念本身。
9.3 它不会自动提高数值精度
DH 与 PoE 都能精确描述同一个机构。最终的数值表现取决于算法、参数尺度、浮点实现、测量噪声和标定方式,而不是方法的名字听起来是否现代。
9.4 “几何雅可比”和“解析雅可比”不能混用
旋量雅可比直接映射到刚体 twist;解析雅可比则可能映射到欧拉角速度、位置导数等特定参数。二者可以转换,却不能不加区分地替换。讨论秩和奇异性之前,必须先说清楚任务变量究竟是什么。
10. 工程上如何开始使用 PoE
如果现在要把 PoE 用到一台已有 CAD 或 URDF 模型的机器人上,可以把工作拆成下面八步:
- 选定基座坐标系 和末端坐标系 ;
- 把机器人放到定义明确的零位姿;
- 对每个关节记录轴方向 和轴上一点 ;
- 计算 ;
- 记录末端零位姿 ;
- 用 PoE 计算正运动学;
- 用有限差分或自动微分核对雅可比;
- 用零位、单关节运动和随机姿态与 CAD、仿真或 DH 模型交叉验证。
公式写完不代表建模结束。下面这些小检查,往往比再推一遍公式更能避免工程错误:
- 明确六维向量采用 还是 排列;
- 角度统一使用弧度,旋转轴应归一化;
- 区分空间雅可比和机体雅可比;
- 注意右手定则和关节正方向;
- 不要把末端工具偏置重复计入螺旋轴和 ;
- 对并联机构同时检查支链奇异与并联奇异。
11. 小结
现在可以回到文章开头的那个问题了。
DH 参数法沿着连杆向前走,把机器人看成一串相邻坐标系:
旋量与 PoE 则退后一步,从基座坐标系观察整台机器人,把它看成一组有序的螺旋运动:
在简单的平面串联臂上,两种方法都足够好,DH 甚至可能更加短小。可当轴线的空间关系变得复杂,需要系统生成雅可比,或者问题进入闭环与并联机构时,旋量保留下来的几何意义便开始发挥力量。
所以,这套方法最值得记住的并不是六维向量,也不是矩阵指数,而是一种观察机器人的方式:
不再追问每一节坐标系应该怎么摆,而是直接追问——这个关节允许刚体沿哪一颗“螺钉”运动?
当这个问题变得自然以后,PoE 就不再像一条突然出现的高级公式。它只是把每个关节最真实的运动方式,按顺序写了下来。
参考资料
- J. Denavit and R. S. Hartenberg, A Kinematic Notation for Lower-Pair Mechanisms Based on Matrices, Journal of Applied Mechanics, 1955.
- Robert Stawell Ball, A Treatise on the Theory of Screws, Cambridge University Press, 1900.
- Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control, Chapters 3-5.
- Kevin M. Lynch and Frank C. Park, Modern Robotics Chapter 4: Forward Kinematics.
- Richard M. Murray, Zexiang Li, and S. Shankar Sastry, A Mathematical Introduction to Robotic Manipulation, CRC Press, 1994.
- C. Gosselin and J. Angeles, Singularity Analysis of Closed-Loop Kinematic Chains, IEEE Transactions on Robotics and Automation, 1990.
- S. K. Saha, J. Angeles, and J. Darcovich, The Jacobian Analysis of a Parallel Manipulator Using Reciprocal Screws, 1997.