Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

3.5 逆微分运动学

正问题「给 q˙\dot q 求 vev_e」一次矩阵乘法就能解决;逆问题「给 vev_e 求 q˙\dot q」却要解线性方程组,麻烦全在 JJ 的形状上:方阵满秩(求逆)、长方矮胖(冗余)、退化(奇异)。本节按这三种情形给出三套答案——直接逆、伪逆 + 零空间、阻尼最小二乘——三套合起来,就是数值逆运动学的发动机。录播 1:56:39–2:19:53。

先修补 · 拉格朗日乘子法(本节推导只用到这一条)

在进入具体情形之前,先把一件工具补好:「带等式约束的二次型最小化」有一个固定的三步套路,本节 3.5.1 与 3.5.2 会各用一次。

问题:min⁡x12xTQx\min_{\boldsymbol x}\frac12\boldsymbol x^{\mathrm T}Q\boldsymbol x,约束 Ax=bA\boldsymbol x=\boldsymbol b(QQ 对称正定)。

  1. 构造拉格朗日函数:L(x,λ)=12xTQx+λT(Ax−b)\mathcal L(\boldsymbol x,\boldsymbol\lambda)=\frac12\boldsymbol x^{\mathrm T}Q\boldsymbol x+\boldsymbol\lambda^{\mathrm T}(A\boldsymbol x-\boldsymbol b);
  2. 对 x\boldsymbol x 求偏导置零:Qx+ATλ=0⇒x=−Q−1ATλQ\boldsymbol x+A^{\mathrm T}\boldsymbol\lambda=0\Rightarrow\boldsymbol x=-Q^{-1}A^{\mathrm T}\boldsymbol\lambda(QQ 正定保证这是极小而非极大);
  3. 回代约束解出 λ\boldsymbol\lambda:Ax=−AQ−1ATλ=b⇒λ=−(AQ−1AT)−1bA\boldsymbol x=-AQ^{-1}A^{\mathrm T}\boldsymbol\lambda=\boldsymbol b\Rightarrow\boldsymbol\lambda=-(AQ^{-1}A^{\mathrm T})^{-1}\boldsymbol b,再回代得

x=Q−1AT(AQ−1AT)−1b.\boldsymbol x=Q^{-1}A^{\mathrm T}(AQ^{-1}A^{\mathrm T})^{-1}\boldsymbol b .

可逆性前提:AQ−1ATAQ^{-1}A^{\mathrm T} 可逆 ⇔ AA 行满秩。这条前提本节要盯紧,因为它会两次出场:3.5.1 要求 JJ 行满秩(无奇异),3.5.2 的 JW−1JT+K−1JW^{-1}J^{\mathrm T}+K^{-1} 则因 K−1K^{-1} 项而在奇异时仍可逆——这正是 DLS 治奇点的机制。

3.5.0 方阵情形:直接求逆 + 数值积分

正运动学 xe=k(q)x_e=k(q) 高度非线性,封闭形式的逆解「很可能不存在」。实际操作中,我们用微分运动的思想 + 数值计算来求运动学逆解——雅可比正是数值计算的桥梁(1:56:40)。最简单的起点是 n=rn=r、JJ 为方阵且满秩的情形:

q˙=J−1(q) ve,q(tk+1)=q(tk)+∫tktk+1q˙ dt≈q(tk)+J−1(q(tk)) ve(tk) Δt\dot q=J^{-1}(q),v_e,\qquad q(t_{k+1})=q(t_k)+\int_{t_k}^{t_{k+1}}\dot q,\mathrm dt\approx q(t_k)+J^{-1}(q(t_k)),v_e(t_k),\Delta t

「这样不受方程结构是否可解的影响,没有解析解也能解」(1:58:24)。注意这一招的前提是 JJ 为方阵且满秩:不满秩是奇异,长方阵是冗余,两者都要另作处理(分别见 3.5.2 与 3.5.1)。

3.5.1 冗余机械手(r<nr&lt;n):伪逆与零空间

冗余情形的一般思路,是把它等效为一个有约束的线性最优化问题(1:59:00):在约束 Jq˙=veJ\dot q=v_e 下最小化关节速度的加权范数

min⁡q˙ g(q˙)=12 q˙TWq˙s.t.Jq˙=ve\min_{\dot q}\ g(\dot q)=\tfrac12,\dot q^{\mathrm T}W\dot q\qquad\text{s.t.}\quad J\dot q=v_e

其中 WW 为 n×nn\times n 对称正定加权矩阵(W=IW=I 时即关节速度范数最小)。下面照 preview 里的三步套路引入拉格朗日乘子:

