Skip to content

旋量代数:刚体怎样「拧」过去

WARNING

🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。

Chasles 定理:刚体任意有限位移等价于绕某轴旋转并沿该轴平移——一条螺旋李群 SO(3) 只覆盖转动;加上平移后是 SE(3),李代数 se(3) 里的元素叫 twist(捻)。对偶的力和力矩叫 wrench(力螺)。本章把「六维是什么意思、平面指数映射每项从哪来、和 DH / 雅可比怎么对上」写清楚。demo 降到平面 SE(2),用指数映射让一块小矩形绕固定瞬心转过去。


一、通俗理解:刚体不会「一边转一边随便挪」

你把杯子从桌子左边放到右边并拧一下盖子:看起来又转又移。Chasles 说,一定存在一根轴,使这个位移 = 绕那根轴转 + 沿那根轴滑。没有「纯乱扭」。瞬时来看也一样:刚体的速度场由一根瞬时螺旋轴完全决定——轴上的点只沿轴走(或不动),别处的速度像转木马加上沿轴漂移。

空间刚体瞬时运动用六元组

ξ=(ωv)R6.

ω 是角速度(轴方向),v 是与参考原点有关的线速度,不是「质心速度」那么朴素。轴上一点 q

v=ω×(pq)+hω,

螺距 h 描述「转一弧度沿轴走多远」。h=0 纯转动(有限位移是绕轴转),h 纯平移。

力螺 F=(f,τ) 与捻通过瞬时功率配对:

P=ωτ+vf.

功率为零则力螺做不了功(约束力)。这就是虚功原理的旋量版。

旋量:捻与力螺

图解说明:刚体上一条螺旋轴;ω 沿轴,v 含沿轴平移与因转动引起的线速度。右栏捻、力螺与功率。平面 demo 只保留 ω 的一个标量和 vx,vy

动画说明:平面刚体绕固定瞬心拧过去,T(t)=exp(tξ^)。灰框是中间姿态残影。对应 demo 的 SE(2) 指数映射。

这套语言把 运动学 的雅可比列写成「各关节旋量」,把 动力学 的力写成力螺;Murray–Li–Sastry / Modern Robotics 用它统一开链。


二、平面 se(2) 指数映射(逐步)

平面刚体 3 自由度:转角 + 平移。李代数元素 ξ=(ω,vx,vy)。齐次表示

ξ^=(0ωvxω0vy000).

ω=0exp(tξ^) 就是沿 (vx,vy) 平移 tω0 时,转角 ϕ=ωt,平移由

(xy)=1ω(sinϕ(1cosϕ)1cosϕsinϕ)(vxvy)

给出(与 se2_exp 一致)。这和 SO(3) Rodrigues 是亲戚:sin, 1cos 再次出现。

纯转动绕瞬心 q 线速度应满足「绕 q 转」,平面里

v=ω(qy,qx)

(与三维 ω×r 差一个二维定向约定,练习会钉死)。于是矩形绕黑叉瞬心转,而不是绕原点转——这正是「旋量比原点速度直观」的地方:你先选轴,再写 v

旋量:瞬时运动 = 绕轴转 + 沿轴移

图解说明:平面刚体绕瞬时转动中心的速度场。右:SE(2) 的 twist (ω,vx,vy)

逐步推导:平面 exp(tξ^) 的平移块从哪来(点击展开)

ω=0ξ^ 幂次很快变零,exp(tξ^)=I+tξ^,右上角就是 t(vx,vy),纯平移。

ω0 时,把刚体运动看成「绕瞬心转」。转角 ϕ=ωt。指数级数对 3×3ξ^ 可以像 Rodrigues 那样收成 sinϕ1cosϕ。右上角(平移部分)作用在 v 上,得到正文的 2×2

(xy)=1ω(sinϕ(1cosϕ)1cosϕsinϕ)(vxvy).

v 按纯转动选取 v=ω(qy,qx),瞬心 q 处速度为零,刚体上每点走圆。这就是 demo:矩形不绕原点转,而绕你标出的黑叉转。

SO(3) 对照:那边只有转动,指数落在 3×3R;这里多一列平移,群变成 SE(2)。空间 SE(3) 是同一故事的 4×4 版。


三、和 DH、雅可比、四杆的关系

DH 给的是有限相邻位姿;旋量给的是瞬时生成元。指数映射把「关节速度 θ˙ 乘关节旋量」积成有限 T(θ)——指数积公式(PoE)

T(θ)=eξ^1θ1eξ^nθnT(0).

平面 2R 的两个 ξ 就是「绕基座转」「绕肘转」;对 θ 求导,这两列正是雅可比。PoE 不需要每杆贴 DH 坐标系,零位时把关节轴在空间里量出来即可。本课 demo 只做一帧 SE(2) exp,思想已经是 PoE 的一块积木。

四杆每根杆的瞬时运动也是某个 twist;闭链意味着若干旋量线性相关(与 Gruebler 的 M 一致)。

世界模型 若要在 SE(2)/SE(3) 上预测下一帧位姿,增量也应走 exp,而不是把 yaw 当普通实数加到 2π 外面。


四、常见疑问

Q:v 到底是哪一点的速度?
是参考系原点处「刚体上与原点重合的那一点」的速度(点可能只是空间里的一个标记)。换原点,v 要变,ω 不变。这就是为什么裸写 (vx,vy) 必须同时声明原点。

Q:力和力矩为什么合成力螺?
换原点时力和力矩会混在一起(力臂)。力螺把这对量变成与 twist 配对的协变对象,功率与原点无关。

Q:为什么 demo 不用 6 维?
6 维 exp 是 Rodrigues 的块矩阵版,公式长一倍。平面已经能看见「绕瞬心转」和 sin,1cos。空间情形见 MLS / Lynch。

Q:和齐次变换 T 什么关系?
TSE(3) 是群上的点(有限位姿);ξse(3) 是切向量(瞬时)。exp 把它们连起来,完全平行于 SO(3)。


五、代码在做什么

demo.py 指定 ω=1.2、瞬心 q=(0.8,0.2),构造纯转动 v,对一块矩形在 t=01.67 帧,颜色沿 viridis 变化,得到 screw_se2.png

平面螺旋运动


六、小结

概念一句话
螺旋 / Chasles刚体位移 = 绕轴转 + 沿轴移
twist ξ瞬时运动;(ω,v);原点要声明
wrench力与力矩;与 twist 功率对偶
SE(2) exp平面刚体有限位移;sin,1cos
PoE关节旋量指数连乘 = 正运动学
下游力控制、位姿积分、与 DH 对照

机器人学到此收束。建议回到 导论 把构型空间再看一眼,或用 ROS 2 看真机 TF。控制侧从 PID 接到关节伺服。

📥 Code

FileViewDownload
demo.pyOpenDownload
exercise.pyOpenDownload

参考

  1. Murray, Li, Sastry, A Mathematical Introduction to Robotic Manipulation
  2. Lynch & Park, Modern Robotics(PoE 全书主线)
  3. 对照 运动学 雅可比列 = 平面关节旋量