← 全部文章

旋量与 PoE:从 DH 坐标系到螺旋轴运动学

  • 机器人学
  • 旋量
  • PoE
  • 正运动学
  • 并联机构
目录

第一次学习机器人正运动学,我们通常从 DH 参数法开始:沿着机械臂逐节放置坐标系,填写参数表,再把一串齐次变换乘起来。它可靠、经典,也确实解决了问题。

但用得久了,往往会冒出一个更直接的问题:关节明明只是在绕一条轴转动,为什么我们总要先讨论坐标系应该怎么摆?

旋量理论给出的回答很干脆:那就从轴本身出发。

这里会经常遇到另一个名字:PoE,全称是 Product of Exponentials,中文通常译作指数积公式。它不是另一种关节或旋量,而是一条组合规则:先把每个关节沿自身螺旋轴产生的运动写成矩阵指数,再按照关节顺序依次相乘,最终得到末端位姿。

简单地说:**旋量描述一个关节怎样运动,PoE 描述整台机器人怎样由这些关节运动组合而成。**具体公式会在第 5 节自然出现,现在先记住这层分工就足够了。

这背后体现了机器人学中几种很迷人的建模语言:

  • 拉格朗日法从能量这个标量出发,组织复杂系统的动力学;
  • 旋量与 PoE从螺旋轴这个几何对象出发,组织刚体与机构的运动学;
  • 对偶四元数把旋转和平移放进统一的代数结构,适合空间计算与插值。

这是这个系列的第一篇。我们先不急着钻进六维向量,而是从熟悉的 Denavit-Hartenberg(DH)参数法出发,顺着几何直觉回答三个问题:

  1. 为什么还需要另一套运动学语言?
  2. 六维旋量究竟在描述什么?
  3. 这套语言在串联机器人和并联机构中分别带来了什么?

如果只带走一句话,希望是这一句:

DH 的核心对象是相邻连杆坐标系之间的变换;旋量的核心对象是关节允许发生的瞬时运动。PoE 则把这些关节运动按真实顺序复合起来。

DH 和 PoE 并不矛盾,也不存在精度上的高下。它们描述的是同一个刚体运动,只是一个习惯沿连杆记账,另一个选择直接凝视关节轴。

1. DH 参数法解决了什么

先回到 DH。面对一台串联机械臂,它会让我们从基座出发,沿着连杆依次建立坐标系,再用四个参数记录相邻坐标系之间的关系。对于标准 DH 约定,第 ii 节变换写成:

i1Ti=Rz(θi)Tz(di)Tx(ai)Rx(αi){}^{i-1}T_i =R_z(\theta_i)\,T_z(d_i)\,T_x(a_i)\,R_x(\alpha_i)

四个参数分别是:

  • θi\theta_i:绕 zi1z_{i-1} 轴旋转;
  • did_i:沿 zi1z_{i-1} 轴平移;
  • aia_i:沿 xix_i 轴平移;
  • αi\alpha_i:绕 xix_i 轴旋转。

串联机械臂的正运动学就是逐节相乘:

0Tn=0T11T2n1Tn{}^0T_n={}^{0}T_1{}^{1}T_2\cdots{}^{n-1}T_n

1955 年,Denavit 与 Hartenberg 把这套记号系统化。DH 真正重要的地方不只是上面的公式,而是它给“坐标系应该放在哪里”制定了规则:只要规则一致,一台空间机构就能被压缩成一张参数表。这对手工推导、教材讲解和工业软件都非常实用。

但它的麻烦也恰好藏在这里:在开始计算之前,必须先把每一个中间坐标系放对。

DH 与 PoE 的建模视角对比

1.1 DH 容易让人困惑的地方

如果机械臂只在平面内运动,这件事通常不难;一旦关节轴进入三维空间,建模就很容易变成一场细致的“坐标系记账”:

  • 标准 DH 与改进 DH 的变换次序不同;
  • 坐标系放置不唯一,不同建模者可以得到不同参数表;
  • 平行、相交或近乎重合的轴会让公法线和 xx 轴的选择显得生硬;
  • 插入、删除或重排一个关节,常常要重新检查其后的坐标系;
  • 看到一行 (θ,d,a,α)(\theta,d,a,\alpha),不一定能立即恢复关节轴在空间中的几何位置。