L(q˙,λ)=12q˙TWq˙+λT(Jq˙−ve)\mathcal L(\dot q,\lambda)=\tfrac12\dot q^{\mathrm T}W\dot q+\lambda^{\mathrm T}(J\dot q-v_e)

推导(老师全程口述,1:59:30–2:03:30)

一阶条件(对 q˙\dot q 求偏导置零):

Wq˙+JTλ=0⟹q˙=−W−1JTλW\dot q+J^{\mathrm T}\lambda=0\qquad\Longrightarrow\qquad \dot q=-W^{-1}J^{\mathrm T}\lambda

(再对 q˙\dot q 求一次导得 WW,它正定 ⇒ 这是极小值而非极大值——「一阶导为零得极值点,二阶导正定是最小值」,2:01:23。) 回代约束:

Jq˙=−JW−1JTλ=ve⟹JW−1JTλ=−veJ\dot q=-JW^{-1}J^{\mathrm T}\lambda=v_e\qquad\Longrightarrow\qquad JW^{-1}J^{\mathrm T}\lambda=-v_e

可逆性(老师特意停下论证,2:02:12):不考虑奇异时 JJ 满秩(秩 rr),JW−1JTJW^{-1}J^{\mathrm T} 是 r×rr\times r 方阵。JJ 与 WW 都满秩,左右相乘相当于做初等变换、不改变秩,故 JW−1JTJW^{-1}J^{\mathrm T} 可逆——「前面这个矩阵不可逆的话,后面的表示就没有意义了」。于是

λ=−(JW−1JT)−1ve, q˙=W−1JT(JW−1JT)−1ve \lambda=-(JW^{-1}J^{\mathrm T})^{-1}v_e,\qquad \boxed{\ \dot q=W^{-1}J^{\mathrm T}\big(JW^{-1}J^{\mathrm T}\big)^{-1}v_e\ }

□

W=IW=I:右伪逆(2:03:27):

定义 3.5.1 · 右伪逆 J†J^\dagger 与最小范数解

q˙=JT(JJT)−1ve=J†ve,J†≜JT(JJT)−1 (r×n)\dot q=J^{\mathrm T}(JJ^{\mathrm T})^{-1}v_e=J^\dagger v_e,\qquad J^\dagger\triangleq J^{\mathrm T}(JJ^{\mathrm T})^{-1}\ (r\times n)

按现代矩阵论的说法,它就是右广义逆 / 伪逆。直接验证 JJ†ve=(JJT)(JJT)−1ve=veJJ^\dagger v_e=(JJ^{\mathrm T})(JJ^{\mathrm T})^{-1}v_e=v_e,可见它确实满足约束;而单权情形得到的解又使关节速度范数局部最小,因此称为最小范数解。

指定 q˙0\dot q_0 的通解(2:04:29):冗余还有一个好处——可以「顺便」让 q˙\dot q 尽量接近某个期望值 q˙0\dot q_0(相当于在任务约束之外再附加一条约束):

min⁡q˙ 12(q˙−q˙0)TW(q˙−q˙0)s.t.Jq˙=ve→ 同上推导  q˙=J†ve+(In−J†J) q˙0 \min_{\dot q}\ \tfrac12(\dot q-\dot q_0)^{\mathrm T}W(\dot q-\dot q_0)\quad\text{s.t.}\quad J\dot q=v_e \qquad\xrightarrow{\ \text{同上推导}\ }\qquad \boxed{\ \dot q=J^\dagger v_e+(I_n-J^\dagger J),\dot q_0\ }

(W=IW=I 情形。)

两项各是什么
  • 第一项 J†veJ^\dagger v_e:满足任务的最小范数特解(「干活用的」);
  • 第二项 (I−J†J)q˙0(I-J^\dagger J)\dot q_0:齐次解。这里 P=I−J†JP=I-J^\dagger J 是零空间投影矩阵——JPq˙0=(J−J)q˙0=0JP\dot q_0=(J-J)\dot q_0=0,所以该项不惊动末端(与 定理 3.4.B 的 P=NNTP=NN^{\mathrm T} 是同一角色,只是两种写法)。内部运动正是由它描述,机械手借此完成再配置(2:06:13)。

q˙0\dot q_0 的三种取法(2:07:04):先定义标量函数 g(q)g(q),再取

q˙0=k0(∂g(q)∂q)T(沿梯度方向)\dot q_0=k_0\left(\frac{\partial g(q)}{\partial q}\right)^{\mathrm T}\quad(\text{沿梯度方向})

