速度运动学:twist 与雅可比
手爪的速度是 6 个数:角速度加线速度,合起来叫 twist。关节速度怎样变成这 6 个数?靠雅可比,而它的每一列,都是一根关节轴被前面的关节带到当前位置之后的螺旋轴。看懂这一点,空间雅可比、机体雅可比、奇异位形和笛卡尔速度控制就成了同一个故事。
1为什么机器人需要它
用 SpaceMouse 遥操作机械臂、让手眼相机盯着一个目标、在狭窄的工位里躲开奇异位形、让末端以 5 N 的力压住工件……这些任务都在说同一句话:"手爪应该这样动",而电机只听得懂"每个关节转多快"。把前一句翻译成后一句的,是雅可比。
3.4 节在平面里造出了它:每一列是"关节到手爪的杠杆臂转 90°",手爪的速度是各列的叠加。到了三维,"手爪的速度"不再是一个向量。刚体上每个点的速度都不同,整个速度场由 6 个数决定:角速度 \(\boldsymbol\omega\) 和线速度 \(\mathbf v\),合起来就是 5.8 节的 twist \(\boldsymbol\xi=(\boldsymbol\omega,\mathbf v)\)(角速度在前)。于是
- 速度运动学:\(\boldsymbol\xi = J(\boldsymbol\theta)\,\dot{\boldsymbol\theta}\),\(J\) 是 \(6\times n\) 的矩阵。关节速度 → 手爪的 twist。
- 笛卡尔速度控制与逆运动学:反过来解 \(\dot{\boldsymbol\theta}\)(7.5 节每一步迭代都要解一次)。操作员给的命令常常写在工具系里,规划器给的写在基座系里,这两种说法要用不同的雅可比。
- 奇异位形:\(J\) 在哪些姿态下丢掉一个方向?丢掉的是平移、转动,还是两者的混合?
- 力与静力学:\(\boldsymbol\tau=J^\top\mathbf F\)(3.4 节),三维里的 \(\mathbf F\) 是力矩加力的 wrench,下一课 7.6 讲。
平面里的杠杆臂图景到三维不够用了:关节轴可以指向任意方向,轴与轴之间还可以是异面的。5.10 节的 PoE 给出了更好的语言:每个关节是一根螺旋轴。这一课只有一个新想法:雅可比的第 \(i\) 列,就是第 \(i\) 根螺旋轴在当前位形下的样子。
2直觉:速度场,与螺旋运动的叠加
先回顾 5.8 节。刚体运动时,体上每个点 \(\mathbf p\) 的速度是 \(\mathbf u(\mathbf p)=\mathbf v+\boldsymbol\omega\times\mathbf p\):只要知道 \(\boldsymbol\omega\) 和"此刻恰在世界原点的那个点"的速度 \(\mathbf v\),整个场就定了。这 6 个数就是空间 twist \(\boldsymbol\xi_s\)。只要 \(\boldsymbol\omega\ne0\),这个速度场就是一次绕某条直线的螺旋运动(Chasles 定理,5.6 节):
在轴上的点 \(\mathbf q_c\),速度恰好是 \(h\boldsymbol\omega\),只沿轴方向:这就是"螺旋"。每个转动关节单独转时,是最简单的 twist:\(S_i=(\hat{\boldsymbol\omega}_i,\,-\hat{\boldsymbol\omega}_i\times\mathbf q_i)\),螺距为 0,轴上所有点速度为零。
现在让几个关节同时转。关键事实:速度场是线性的。几个刚体运动的速度场逐点相加,得到的还是一个刚体运动的速度场,所以twist 可以直接相加:手爪的 twist 就是每个关节"在当前位置的螺旋轴"乘以关节速度之和。下面的实验用两个关节看清这件事:A 轴是竖直的 z 轴,B 轴是水平的、可以平移和转向的一根轴。两根轴都是纯转动(螺距 0),可是当它们异面(B 轴离开 z 轴一段距离 \(r\))时,两个纯转动之和是一个有螺距的螺旋运动:边绕边沿轴前进,像拧螺丝。
- 选"A+B",让螺距 \(h\ge0.25\)。读数里的闭式 \(h=-abr/(a^2+b^2)\) 说:\(a,b,r\) 的符号要怎样搭配?为什么 \(r=0\) 时 \(h\) 一定为 0?
- 先做出一个有螺距的运动,再把 \(r\) 拉回 0(\(|a|,|b|\ge0.4\))。两根轴相交了,合成运动变成纯转动:螺旋轴是否穿过交点?
- 把盒子移到离原点远一点(\(b_x>1\))并转个角度(\(|\text{yaw}|>30^\circ\))。空间 twist 与机体 twist 的 6 个数完全不同,核对误差却仍是 \(10^{-16}\):它们是同一个运动的两种读法。
机械臂的雅可比,不过是把这个实验做了 \(n\) 次:每个关节贡献一个螺旋轴 \(S_i\)(在当前位置),乘上关节速度 \(\dot\theta_i\),所有 twist 相加。3.4 节的"杠杆臂转 90°"是这件事在"所有轴都垂直于纸面"时的特例。
3动手玩:一台 6R 臂的雅可比,一列一列看
用 5.10 节那类六自由度臂:肩上的 J1 绕竖直 z 轴(腰),J2、J3 是肩和肘(绕 y 轴),J4、J5、J6 是三个相交于手腕中心的腕关节(绕 x、y、x)。零位时每个关节的螺旋轴 \(S_i\) 都已知。关节 1 转过 \(\theta_1\) 之后,关节 2 的轴被带到了新的位置,这根"被搬运过的轴"就是雅可比的第二列。一般地:
FIG 2 把每一列 \(J_{s,i}\) 画成一条线:线是被搬运到当前位置的关节轴,颜色与关节一一对应。选一个关节"聚焦",读数会给出它的 6 个数,并核对一件事:轴上的点速度为零,即 \(\mathbf v_i+\boldsymbol\omega_i\times\mathbf p_i=0\),\(\mathbf p_i\) 是轴上的点(关节中心)。再给出关节速度,各关节在手爪(工具点)处产生的速度 \(\dot\theta_i(\mathbf v_i+\boldsymbol\omega_i\times\mathbf p_{\text{tool}})\) 首尾相连,终点就是总的线速度 \(\mathbf u\),同时画出总的角速度 \(\boldsymbol\omega\)。最后,读数把解析的 \(J_s\) 与"对 FK 做有限差分"得到的雅可比逐项比较。
- 聚焦 J5,然后把 \(\theta_1\) 转动 \(60^\circ\) 以上。J5 的轴绕着竖直轴转了,J1 自己的轴却纹丝不动:第一列永远是 \(S_1\),而第 \(i\) 列受前 \(i-1\) 个关节影响。
- 在"关节速度"里只让 J6 转(其余为 0,\(|\dot\theta_6|\ge0.4\))。工具点的线速度 \(\mathbf u\) 是多少?为什么?(提示:J6 的轴穿过哪一点?)
4第二、第三视角:奇异位形,与"哪个坐标系"
奇异位形:雅可比丢掉一个方向
\(J\) 的秩小于 6,就是奇异位形:存在一个 twist 方向,无论关节怎么转都产生不了。3.4 节在平面里看到了伸直和折回。6R 臂有三族典型的奇异位形:
- 肩奇异:手腕中心落在 J1 的轴上。此时 J1 转动不会使手腕中心移动,手腕中心失去了垂直于手臂平面的那个方向。
- 肘奇异:手臂完全伸直(\(\theta_3=0\))或完全折回。手腕中心失去沿手臂方向的那个速度,3.4 节的二连杆就是它。
- 腕奇异:\(\theta_5=0\),J4 与 J6 的轴共线,两个关节只能产生同一种转动,一个方向的转动丢失了。
FIG 3 让你沿着三族中的一族"穿过"奇异点:滑块 \(s\) 从 \(-1\) 走到 \(1\),\(s=0\) 恰在奇异位形上。观察六个奇异值 \(\sigma_i\)(最后一个降到 0)、行列式的符号(穿过时翻号:对应逆运动学两个分支之间的"跨越")、丢失的方向(箭头),以及线速度椭球:\(J_v\) 是 \(J\) 的线速度分块,单位关节速度球映到 \(J_vJ_v^\top\) 的椭球,半轴是 \(J_v\) 的奇异值。
有两个细节值得注意。第一,奇异位形与 6 个数怎么混合无关,奇异值却有关:\(J\) 的上半是 m/rad,下半是 rad/rad,对这样的矩阵做 SVD,结果取决于你给转动那三行乘了多大的"特征长度" \(L\)(3.4 节误区 4)。滑块 \(L\) 把转动行乘上 \(L\):秩不变,\(\sigma_{\min}\) 与丢失方向却会变。第二,参考点:同一个 twist,在不同的点上读线速度是不同的数。默认把参考点放在手腕中心,那样肩、肘两族的丢失方向是干净的线速度;换成工具点,线速度里会混进 \(\boldsymbol\omega\times\mathbf r\)。
- 选"肘",让 \(s=0\)。秩变成 5,椭球被压成一个圆盘,丢失的方向沿手臂。把 \(s\) 向两侧各拉一点:行列式的符号翻了吗?
- 选"腕",让 \(s=0\)。秩同样是 5,可是线速度椭球并没有被压成一个盘,\(J_v\) 和 \(J_\omega\) 两块各自仍然满秩。奇异性只出现在"6 行合在一起"时:丢失的方向是线速度与角速度的混合。
- 选"腕"并停在 \(s=0\),把 \(L\) 从 1 拉到 0.5 以下或 1.5 以上:秩不变,丢失方向里"转动 / 平移"的比例变了。哪个才是"真正的"丢失方向?(对"肘"和"肩",参考点取手腕中心时,丢失方向是纯平移,与 \(L\) 无关;把参考点换成工具点再试一次。)
哪个坐标系?同一组关节速度,三种雅可比
同一组关节速度 \(\dot{\boldsymbol\theta}\),手爪的运动可以用不同的"读法"写下来。三种常见的读法:
- 空间雅可比 \(J_s\):\(\boldsymbol\xi_s=(\boldsymbol\omega_s,\mathbf v_s)\),参考点是世界原点,轴取世界系。
- 机体雅可比 \(J_b\):\(\boldsymbol\xi_b=\operatorname{Ad}_{T^{-1}}\boldsymbol\xi_s\),参考点是工具原点,轴取工具系。"沿夹爪自己的轴再走 2 cm"就是在这里说的。
- 解析雅可比 \(J_a\):对位姿的某种参数化求导,如位置 \(\mathbf p\) 加 ZYX 欧拉角 \((\psi,\theta,\varphi)\):\(\dot{\mathbf x}=(\dot{\mathbf p},\dot\psi,\dot\theta,\dot\varphi)\)。角速度不是欧拉角的导数,两者差一个矩阵 \(E(\psi,\theta,\varphi)\):\(\boldsymbol\omega_s=E\,(\dot\psi,\dot\theta,\dot\varphi)^\top\)。ZYX 时 \(\det E=-\cos\theta\),俯仰角 \(\theta=\pm90^\circ\)(万向节锁)时 \(E\) 奇异。
FIG 4 固定 \(\theta_4=0\),这时手爪的朝向恰好是 \(R=R_z(\theta_1)R_y(\vartheta)R_x(\theta_6)\),\(\vartheta=\theta_2+\theta_3+\theta_5\),ZYX 角就是 \((\theta_1,\vartheta,\theta_6)\)。用滑块改变手爪俯仰角 \(\vartheta\),选一组关节速度,侧栏同时列出 \(\boldsymbol\xi_s\)、\(\boldsymbol\xi_b\) 和 \(\dot{\mathbf x}\)。看俯仰角靠近 \(\pm90^\circ\) 时,同一组关节速度算出的欧拉角速度如何爆炸,而手臂自己的雅可比 \(J_s\) 与 \(J_b\) 完全正常。画面里的三根轴是欧拉角的三根转轴:偏航(蓝)、俯仰(绿)、滚转(红);万向节锁时红轴与蓝轴合成一根。
- 选"θ̇₄"预设,把俯仰角 \(\vartheta\) 拉到 \(\ge85^\circ\):欧拉角速度冲出刻度,而手臂的 \(\sigma_{\min}(J_s)\) 离 0 很远(60° 到 90° 之间几乎不变)。再找出手臂自己奇异的那个 \(\vartheta\)(\(\theta_5=0\),\(\sigma_{\min}(J_s)\) 掉到 0),它与万向节锁是同一回事吗?
\(J_s\)、\(J_b\)、混合雅可比和 \(J_a\) 不是四种不同的"物理",而是同一个线性映射 \(\dot{\boldsymbol\theta}\mapsto\)(手爪的运动)在不同参考点、不同坐标轴、不同参数化下的矩阵。前三者之间只差一个伴随矩阵,所以奇异位形(秩)完全一样;\(J_a\) 多出一个参数化带来的矩阵 \(E^{-1}\),它会引入表示奇异(万向节锁):这个奇异性在机器人身上并不存在,只存在于你选的数字里。
5再看数学
提示:把鼠标悬停在公式中带底色的符号上,FIG 1 或 FIG 2 中对应的元素会被高亮。
空间 twist 与机体 twist
设手爪的位姿是 \(T(t)\)。体上固定的点 \(\mathbf p_b\) 在世界里是 \(\mathbf p=T\mathbf p_b\),速度 \(\dot{\mathbf p}=\dot TT^{-1}\mathbf p\)。把 \(\dot TT^{-1}\) 与 \(T^{-1}\dot T\) 分别写成 twist 的 \(4\times4\) 矩阵(5.5 节):
于是 \(\dot{\mathbf p}=\mathbf v_s+\boldsymbol\omega_s\times\mathbf p\)(与上文的速度场一致),而机体 twist 里的 \(\boldsymbol\omega_b=R^\top\boldsymbol\omega_s\),\(\mathbf v_b=R^\top(\mathbf v_s+\boldsymbol\omega_s\times\mathbf t)\):工具原点的速度,读在工具系的轴上。本课的 twist 顺序始终是 \((\boldsymbol\omega,\mathbf v)\),角速度在前,\(\operatorname{Ad}\) 的分块因此是上面这个样子(若某个库把线速度放前面,分块对调)。Modern Robotics 把 twist 记作 \(\mathcal V\),Featherstone 的空间向量也是角度在前。
对指数积求导:空间雅可比
5.10 节(7.3 节再展开)的 PoE 是 \(T(\boldsymbol\theta)=e^{[S_1]\theta_1}\cdots e^{[S_n]\theta_n}M\)。记 \(P_{i-1}=e^{[S_1]\theta_1}\cdots e^{[S_{i-1}]\theta_{i-1}}\),则 \(T=P_{i-1}\,e^{[S_i]\theta_i}\,R_i\),其中 \(R_i\) 是第 \(i\) 个指数右边的所有因子(包括 \(M\))。\(\theta_i\) 只出现在中间的指数里,\(\partial e^{[S_i]\theta_i}/\partial\theta_i=[S_i]\,e^{[S_i]\theta_i}\),所以
最后一步就是 5.8 节的结论:\(P[S]P^{-1}=[\operatorname{Ad}_PS]\)。把所有 \(i\) 加起来(链式法则),\(\dot TT^{-1}=\sum_i\big[\operatorname{Ad}_{P_{i-1}}S_i\big]\dot\theta_i\),读出向量就是
关节 \(i\) 之前的关节把这根轴搬到哪里,列就是什么;关节 \(i\) 之后的关节不影响第 \(i\) 列(这也是 FIG 2 里 J1 的轴永远不动的原因)。
机体雅可比与反向乘积
\(\boldsymbol\xi_b=\operatorname{Ad}_{T^{-1}}\boldsymbol\xi_s\) 给出 \(J_b=\operatorname{Ad}_{T^{-1}}J_s\)。也可以直接对机体形式 \(T=Me^{[B_1]\theta_1}\cdots e^{[B_n]\theta_n}\) 求导,得到
现在乘积是反向的:第 \(i\) 列由关节 \(i\) 之后的关节决定,最后一列永远是 \(B_n\)。这很自然:工具系跟着手爪走,关节 \(n\) 的轴相对工具系不会动;只有手爪侧的关节,才会改变前面关节的轴在工具系里的样子。
点的速度:与 3.4 节的杠杆臂对上
手爪上一点 \(\mathbf p\)(世界系坐标)的线速度是 \(\dot{\mathbf p}=\mathbf v_s+\boldsymbol\omega_s\times\mathbf p\),把 \(J_s\) 拆成转动块 \(J_\omega\)(上三行)与平移块 \(J_{v}^{(0)}\)(下三行),就得到这个点的线速度雅可比和混合雅可比(参考点在 \(\mathbf p\)、轴取世界系):
对转动关节,第 \(i\) 列的线速度部分是 \(\mathbf v_i+\boldsymbol\omega_i\times\mathbf p=\boldsymbol\omega_i\times(\mathbf p-\mathbf q_i)\)(用到 \(\mathbf v_i=-\boldsymbol\omega_i\times\mathbf q_i\)):轴方向叉乘杠杆臂。若所有轴都是 \(\hat{\mathbf z}\),它就是 3.4 节的 \(\hat{\mathbf z}\times(\mathbf p_{\text{tip}}-\mathbf p_i)\),角速度那一行全是 1,完整地回到平面公式。Siciliano 教材里的"几何雅可比"就是这个混合雅可比。
四种雅可比一览
| 产生的速度 | 参考点 / 轴 | 公式 | 典型用途 | |
|---|---|---|---|---|
| \(J_s\) | \((\boldsymbol\omega_s,\mathbf v_s)\) | 世界原点 / 世界轴 | \(\operatorname{Ad}_{P_{i-1}}S_i\) | 推导、wrench 变换、理论分析 |
| \(J_b\) | \((\boldsymbol\omega_b,\mathbf v_b)\) | 工具原点 / 工具轴 | \(\operatorname{Ad}_{T^{-1}}J_s\) | 工具系命令、相机/力传感器在工具上 |
| \(J_h\) | \((\boldsymbol\omega_s,\dot{\mathbf p})\) | 工具原点 / 世界轴 | \(\operatorname{diag}(R,R)J_b\) | 基座系笛卡尔命令(手柄、规划器) |
| \(J_a\) | \((\dot{\mathbf p},\dot{\boldsymbol\varphi})\) | 位姿参数的导数 | \(\operatorname{diag}(I,E^{-1})J_h\)* | 以欧拉角为变量的优化、轨迹 |
* \(J_h\) 的行序是(角速度,线速度),\(J_a\) 的行序是(位置,欧拉角),实际使用时要对调两个三行块。
角速度不是欧拉角的导数;四元数的 ½
对 ZYX 角,\(R=R_z(\psi)R_y(\theta)R_x(\varphi)\)。三个角各自的转动速度,要先沿各自的轴方向放好,再相加:
\(\theta\to\pm90^\circ\) 时第一列与第三列平行(FIG 4 里红轴与蓝轴合一),\(E\) 失去秩,\(E^{-1}\) 的元素按 \(1/\cos\theta\) 增长。用单位四元数 \(\mathbf q\) 表示朝向就没有这个问题:\(\dot{\mathbf q}=\tfrac12(0,\boldsymbol\omega_s)\otimes\mathbf q=\tfrac12\,\mathbf q\otimes(0,\boldsymbol\omega_b)\),左右两种乘法对应空间与机体角速度。那个 \(\tfrac12\) 来自四元数是半角:把 \(\mathbf q\) 的旋转角 \(\alpha\) 对应 \(\cos(\alpha/2)\)。四元数用 4 个数表示 3 个自由度,积分时要重新归一化。
秩、零空间、度量与奇异性
\(J\in\R^{6\times n}\) 的秩 \(r\) 是手爪在这个姿态下能独立产生的速度方向数。\(r<6\)(\(n\ge6\) 时)就是奇异位形。零空间有 \(n-r\) 维:这些关节运动不改变手爪的位姿,叫自运动。\(n=7\)(如 Franka Panda)的臂在非奇异位形有一维自运动,可以用它去躲障碍或避开关节限位(3.4 节的零空间公式 \(\dot{\boldsymbol\theta}=J^+\boldsymbol\xi+(I-J^+J)\mathbf z\) 原样适用)。
奇异性与 wrench 对偶:\(J^\top\) 的零空间不为空,即存在 \(\boldsymbol\lambda\ne0\) 使 \(J^\top\boldsymbol\lambda=0\)。把 \(\boldsymbol\lambda\) 看成手爪上的 wrench(力矩加力,7.6 节),\(\boldsymbol\tau=J^\top\boldsymbol\lambda=0\):这个 wrench 完全由连杆结构承受,不需要任何关节力矩。这就是 3.4 节"伸直的手臂能举重物"在三维的一般形式;同一个 \(\boldsymbol\lambda\) 的方向也是"无论怎么转关节,手爪都走不动"的方向。
三个常用的标量:Yoshikawa 可操作度 \(w=\sqrt{\det(JJ^\top)}=\prod_i\sigma_i\)(方阵时 \(=|\det J|\));最小奇异值 \(\sigma_{\min}\),到奇异位形的"距离";条件数 \(\kappa=\sigma_1/\sigma_{\min}\),各向同性程度。量纲是个陷阱:\(J\) 的上半(转动,rad/rad)和下半(平移,m/rad)混在一起,奇异值就依赖于长度单位。办法有三:分别分析 \(J_\omega\) 和 \(J_v\);给转动行乘一个特征长度 \(L\)(FIG 3 的做法);或者用"带权"的度量,权重来自任务的容许误差。秩与单位无关,行列式是否为 0 不依赖任何选择。
从速度到加速度,只是预告
对 \(\boldsymbol\xi=J(\boldsymbol\theta)\dot{\boldsymbol\theta}\) 再求一次导:\(\dot{\boldsymbol\xi}=J\ddot{\boldsymbol\theta}+\dot J\dot{\boldsymbol\theta}\),\(\dot J\) 的每一列都随着前面的关节转动而变化。控制器要让手爪走出指定的加速度时就要用到它(Part IV 的操作空间控制),第 8 章的动力学也会再遇到 \(J\) 和 \(\dot J\)。
6机器人中的它:笛卡尔速度控制(resolved-rate)
遥操作、示教拖动、贴着表面擦拭、给相机一个"往目标靠近"的命令……最终都落在同一条流水线上:每个控制周期读出当前关节角,算雅可比,解 \(\dot{\boldsymbol\theta}=J^{+}\boldsymbol\xi_{\text{cmd}}\)(或阻尼最小二乘),积分后发给电机。这叫 resolved-rate 控制。下面的实验把它搬到 6R 臂上,目的有三:
- 命令在哪个坐标系里?"基座系"命令走混合雅可比,"工具系"命令走 \(J_b\)。选"不匹配",就是把一个坐标系里的数字喂给另一个坐标系的雅可比,手爪会朝奇怪的方向走。
- 开环积分会漂。\(J\) 只是瞬时有效,离散积分(FIG 5 用 \(\Delta t=0.02\) s)有一阶误差:用伪逆时,读数里的末端误差就来自这里;阻尼最小二乘还会再加上一份由阻尼带来的偏差(默认 \(\lambda=0.05\) 时它反而是主要部分);真实控制器会加位姿反馈 \(\boldsymbol\xi=\boldsymbol\xi_{\text{ff}}+K\mathbf e\)。
- 奇异位形附近怎么办?把速度调大,让手爪冲向手臂伸展的极限:伪逆要求的关节速度冲上天,阻尼最小二乘(\(\lambda\) 可调)保持有界,代价是慢下来、偏离。
- 命令选"沿 +x 平移",坐标系选"工具系",雅可比选"不匹配",让终点位置误差超过 0.3 m。再改回"匹配"并换成"伪逆",误差降到多少?为什么不是 0?
- 选基座系的"沿 +x 平移",方法"伪逆",把速度调到 0.5 m/s 以上,让需求峰值超过 20 rad/s。换成"阻尼最小二乘"再看一遍:末端停在了哪里?
笛卡尔速度接口:UR 的 speedl、Franka(libfranka)的笛卡尔速度控制接口,都接收"工具点速度",再在控制器内部乘以(阻尼)雅可比逆;ROS 2 的 MoveIt Servo 接收带坐标系名的 TwistStamped,把它变换到规划坐标系、转成关节速度,并在条件数超过阈值时自动减速、在更近时停下("奇异位形缩放")。遥操作:SpaceMouse 与 VR 手柄的输入通常是混合 twist(基座系轴,工具点参考点)。视觉伺服(Part III):图像误差给出的是相机系里的 twist,要用 \(J_b\)(加手眼标定)才能变成关节速度,那里的"图像雅可比"和这里的机器人雅可比相乘。冗余臂(7 轴):用零空间做肘部姿态、关节限位、可操作度的次要任务。规划:沿路径检查 \(\sigma_{\min}\) 或可操作度,避免穿过奇异区域。
7常见误区
"坐标系"包含两件事:用哪套轴读数,以及线速度是哪一点的速度。\(J_s\) 的线速度是"世界原点处那个点"的,\(J_b\) 的是工具原点的、读在工具轴上,混合雅可比是工具原点的、读在世界轴上。把"向前 5 cm/s"这种手柄命令直接当作 \(\mathbf v_s\) 喂给 \(J_s\),只要同时有转动,工具点就会多走一项 \(\boldsymbol\omega\times\mathbf p\);参考点离世界原点越远,偏得越厉害。FIG 5 的"基座系命令"里做的转换 \(\mathbf v_s=\dot{\mathbf p}-\boldsymbol\omega\times\mathbf p\) 就是在补这一项。
\(\boldsymbol\omega\ne(\dot\psi,\dot\theta,\dot\varphi)\),两者差一个随姿态变化的矩阵 \(E\),它在俯仰角 \(\pm90^\circ\) 处奇异(FIG 4)。同理,旋转向量 \(\boldsymbol\phi=\theta\hat{\mathbf n}\) 的导数也不是角速度(差左雅可比 \(J_l^{-1}\),5.7 节)。用四元数时记得 \(\dot{\mathbf q}=\tfrac12\boldsymbol\omega\otimes\mathbf q\) 里的 \(\tfrac12\),漏掉它,姿态积分会以两倍的速度转,而且看起来仍然合理,因为四元数仍是单位的。
\(J\) 的 \(\sigma_{\min}\)、条件数、可操作度的数值取决于你用米还是毫米(FIG 3 的 \(L\) 滑块)。"\(\sigma_{\min}<0.05\) 就算接近奇异"这类阈值,只在一套固定约定下才有意思。更稳妥的做法是分别看 \(J_v\) 与 \(J_\omega\)(它们各自量纲一致,但如 FIG 3 的"腕"所示,会漏掉混合方向),或者选一个贴合任务的特征长度。判断是否奇异(秩)则不受影响。
肘奇异(伸直或折回)在边界上,可是肩奇异(手腕中心经过 J1 的轴)和腕奇异(\(\theta_5=0\))都在工作空间的内部。手爪恰好要从机器人正前方穿过自己的"头顶"、或者要保持工具笔直向下同时转 \(\theta_5\) 经过 0,都会撞上。笛卡尔直线运动的路径规划因此不能只检查起点和终点;FIG 3 里的行列式翻号提醒你:穿过奇异点,常常意味着逆运动学的解换了一个分支,关节会剧烈变化。
\(J(\boldsymbol\theta)\) 每一列都随位形变化,\(\boldsymbol\xi=J\dot{\boldsymbol\theta}\) 只是瞬时关系。FIG 5 里"匹配"雅可比用伪逆时的终点误差不是 0,就是因为每个 20 ms 的周期里 \(J\) 其实在变(阻尼最小二乘的误差还另含阻尼造成的偏差)。解决办法是缩短周期、用位姿反馈闭环,或者在 IK 中每步重新算 \(J\)(7.5 节)。同样,用两帧位姿做差再除以时间来"测"手爪速度时,要用 \(\log\) 得到 twist,而不是把 \(4\times4\) 矩阵逐元素相减。
8小练习
9延伸阅读
- K. Lynch & F. Park, Modern Robotics, Ch. 5 (Velocity Kinematics and Statics) — 空间/机体雅可比、奇异位形、可操作度椭球;本课的符号与顺序以它为准
- R. Murray, Z. Li, S. Sastry, A Mathematical Introduction to Robotic Manipulation, Ch. 3 (Manipulator Kinematics) — 用螺旋理论推导机械臂雅可比与冗余、奇异性
- B. Siciliano, L. Sciavicco, L. Villani, G. Oriolo, Robotics: Modelling, Planning and Control, Ch. 3 (Differential Kinematics and Statics) — 几何(混合)雅可比与解析雅可比,欧拉角的表示奇异
- R. Featherstone, Rigid Body Dynamics Algorithms, Springer, 2008, Ch. 2 — 空间向量(运动向量与力向量)记号,是后面动力学章节的预告
- T. Yoshikawa, "Manipulability of Robotic Mechanisms", Int. J. Robotics Research 4(2), 1985 — 可操作度指标与椭球的出处
- J. Solà, Quaternion kinematics for the error-state Kalman filter, arXiv:1711.02508, 2017 — 四元数导数与角速度(含 ½ 因子)的两种约定