这些都不会让 DH 的结果变得不准确,却会让建模过程变得脆弱:公式可能没有错,错的是某根轴的方向、某条公法线,或者标准 DH 与改进 DH 在脑中悄悄混到了一起。

1.2 旋量不是为机器人发明的

有趣的是,旋量并不是为了机器人发明的新工具。早在机器人出现一个多世纪以前,几何学家已经在追问:空间中的刚体运动,能不能被一个简单的几何对象概括?

19 世纪初,Chasles 给出了一个漂亮的答案:刚体的任意有限位移,都可以归结为绕某条直线旋转,再沿同一条直线平移。几乎同时,Poinsot 从受力的另一侧发现,一般力系可以归结为沿某条直线的力,再加上绕同一条直线的力矩。一个谈“怎样动”,一个谈“怎样受力”,它们后来分别发展为 twistwrench

到了 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. 刚体运动为什么是一颗螺钉

现在暂时把机械臂放到一边,想象手里有一颗螺钉。拧动它时,会同时发生两件事:它绕自身轴线旋转,也沿这条轴线向前移动。

令人惊讶的是,空间刚体的一般有限位移也能这样理解。除纯平移等退化情况外,一个刚体从一个位姿到另一个位姿,总可以被整理为:

  1. 绕某条空间直线旋转 θ\theta
  2. 同时沿这条直线平移 hθh\theta

这里的 hh 称为螺距,单位是长度每弧度。也就是说,只要找到那条合适的轴,一次看似复杂的空间位移,就变成了熟悉的“旋转 + 沿轴平移”。这就是 Mozzi-Chasles 定理给出的几何图景。

刚体的螺旋运动

几个熟悉的关节只是它的特殊情况:

  • 旋转副:h=0h=0,只绕轴转动;
  • 螺旋副:0<h<0<|h|<\infty,旋转和平移耦合;
  • 移动副:没有旋转,可看作无穷大螺距的极限,但计算时直接令角速度部分为零。

所以,“螺旋”并不是为了写公式而附会出来的比喻。它本来就藏在刚体运动里,旋量只是把它找了出来。

3. 从一条轴到一个六维旋量

一条空间直线看起来只需要“方向 + 轴上一点”就能说清。为什么到了旋量,却要写成六个数?

下面采用现代机器人学中常见的排列顺序:角速度在前,线速度在后。

设螺旋轴方向为单位向量 ωR3\boldsymbol\omega\in\mathbb R^3,轴上任意一点为 r\boldsymbol r,螺距为 hh。它的六维表示为:

S=[ωv],v=ω×r+hω\mathcal S= \begin{bmatrix} \boldsymbol\omega\\ \boldsymbol v \end{bmatrix}, \qquad \boldsymbol v=-\boldsymbol\omega\times\boldsymbol r+h\boldsymbol\omega

这里的 ω\boldsymbol\omega 告诉我们轴朝向哪里,r\boldsymbol r 是轴上任意一点,hh 则描述每转过一弧度要沿轴前进多远。由于 ω×r=r×ω-\boldsymbol\omega\times\boldsymbol r=\boldsymbol r\times\boldsymbol\omegav\boldsymbol v 同时把轴线相对坐标原点的位置和沿轴平移的分量编码了进去。

3.1 为什么需要六个数

只给出 ω\boldsymbol\omega,只能说明“朝哪个方向转”,却无法回答“究竟绕哪一条轴转”。

想象一扇门。真实的门轴与一米外的另一条平行直线方向完全相同,因此具有相同的 ω\boldsymbol\omega;但如果门真的绕后一条轴转,门上每一点的速度都会改变。v\boldsymbol v 保存的正是这部分“轴在哪里”的信息。

对纯旋转关节,h=0h=0