所谓三种取法,其实就是三个不同的 gg:

  1. 可操作度(最大化):g(q)=w(q)=det⁡ ⁣(J(q)JT(q))g(q)=w(q)=\sqrt{\det!\big(J(q)J^{\mathrm T}(q)\big)}。ww 在奇点位形处为零;方阵情形直接算 det⁡J\det J,长方阵则算 det⁡(JJT)\det(JJ^{\mathrm T}) 再开方——「这个值反映行列式离 0 的远近:离零越远离奇点越远」(2:08:21),最大化 ww 就是远离奇异;
  2. 与关节极限的距离(最大化):让各关节角尽量靠近行程中点 12(ϑiM+ϑim)\tfrac12(\vartheta_{i\mathrm M}+\vartheta_{im}),从而保证不会到达极限位置(2:09:06);
  3. 与障碍物的距离(最大化):取机械臂上所有点与障碍物距离的最小值作为 gg,再让它最大化——「使最小距离最大化——最小距离都大了,其他肯定更远」(2:09:31)。

老师一句话点破了这套做法成立的根据:「为什么能优化?因为冗余——不是一个解,有很多个解,可以把我们的目标转化成优化问题」(2:10:06)。

3.5.2 运动学奇点情形:阻尼最小二乘

J−1J^{-1} 与 J†J^\dagger 都只在满秩时才可计算,而奇点位形处 ve=Jq˙v_e=J\dot q 里含有线性相关的方程(2:10:14),要分两种情况看:

  • 若 ve∈R(J)v_e\in\mathcal R(J):提取出所有线性无关方程就能解出 q˙\dot q,这条路径仍然可实现;
  • 若 ve∉R(J)v_e\notin\mathcal R(J):vev_e 无法用关节速度线性表出,方程无解。

为什么奇点邻域也危险(不严密但直观,2:11:18):由 J−1=adj⁡J/det⁡JJ^{-1}=\operatorname{adj}J/\det J(伴随矩阵除以行列式)可见,det⁡J→0\det J\to0 时逆矩阵的元素整体趋于无穷——反解出来的关节速度也趋近无穷大。「这就是为什么要避开。」

解决思路:容许小误差,换回可解性(阻尼最小二乘,DLS,2:12:16):不再要求微分运动方程严格成立,而是容许 vev_e 带一个小的误差 δ\delta:

g(q˙,δ)=12q˙TWq˙+12 δTK δs.t.ve−Jq˙=δg(\dot q,\delta)=\tfrac12\dot q^{\mathrm T}W\dot q+\tfrac12,\delta^{\mathrm T}K,\delta\qquad\text{s.t.}\quad v_e-J\dot q=\delta

KK 就是这两项之间的权衡系数:KK 取得大,更用力压制误差;KK 取得小,则更偏向让关节速度小。

增广变量法(2:14:24):把误差也并入未知量,令 w=[q˙ϵ]w=\begin{bmatrix}\dot q\ \epsilon\end{bmatrix}(课件记 ϵ\epsilon)、A=[J  −I]A=[J\ \ -I],则 Aw=Jq˙−ϵ=veAw=J\dot q-\epsilon=v_e;目标随之写成单一二次型 g=12wTQwg=\tfrac12w^{\mathrm T}Qw,Q=diag⁡{W,K}Q=\operatorname{diag}{W,K}。接下来套用拉格朗日乘子法,与 3.5.1 完全同型:先有 w=−Q−1ATλw=-Q^{-1}A^{\mathrm T}\lambda,再由 AQ−1AT=JW−1JT+K−1AQ^{-1}A^{\mathrm T}=JW^{-1}J^{\mathrm T}+K^{-1}(AA 满秩、QQ 正定 ⇒ 可逆,论证同前)解出 λ\lambda,即得

[q˙ϵ]=[W−1−K−1]JT(JW−1JT+K−1)−1ve\begin{bmatrix}\dot q\ \epsilon\end{bmatrix}=\begin{bmatrix}W^{-1}\ -K^{-1}\end{bmatrix}J^{\mathrm T}\big(JW^{-1}J^{\mathrm T}+K^{-1}\big)^{-1}v_e

定义 3.5.2 · 奇异情形的广义逆 J∗J^*

q˙=J∗ve,J∗=W−1JT(JW−1JT+K−1)−1\dot q=J^{*}v_e,\qquad J^{*}=W^{-1}J^{\mathrm T}\big(JW^{-1}J^{\mathrm T}+K^{-1}\big)^{-1}

W=IW=I、K=k2IK=k^2 I 加权时,即经典的阻尼形式 J∗=JT(JJT+k2I)−1J^{*}=J^{\mathrm T}(JJ^{\mathrm T}+k^2I)^{-1}。KK 的取法(2:16:33):奇点邻域内取足够大——K−1K^{-1} 项占主导,把 det⁡J→0\det J\to0 引起的发散压住,奇异也就变得可以容忍;远离奇点则取小、甚至趋于 00——此时公式退回 JT(JJT)−1J^{\mathrm T}(JJ^{\mathrm T})^{-1},而远离奇点处 JJTJJ^{\mathrm T} 可逆,问题解决。

