正问题「给 q˙ 求 ve」一次矩阵乘法就能解决;逆问题「给 ve 求 q˙」却要解线性方程组,麻烦全在 J 的形状上:方阵满秩(求逆)、长方矮胖(冗余)、退化(奇异)。本节按这三种情形给出三套答案——直接逆、伪逆 + 零空间、阻尼最小二乘——三套合起来,就是数值逆运动学的发动机。录播 1:56:39–2:19:53。
先修补 · 拉格朗日乘子法(本节推导只用到这一条)
在进入具体情形之前,先把一件工具补好:「带等式约束的二次型最小化」有一个固定的三步套路,本节 3.5.1 与 3.5.2 会各用一次。
问题:minx21xTQx,约束 Ax=b(Q 对称正定)。
- 构造拉格朗日函数:L(x,λ)=21xTQx+λT(Ax−b);
- 对 x 求偏导置零:Qx+ATλ=0⇒x=−Q−1ATλ(Q 正定保证这是极小而非极大);
- 回代约束解出 λ:Ax=−AQ−1ATλ=b⇒λ=−(AQ−1AT)−1b,再回代得
x=Q−1AT(AQ−1AT)−1b.
可逆性前提:AQ−1AT 可逆 ⇔ A 行满秩。这条前提本节要盯紧,因为它会两次出场:3.5.1 要求 J 行满秩(无奇异),3.5.2 的 JW−1JT+K−1 则因 K−1 项而在奇异时仍可逆——这正是 DLS 治奇点的机制。
正运动学 xe=k(q) 高度非线性,封闭形式的逆解「很可能不存在」。实际操作中,我们用微分运动的思想 + 数值计算来求运动学逆解——雅可比正是数值计算的桥梁(1:56:40)。最简单的起点是 n=r、J 为方阵且满秩的情形:
q˙=J−1(q)ve,q(tk+1)=q(tk)+∫tktk+1q˙dt≈q(tk)+J−1(q(tk))ve(tk)Δt
「这样不受方程结构是否可解的影响,没有解析解也能解」(1:58:24)。注意这一招的前提是 J 为方阵且满秩:不满秩是奇异,长方阵是冗余,两者都要另作处理(分别见 3.5.2 与 3.5.1)。
冗余情形的一般思路,是把它等效为一个有约束的线性最优化问题(1:59:00):在约束 Jq˙=ve 下最小化关节速度的加权范数
q˙min g(q˙)=21q˙TWq˙s.t.Jq˙=ve
其中 W 为 n×n 对称正定加权矩阵(W=I 时即关节速度范数最小)。下面照 preview 里的三步套路引入拉格朗日乘子:
L(q˙,λ)=21q˙TWq˙+λT(Jq˙−ve)
推导(老师全程口述,1:59:30–2:03:30)
一阶条件(对 q˙ 求偏导置零):
Wq˙+JTλ=0⟹q˙=−W−1JTλ
(再对 q˙ 求一次导得 W,它正定 ⇒ 这是极小值而非极大值——「一阶导为零得极值点,二阶导正定是最小值」,2:01:23。)
回代约束:
Jq˙=−JW−1JTλ=ve⟹JW−1JTλ=−ve
可逆性(老师特意停下论证,2:02:12):不考虑奇异时 J 满秩(秩 r),JW−1JT 是 r×r 方阵。J 与 W 都满秩,左右相乘相当于做初等变换、不改变秩,故 JW−1JT 可逆——「前面这个矩阵不可逆的话,后面的表示就没有意义了」。于是
λ=−(JW−1JT)−1ve, q˙=W−1JT(JW−1JT)−1ve
□
W=I:右伪逆(2:03:27):
定义 3.5.1 · 右伪逆 J† 与最小范数解
q˙=JT(JJT)−1ve=J†ve,J†≜JT(JJT)−1 (r×n)
按现代矩阵论的说法,它就是右广义逆 / 伪逆。直接验证 JJ†ve=(JJT)(JJT)−1ve=ve,可见它确实满足约束;而单权情形得到的解又使关节速度范数局部最小,因此称为最小范数解。
指定 q˙0 的通解(2:04:29):冗余还有一个好处——可以「顺便」让 q˙ 尽量接近某个期望值 q˙0(相当于在任务约束之外再附加一条约束):
q˙min 21(q˙−q˙0)TW(q˙−q˙0)s.t.Jq˙=ve 同上推导 q˙=J†ve+(In−J†J)q˙0
(W=I 情形。)
两项各是什么
- 第一项 J†ve:满足任务的最小范数特解(「干活用的」);
- 第二项 (I−J†J)q˙0:齐次解。这里 P=I−J†J 是零空间投影矩阵——JPq˙0=(J−J)q˙0=0,所以该项不惊动末端(与 定理 3.4.B 的 P=NNT 是同一角色,只是两种写法)。内部运动正是由它描述,机械手借此完成再配置(2:06:13)。
q˙0 的三种取法(2:07:04):先定义标量函数 g(q),再取
q˙0=k0(∂q∂g(q))T(沿梯度方向)
所谓三种取法,其实就是三个不同的 g:
- 可操作度(最大化):g(q)=w(q)=det(J(q)JT(q))。w 在奇点位形处为零;方阵情形直接算 detJ,长方阵则算 det(JJT) 再开方——「这个值反映行列式离 0 的远近:离零越远离奇点越远」(2:08:21),最大化 w 就是远离奇异;
- 与关节极限的距离(最大化):让各关节角尽量靠近行程中点 21(ϑiM+ϑim),从而保证不会到达极限位置(2:09:06);
- 与障碍物的距离(最大化):取机械臂上所有点与障碍物距离的最小值作为 g,再让它最大化——「使最小距离最大化——最小距离都大了,其他肯定更远」(2:09:31)。
老师一句话点破了这套做法成立的根据:「为什么能优化?因为冗余——不是一个解,有很多个解,可以把我们的目标转化成优化问题」(2:10:06)。
J−1 与 J† 都只在满秩时才可计算,而奇点位形处 ve=Jq˙ 里含有线性相关的方程(2:10:14),要分两种情况看:
- 若 ve∈R(J):提取出所有线性无关方程就能解出 q˙,这条路径仍然可实现;
- 若 ve∈/R(J):ve 无法用关节速度线性表出,方程无解。
为什么奇点邻域也危险(不严密但直观,2:11:18):由 J−1=adjJ/detJ(伴随矩阵除以行列式)可见,detJ→0 时逆矩阵的元素整体趋于无穷——反解出来的关节速度也趋近无穷大。「这就是为什么要避开。」
解决思路:容许小误差,换回可解性(阻尼最小二乘,DLS,2:12:16):不再要求微分运动方程严格成立,而是容许 ve 带一个小的误差 δ:
g(q˙,δ)=21q˙TWq˙+21δTKδs.t.ve−Jq˙=δ
K 就是这两项之间的权衡系数:K 取得大,更用力压制误差;K 取得小,则更偏向让关节速度小。
增广变量法(2:14:24):把误差也并入未知量,令 w=[q˙ϵ](课件记 ϵ)、A=[J −I],则 Aw=Jq˙−ϵ=ve;目标随之写成单一二次型 g=21wTQw,Q=diag{W,K}。接下来套用拉格朗日乘子法,与 3.5.1 完全同型:先有 w=−Q−1ATλ,再由 AQ−1AT=JW−1JT+K−1(A 满秩、Q 正定 ⇒ 可逆,论证同前)解出 λ,即得
[q˙ϵ]=[W−1−K−1]JT(JW−1JT+K−1)−1ve
定义 3.5.2 · 奇异情形的广义逆 J∗
q˙=J∗ve,J∗=W−1JT(JW−1JT+K−1)−1
W=I、K=k2I 加权时,即经典的阻尼形式 J∗=JT(JJT+k2I)−1。K 的取法(2:16:33):奇点邻域内取足够大——K−1 项占主导,把 detJ→0 引起的发散压住,奇异也就变得可以容忍;远离奇点则取小、甚至趋于 0——此时公式退回 JT(JJT)−1,而远离奇点处 JJT 可逆,问题解决。
下图用一条曲线把「为什么要加阻尼」画了出来。横轴是 J 的奇异值 σ(detJ→0 即最小奇异值 →0),纵轴是把任务速度映回关节速度的增益:伪逆的增益 1/σ 在奇点处发散;DLS 的增益 σ/(σ2+k2) 则处处有界,峰值只有 1/(2k)。
伪逆 vs 阻尼最小二乘(本教程绘):增益曲线解释了 定义 3.5.2 里 K 的取法——奇点邻域 K−1 项占主导,把 1/σ 的发散压成不超过 1/(2k) 的有界增益;远离奇点取 K→0,DLS 连续退化为 JT(JJT)−1。
默写点 · 合上书再写(主动回忆)
先别翻正文与速查卡,把下面几条默写出来,再展开核对。写不出来,说明这一节还没「拿走」。
- J 的三种「不方 / 退化」各对应哪个工具?
- 写出 J† 并说明它的解有什么性质。
- DLS 里的 K 在奇点邻域与远离奇点各怎么取?为什么?
核对
方阵满秩 → J−1(配数值积分);长方冗余 → J†(+ 零空间项);退化 → J∗(阻尼)。口诀:方阵求逆、矮胖求伪逆、退化加阻尼。
J†=JT(JJT)−1,是右伪逆;J†ve 是满足任务约束的最小范数解(∥q˙∥ 局部最小)。
奇点邻域取大——K−1 项占主导,把 detJ→0 引起的发散压住;远离奇点取小甚至趋 0——退回 JT(JJT)−1,而那里 JJT 可逆。
- 一条主线:方阵(求逆 + 数值积分)→ 矮胖(拉格朗日乘子 ⇒ J† 最小范数解,再加 Pq˙0 零空间项)→ 退化(DLS:容许 δ、增广同型、J∗)。
- 三个矩阵别混:J−1(方阵满秩)、J†=JT(JJT)−1(冗余、行满秩)、J∗(奇异邻域、阻尼)——分别对应三种「不方 / 退化」的处境。
常见错误清单 · 自查三条
- 对冗余臂硬求 J−1——r×n 的长方阵根本没有逆;「不存在逆,就要用广义逆(左 / 右广义逆、伪逆),这是线代 / 矩阵论的基础」(0:17:35);
- 忘了 JW−1JT 可逆的前提是 J 行满秩(无奇异)——一到奇点情形,老配方就失效,必须换用 DLS;
- 把 q˙0 项当成任务误差的修正——它在任务空间的投影恒为零,只能用来调整内部姿态;「干活」永远靠第一项。