S=[ωω×r]\mathcal S= \begin{bmatrix} \boldsymbol\omega\\ -\boldsymbol\omega\times\boldsymbol r \end{bmatrix}

对沿单位方向 v\boldsymbol v 的移动关节:

S=[0v]\mathcal S= \begin{bmatrix} \boldsymbol 0\\ \boldsymbol v \end{bmatrix}

于是,旋转、平移和边转边移不再是三套公式,而是同一种六维语言的三个特例。

3.2 旋量、twist 与指数坐标

这里容易出现一个术语上的小陷阱:中文里的“旋量”,有时指几何螺旋轴,有时又指正在发生的刚体速度。为了不在后文混淆,我们作一个简单区分:

  • S\mathcal S:单位螺旋轴,描述允许运动的方向;
  • V=Sθ˙\mathcal V=\mathcal S\dot\theta:twist,描述此刻真实发生的刚体速度;
  • Sθ\mathcal S\theta:指数坐标,描述沿这条轴积累的有限运动。

可以把三者理解为“道路、车速和里程”:S\mathcal S 指出允许沿哪条路运动,θ˙\dot\theta 决定此刻走多快,θ\theta 则记录已经沿这条路走了多少。twist 的前三维是角速度,后三维是坐标原点处对应的线速度;它不是两组数字的随意拼接,而是对整个刚体瞬时速度场的紧凑描述。

4. 指数映射:让瞬时运动长成有限位姿

接下来是全文最抽象的一步:怎样把“沿某条旋量轴运动”变成真正的有限位姿?

答案是矩阵指数。公式看起来稍显陌生,但它做的事情只有一句话:把瞬时运动积累成有限运动。

先把三维向量 ω=(ωx,ωy,ωz)T\boldsymbol\omega=(\omega_x,\omega_y,\omega_z)^{\scriptscriptstyle\mathsf T} 写成反对称矩阵:

[ω]=[0ωzωyωz0ωxωyωx0][\boldsymbol\omega]= \begin{bmatrix} 0&-\omega_z&\omega_y\\ \omega_z&0&-\omega_x\\ -\omega_y&\omega_x&0 \end{bmatrix}

那么六维旋量对应的 4×44\times4 矩阵为:

[S]=[[ω]v0T0][\mathcal S]= \begin{bmatrix} [\boldsymbol\omega]&\boldsymbol v\\ \boldsymbol 0^{\scriptscriptstyle\mathsf T}&0 \end{bmatrix}

这样,矩阵指数就能把李代数 se(3)\mathfrak{se}(3) 中的瞬时运动映射到刚体变换群 SE(3)SE(3)

T(θ)=e[S]θT(\theta)=e^{[\mathcal S]\theta}

ω=1\|\boldsymbol\omega\|=1 时:

e[S]θ=[e[ω]θG(θ)v0T1]e^{[\mathcal S]\theta}= \begin{bmatrix} e^{[\boldsymbol\omega]\theta}&G(\theta)\boldsymbol v\\ \boldsymbol 0^{\scriptscriptstyle\mathsf T}&1 \end{bmatrix}

其中:

G(θ)=Iθ+(1cosθ)[ω]+(θsinθ)[ω]2G(\theta)=I\theta+(1-\cos\theta)[\boldsymbol\omega] +(\theta-\sin\theta)[\boldsymbol\omega]^2

旋转部分由 Rodrigues 公式给出:

e[ω]θ=I+sinθ[ω]+(1cosθ)[ω]2e^{[\boldsymbol\omega]\theta} =I+\sin\theta[\boldsymbol\omega] +(1-\cos\theta)[\boldsymbol\omega]^2

对于纯移动关节,ω=0\boldsymbol\omega=\boldsymbol0,指数映射退化成直观的平移:

e[S]θ=[Ivθ0T1]e^{[\mathcal S]\theta}= \begin{bmatrix} I&\boldsymbol v\theta\\ \boldsymbol0^{\scriptscriptstyle\mathsf T}&1 \end{bmatrix}