下图用一条曲线把「为什么要加阻尼」画了出来。横轴是 JJ 的奇异值 σ\sigma(det⁡J→0\det J\to0 即最小奇异值 →0\to0),纵轴是把任务速度映回关节速度的增益:伪逆的增益 1/σ1/\sigma 在奇点处发散;DLS 的增益 σ/(σ2+k2)\sigma/(\sigma^2+k^2) 则处处有界,峰值只有 1/(2k)1/(2k)。

伪逆与阻尼最小二乘的增益曲线 横轴为奇异值 σ,纵轴为对任务速度的增益。红色虚线为伪逆增益 1/σ,在 σ 趋于 0 时发散;绿色实线为 DLS 增益 σ/(σ²+k²)(k=0.25),处处有界,峰值 1/(2k) 出现在 σ=k;两条曲线在远离奇点处几乎重合。 奇点邻域的两种「逆」:伪逆发散、DLS 有界 奇点邻域 K 取大 奇异值 σ σ = 0:奇异 0.5 1.0 1.5 1 2 3 4 1/(2k) σ = k 求逆 / 伪逆:增益 1/σ → ∞ det J → 0 时关节速度发散,「这就是为什么要避开」 DLS J*:σ/(σ² + k²),峰值 1/(2k) 容许小误差 δ,换来「奇异可容」 示意取 k = 0.25;σ ≫ k 时两线重合 → 远离奇点 DLS 退回伪逆,K 取小甚至趋 0
伪逆 vs 阻尼最小二乘(本教程绘):增益曲线解释了 定义 3.5.2 里 KK 的取法——奇点邻域 K−1K^{-1} 项占主导,把 1/σ1/\sigma 的发散压成不超过 1/(2k)1/(2k) 的有界增益;远离奇点取 K→0K\to0,DLS 连续退化为 JT(JJT)−1J^{\mathrm T}(JJ^{\mathrm T})^{-1}。

默写点 · 合上书再写(主动回忆)

先别翻正文与速查卡,把下面几条默写出来,再展开核对。写不出来,说明这一节还没「拿走」。

  1. JJ 的三种「不方 / 退化」各对应哪个工具?
  2. 写出 J†J^\dagger 并说明它的解有什么性质。
  3. DLS 里的 KK 在奇点邻域与远离奇点各怎么取?为什么?
核对

方阵满秩 → J−1J^{-1}(配数值积分);长方冗余 → J†J^\dagger(+ 零空间项);退化 → J∗J^*(阻尼)。口诀:方阵求逆、矮胖求伪逆、退化加阻尼。

J†=JT(JJT)−1J^\dagger=J^{\mathrm T}(JJ^{\mathrm T})^{-1},是右伪逆;J†veJ^\dagger\boldsymbol v_e 是满足任务约束的最小范数解(∥q˙∥\|\dot{\boldsymbol q}\| 局部最小)。

奇点邻域取大——K−1K^{-1} 项占主导,把 det⁡J→0\det J\to0 引起的发散压住;远离奇点取小甚至趋 0——退回 JT(JJT)−1J^{\mathrm T}(JJ^{\mathrm T})^{-1},而那里 JJTJJ^{\mathrm T} 可逆。

3.5 小结与常见错误

  • 一条主线:方阵(求逆 + 数值积分)→ 矮胖(拉格朗日乘子 ⇒ J†J^\dagger 最小范数解,再加 Pq˙0P\dot q_0 零空间项)→ 退化(DLS:容许 δ\delta、增广同型、J∗J^*)。
  • 三个矩阵别混:J−1J^{-1}(方阵满秩)、J†=JT(JJT)−1J^\dagger=J^{\mathrm T}(JJ^{\mathrm T})^{-1}(冗余、行满秩)、J∗J^*(奇异邻域、阻尼)——分别对应三种「不方 / 退化」的处境。
常见错误清单 · 自查三条
  1. 对冗余臂硬求 J−1J^{-1}——r×nr\times n 的长方阵根本没有逆;「不存在逆,就要用广义逆(左 / 右广义逆、伪逆),这是线代 / 矩阵论的基础」(0:17:35);
  2. 忘了 JW−1JTJW^{-1}J^{\mathrm T} 可逆的前提是 JJ 行满秩(无奇异)——一到奇点情形,老配方就失效,必须换用 DLS;
  3. 把 q˙0\dot q_0 项当成任务误差的修正——它在任务空间的投影恒为零,只能用来调整内部姿态;「干活」永远靠第一项。