如果暂时不关心展开式,可以只记住 e[S]θe^{[\mathcal S]\theta} 这个整体:它表示刚体沿旋量轴 S\mathcal S 运动了 θ\theta。指数映射最漂亮的地方正在这里——旋转和平移不再被拆开拼装,“一次关节运动”可以作为一个完整的几何对象进入计算。

5. PoE:把关节运动按顺序乘起来

现在把镜头拉回机器人。面对一台 nn 自由度串联机械臂,PoE 只要求我们先做两件事:把机器人放到约定的零位姿,然后记录:

  • 每个关节轴在空间坐标系中的旋量 S1,,Sn\mathcal S_1,\ldots,\mathcal S_n
  • 零位姿下末端相对基座的齐次变换 MM

有了这两样东西,正运动学几乎可以直接写出来。这就是指数积(Product of Exponentials,PoE):

Tsb(θ)=e[S1]θ1e[S2]θ2e[Sn]θnMT_{sb}(\boldsymbol\theta) =e^{[\mathcal S_1]\theta_1} e^{[\mathcal S_2]\theta_2} \cdots e^{[\mathcal S_n]\theta_n}M

从右向左读,MM 是末端的起点;每个指数项代表一个关节施加的运动。它们像一串有先后顺序的动作,逐个把末端从零位姿带到当前位姿。

这里的顺序不能随意交换。先转再移,与先移再转,通常不会到达同一个位置;空间刚体运动一般不满足交换律:

e[S1]θ1e[S2]θ2e[S2]θ2e[S1]θ1e^{[\mathcal S_1]\theta_1}e^{[\mathcal S_2]\theta_2} \ne e^{[\mathcal S_2]\theta_2}e^{[\mathcal S_1]\theta_1}

5.1 空间雅可比为什么会自然出现

PoE 还有一个很自然的副产品:雅可比。第一个关节运动以后,后续关节轴会跟着前面的连杆一起改变位置。伴随变换 AdT\operatorname{Ad}_T 做的,正是把零位姿下记录的旋量“搬运”到当前位置。

空间雅可比的第 ii 列为:

Js,i(θ)=Ade[S1]θ1e[Si1]θi1SiJ_{s,i}(\boldsymbol\theta) =\operatorname{Ad}_{e^{[\mathcal S_1]\theta_1}\cdots e^{[\mathcal S_{i-1}]\theta_{i-1}}}\mathcal S_i

因此:

Vs=Js(θ)θ˙\mathcal V_s=J_s(\boldsymbol\theta)\dot{\boldsymbol\theta}

于是,空间雅可比不再像是对一大串矩阵求导后突然冒出的结果。它的每一列都有清楚的画面:当前姿态下,第 ii 个关节会让末端怎样瞬时运动。

6. 串联实例:平面 2R 机械臂

先从最熟悉的例子开始。想象一台放在桌面上的两连杆机械臂:关节 1 固定在基座,长度为 L1L_1 的连杆 1 接到关节 2,再由长度为 L2L_2 的连杆 2 连接末端。两个关节都绕纸面外的 zz 轴转动。

我们把两根连杆沿 xx 轴水平伸直的姿态定义为零位姿。

平面 2R 机械臂的 PoE 建模

6.1 用标准 DH 参数描述

用标准 DH 法,我们会在基座、关节 2 和末端依次放置坐标系,再把相邻坐标系之间的关系填进参数表。对于这个平面例子,表格非常规整:

关节 iiθi\theta_idid_iaia_iαi\alpha_i
1θ1\theta_100L1L_100
2θ2\theta_200L2L_200

沿着坐标系逐节相乘,就得到:

T02=Rz(θ1)Tx(L1)Rz(θ2)Tx(L2)T_{02}=R_z(\theta_1)T_x(L_1)R_z(\theta_2)T_x(L_2)

6.2 用 PoE 描述

换成 PoE,我们保留基座坐标系和末端坐标系,但不再为每根连杆强制放置中间坐标系。整个建模过程只需要三步,而且几乎都能从图上直接读出。

第一步:看末端在零位姿时在哪里。

两根连杆水平伸直时,末端没有旋转,位置在 x=L1+L2x=L_1+L_2。因此零位姿矩阵为:

M=[100L1+L2010000100001]M= \begin{bmatrix} 1&0&0&L_1+L_2\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1 \end{bmatrix}

第二步:看两个关节分别绕哪条轴转。

两个关节都绕 zz 轴,所以:

ω1=ω2=[001]\boldsymbol\omega_1=\boldsymbol\omega_2= \begin{bmatrix}0\\0\\1\end{bmatrix}

关节 1 的轴经过原点,取轴上一点 r1=(0,0,0)T\boldsymbol r_1=(0,0,0)^{\scriptscriptstyle\mathsf T},线速度部分自然为零:

v1=ω1×r1=0\boldsymbol v_1=-\boldsymbol\omega_1\times\boldsymbol r_1 =\boldsymbol 0

关节 2 的轴经过 r2=(L1,0,0)T\boldsymbol r_2=(L_1,0,0)^{\scriptscriptstyle\mathsf T},因此:

v2=ω2×r2=[0L10]\boldsymbol v_2=-\boldsymbol\omega_2\times\boldsymbol r_2 =\begin{bmatrix}0\\-L_1\\0\end{bmatrix}

两个旋量轴于是直接写成:

S1=[001000],S2=[0010L10]\mathcal S_1= \begin{bmatrix} 0\\0\\1\\0\\0\\0 \end{bmatrix}, \qquad \mathcal S_2= \begin{bmatrix} 0\\0\\1\\0\\-L_1\\0 \end{bmatrix}

第三步:按关节顺序写出指数积。

Tsb(θ1,θ2)=e[S1]θ1e[S2]θ2MT_{sb}(\theta_1,\theta_2) =e^{[\mathcal S_1]\theta_1} e^{[\mathcal S_2]\theta_2}M

展开后末端位置仍然是熟悉的结果:

x=L1cosθ1+L2cos(θ1+θ2)y=L1sinθ1+L2sin(θ1+θ2)\begin{aligned} x&=L_1\cos\theta_1+L_2\cos(\theta_1+\theta_2)\\ y&=L_1\sin\theta_1+L_2\sin(\theta_1+\theta_2) \end{aligned}

到这里,正运动学已经建立完成。PoE 并没有改变结果,只改变了我们到达结果的路径。

回头比较刚才的两种思路:

  • DH 先问:“相邻坐标系如何变换?”
  • PoE 先问:“每个关节绕哪条轴运动,末端起初在哪里?”

对于平面 2R,DH 的表格其实已经足够简洁,PoE 并没有压倒性的优势。这个例子真正值得体会的是它的建模习惯:我们只是看了看末端起初在哪里,又看了看两个关节轴的方向和位置。

当轴线开始倾斜、偏置,机构混合旋转副与移动副,或者模型需要频繁用于雅可比计算和标定时,这种“看轴而不是摆坐标系”的思路会越来越清爽。

6.3 奇异性并不会被表示法消除

优雅的表示法不会改变机构本身。对末端位置求导,仍然得到二维位置雅可比:

Jp=[L1sinθ1L2sin(θ1+θ2)L2sin(θ1+θ2)L1cosθ1+L2cos(θ1+θ2)L2cos(θ1+θ2)]J_p= \begin{bmatrix} -L_1\sin\theta_1-L_2\sin(\theta_1+\theta_2)&-L_2\sin(\theta_1+\theta_2)\\ L_1\cos\theta_1+L_2\cos(\theta_1+\theta_2)&L_2\cos(\theta_1+\theta_2) \end{bmatrix}

其行列式为:

detJp=L1L2sinθ2\det J_p=L_1L_2\sin\theta_2

θ2=0\theta_2=0π\pi 时,两根连杆伸成或折成一条直线。此时无论怎样组合两个关节的微小转动,末端都无法产生某个方向的瞬时速度。

PoE 的价值,是让雅可比每一列来自哪根关节轴更加清楚,而不是让奇异性凭空消失。还要注意:这里讨论的是“末端位置”任务;如果把末端姿态也纳入任务变量,雅可比的维度和秩判断都会随之改变。

7. 并联实例:平面五杆机构

如果说串联机械臂像一条从肩膀延伸到手掌的手臂,那么并联机构更像几个人共同托住同一个平台:每条支链都连接基座与末端,也都对末端施加约束。

问题因此发生了变化。我们不再只有一条运动链可以从头乘到尾,而必须保证:

每条支链都声称末端在某个位置,这些结果必须彼此一致。

以两自由度平面五杆机构为例。桌面上固定着两个电机,位置分别为 AABB;它们驱动关节 q1q_1q3q_3,通过左右两组连杆共同牵引末端点 PP。中间的 q2q_2q4q_4 没有电机,是随机构运动的被动关节。

我们真正控制的是两个主动关节,却不得不面对两个额外的被动关节速度。这正是并联机构速度分析中最容易让公式膨胀的地方。

平面五杆机构中的互易旋量

7.1 闭环约束

先用最普通的位置关系把闭环写出来。定义沿角度 ϕ\phi 方向的单位向量:

u(ϕ)=[cosϕsinϕ]\boldsymbol u(\phi)= \begin{bmatrix} \cos\phi\\\sin\phi \end{bmatrix}

左右两侧第二根连杆的绝对方向分别是:

ϕ2=q1+q2,ϕ4=q3+q4\phi_2=q_1+q_2, \qquad \phi_4=q_3+q_4

现在分别沿左支链和右支链走到末端。两条路径必须到达同一个 p\boldsymbol p

p=A+L1u(q1)+L2u(ϕ2)\boldsymbol p =\boldsymbol A+L_1\boldsymbol u(q_1)+L_2\boldsymbol u(\phi_2) p=B+L3u(q3)+L4u(ϕ4)\boldsymbol p =\boldsymbol B+L_3\boldsymbol u(q_3)+L_4\boldsymbol u(\phi_4)

这就是闭环约束:左边算出的 PP 与右边算出的 PP 必须重合。每条支链都可以用 PoE 和空间雅可比描述,但多条支链最终还要在末端“对上账”。

7.2 用一次投影消掉被动关节

如果直接对闭环方程求导,再联立消元,当然可以得到速度关系。但旋量的思路更像是在问:能不能找一个方向,让我们不关心的被动关节速度自己消失?

先定义平面内逆时针旋转 9090^\circ 的矩阵:

E=[0110]E= \begin{bmatrix} 0&-1\\1&0 \end{bmatrix}

因为 Eu(ϕ)E\boldsymbol u(\phi) 恰好与 u(ϕ)\boldsymbol u(\phi) 垂直,左支链的末端速度可以写成:

p˙=L1Eu(q1)q˙1+L2Eu(ϕ2)(q˙1+q˙2)\dot{\boldsymbol p} =L_1E\boldsymbol u(q_1)\dot q_1 +L_2E\boldsymbol u(\phi_2)(\dot q_1+\dot q_2)

注意第二项:它是被动关节 q2q_2 参与产生的速度,而且方向始终垂直于第二根连杆。

这给了我们一个很自然的选择——沿第二根连杆的轴向投影。令 u2=u(ϕ2)\boldsymbol u_2=\boldsymbol u(\phi_2),用 u2T\boldsymbol u_2^{\scriptscriptstyle\mathsf T} 左乘速度方程:

u2Tp˙=L1sinq2q˙1\boldsymbol u_2^{\scriptscriptstyle\mathsf T}\dot{\boldsymbol p} =L_1\sin q_2\,\dot q_1

关键就在下面这个再简单不过的正交关系:

u2TEu2=0\boldsymbol u_2^{\scriptscriptstyle\mathsf T}E\boldsymbol u_2=0

沿杆方向与垂直于杆的速度做点积,结果必然为零。于是,包含未知被动速度 q˙2\dot q_2 的整项被消掉,只留下主动关节 q˙1\dot q_1。对右支链做同样的投影:

u4Tp˙=L3sinq4q˙3\boldsymbol u_4^{\scriptscriptstyle\mathsf T}\dot{\boldsymbol p} =L_3\sin q_4\,\dot q_3

把左右两个结果叠在一起:

[u2Tu4T]App˙=[L1sinq200L3sinq4]Bp[q˙1q˙3]\underbrace{ \begin{bmatrix} \boldsymbol u_2^{\scriptscriptstyle\mathsf T}\\ \boldsymbol u_4^{\scriptscriptstyle\mathsf T} \end{bmatrix}}_{A_p} \dot{\boldsymbol p} = \underbrace{ \begin{bmatrix} L_1\sin q_2&0\\ 0&L_3\sin q_4 \end{bmatrix}}_{B_p} \begin{bmatrix} \dot q_1\\\dot q_3 \end{bmatrix}

一个原本同时含有主动、被动关节速度的闭环问题,现在被整理成了只含主动速度和末端速度的映射。更妙的是,等式两边的两个矩阵恰好把并联机构的两类奇异性分开了。

7.3 两类奇异性一眼可见

先看右侧的 BpB_p。当它降秩时,发生支链或串联奇异

sinq2=0sinq4=0\sin q_2=0 \quad\text{或}\quad \sin q_4=0

从图上看,就是某一侧的两根连杆完全伸直或折叠。主动关节虽然还在转,却无法把速度有效传到末端的某个方向。

再看左侧的 ApA_p。当它降秩时,发生并联奇异

detAp=sin(ϕ4ϕ2)=0\det A_p =\sin(\phi_4-\phi_2)=0

这意味着左右两根末端连杆相互平行或共线,它们提供的两个约束方向变得线性相关。此时即使主动关节锁住,末端仍可能存在非零的瞬时运动方向——机构在这个方向上失去了约束刚度。

一边是“驱动传不出去”,另一边是“约束撑不住末端”。两个行列式背后不是抽象的代数退化,而是可以直接在机构图上看见的几何构型。如果 ApA_pBpB_p 同时降秩,则属于更特殊的组合退化,需要结合具体构型单独分析。

8. 互易旋量:运动与力之间的优雅对偶

刚才那次沿连杆方向的投影,看起来像一个为五杆机构量身定做的小技巧。其实,它正是互易旋量在二维平面上的影子。

设刚体 twist 为:

V=[ωv]\mathcal V= \begin{bmatrix} \boldsymbol\omega\\\boldsymbol v \end{bmatrix}

力旋量(wrench)为:

W=[mf]\mathcal W= \begin{bmatrix} \boldsymbol m\\\boldsymbol f \end{bmatrix}

把 twist 看作运动,把 wrench 看作力与力矩,它们之间最自然的联系就是瞬时功率:

WTV=mTω+fTv\mathcal W^{\scriptscriptstyle\mathsf T}\mathcal V =\boldsymbol m^{\scriptscriptstyle\mathsf T}\boldsymbol\omega +\boldsymbol f^{\scriptscriptstyle\mathsf T}\boldsymbol v

若:

WTV=0\mathcal W^{\scriptscriptstyle\mathsf T}\mathcal V=0

就称二者互易。翻译成物理语言就是:这个力旋量对该运动不做瞬时功。

回头看五杆机构:如果沿末端连杆施加一个轴向力,它穿过被动关节,因此不会对该关节产生力矩;等价地说,这个轴向力与被动转动造成的末端切向速度正交。我们并不是用代数技巧“碰巧”消掉了 q˙2\dot q_2,而是找到了一个对它不做功的力方向。

把这个思路推广到 Stewart 平台等空间并联机构,步骤仍然相同:

  1. 为每条支链写出允许的关节 twist;
  2. 寻找与被动关节 twist 互易的约束或驱动力 wrench;
  3. 把各支链 wrench 组装成并联雅可比;
  4. 通过这些旋量的线性相关性判断自由度、传力特性和奇异性。

这正是旋量在并联机构中格外迷人的地方:同一种语言,一面描述“能怎样动”,另一面描述“能传什么力”;复杂的消元过程,被转化为寻找运动与力之间的几何正交关系。

9. 旋量与 PoE 不是什么

讲到这里,旋量很容易给人一种“它能把一切都变简单”的感觉。越是漂亮的工具,越需要看清它的边界。

9.1 它不是自动求解器

PoE 能给出结构清楚的正运动学和雅可比,却不会自动奉送闭式逆运动学、最优轨迹或控制器。逆解仍可能需要几何分解、Paden-Kahan 子问题或数值迭代。

9.2 它不会消除坐标系

旋量仍然要在某个坐标系中表达,空间旋量与机体旋量之间也要通过伴随变换转换。PoE 减少的是大量中间连杆坐标系的强制放置,并没有消除坐标概念本身。

9.3 它不会自动提高数值精度

DH 与 PoE 都能精确描述同一个机构。最终的数值表现取决于算法、参数尺度、浮点实现、测量噪声和标定方式,而不是方法的名字听起来是否现代。

9.4 “几何雅可比”和“解析雅可比”不能混用

旋量雅可比直接映射到刚体 twist;解析雅可比则可能映射到欧拉角速度、位置导数等特定参数。二者可以转换,却不能不加区分地替换。讨论秩和奇异性之前,必须先说清楚任务变量究竟是什么。

10. 工程上如何开始使用 PoE

如果现在要把 PoE 用到一台已有 CAD 或 URDF 模型的机器人上,可以把工作拆成下面八步:

  1. 选定基座坐标系 {s}\{s\} 和末端坐标系 {b}\{b\}
  2. 把机器人放到定义明确的零位姿;
  3. 对每个关节记录轴方向 ωi\boldsymbol\omega_i 和轴上一点 ri\boldsymbol r_i
  4. 计算 vi=ωi×ri+hiωi\boldsymbol v_i=-\boldsymbol\omega_i\times\boldsymbol r_i+h_i\boldsymbol\omega_i
  5. 记录末端零位姿 MM
  6. 用 PoE 计算正运动学;
  7. 用有限差分或自动微分核对雅可比;
  8. 用零位、单关节运动和随机姿态与 CAD、仿真或 DH 模型交叉验证。

公式写完不代表建模结束。下面这些小检查,往往比再推一遍公式更能避免工程错误:

  • 明确六维向量采用 (ω,v)(\boldsymbol\omega,\boldsymbol v) 还是 (v,ω)(\boldsymbol v,\boldsymbol\omega) 排列;
  • 角度统一使用弧度,旋转轴应归一化;
  • 区分空间雅可比和机体雅可比;
  • 注意右手定则和关节正方向;
  • 不要把末端工具偏置重复计入螺旋轴和 MM
  • 对并联机构同时检查支链奇异与并联奇异。

11. 小结

现在可以回到文章开头的那个问题了。

DH 参数法沿着连杆向前走,把机器人看成一串相邻坐标系:

0Tn=0T11T2n1Tn{}^0T_n={}^{0}T_1{}^{1}T_2\cdots{}^{n-1}T_n

旋量与 PoE 则退后一步,从基座坐标系观察整台机器人,把它看成一组有序的螺旋运动:

Tsb(θ)=e[S1]θ1e[Sn]θnMT_{sb}(\boldsymbol\theta) =e^{[\mathcal S_1]\theta_1}\cdots e^{[\mathcal S_n]\theta_n}M

在简单的平面串联臂上,两种方法都足够好,DH 甚至可能更加短小。可当轴线的空间关系变得复杂,需要系统生成雅可比,或者问题进入闭环与并联机构时,旋量保留下来的几何意义便开始发挥力量。

所以,这套方法最值得记住的并不是六维向量,也不是矩阵指数,而是一种观察机器人的方式:

不再追问每一节坐标系应该怎么摆,而是直接追问——这个关节允许刚体沿哪一颗“螺钉”运动?

当这个问题变得自然以后,PoE 就不再像一条突然出现的高级公式。它只是把每个关节最真实的运动方式,按顺序写了下来。

参考资料