在位姿优化里手推雅可比:罗德里格斯参数化下的两类求导技巧

在基于模型的位姿估计里,列文伯格-马夸尔特(LM)算法的每一次迭代都要计算雅可比矩阵 J ( k ) = ∇ x T [ …   ε i   …   ] T \mathbf{J}^{(k)} = \nabla_{\mathbf{x}}^T [\dots\, \varepsilon_i\, \dots]^T J(k)=xT[εi]T,其中 ε i \varepsilon_i εi 是图像数据点和模型投影点之间的几何距离, x \mathbf{x} x 是把旋转矩阵和位移向量摊平之后的六维参数向量。

如果用数值差分来逼近这个雅可比,性能上会比较吃亏:每次迭代都得做 O ( 6 N ) O(6N) O(6N) 次正向投影,而且差分步长本身会影响数值稳定性。更优雅的做法是把雅可比写成完全解析的闭式表达式——这样每次迭代只算一次投影,剩下的全是矩阵乘法。

这篇文章的目标,就是讲清楚下面这个公式是怎么推出来的:

∇ x 1 T   p ˉ i = K 12 − p ˉ i   K 3 K 3 ( R w   w p i + t w ) ( − R w [ w p i ] × ) [ n α n β n ] [ sin ⁡ θ sin ⁡ β 1 − cos ⁡ θ 0 ( 1 − cos ⁡ θ ) sin ⁡ β sin ⁡ θ 0 0 0 1 ] \nabla_{\mathbf{x}_1}^T\, \bar{\mathbf{p}}_i = \frac{\mathbf{K}_{12} - \bar{\mathbf{p}}_i\, \mathbf{K}_3}{\mathbf{K}_3(\mathbf{R}_w\, {}^w\mathbf{p}_i + \mathbf{t}_w)} \left(- \mathbf{R}_w [{}^w\mathbf{p}_i]_\times\right) \begin{bmatrix} \mathbf{n}_\alpha & \mathbf{n}_\beta & \mathbf{n} \end{bmatrix} \begin{bmatrix} \sin\theta\sin\beta & 1-\cos\theta & 0 \\ (1-\cos\theta)\sin\beta & \sin\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} x1Tpˉi=K3(Rwwpi+tw)K12pˉiK3(Rw[wpi]×)[nαnβn] sinθsinβ(1cosθ)sinβ01cosθsinθ0001

整个推导分两关:

  • 第一关是处理投影方程的商式求导——比较机械,但关键是要看出 K 12 − p ˉ i K 3 \mathbf{K}_{12} - \bar{\mathbf{p}}_i \mathbf{K}_3 K12pˉiK3 这个简洁形式是怎么来的。
  • 第二关才是真正有技巧的部分:罗德里格斯公式下旋转矩阵的导数,怎么用一组正交基化成 [ n α   n β   n ] [\mathbf{n}_\alpha\ \mathbf{n}_\beta\ \mathbf{n}] [nα nβ n] 乘上一个简单的 3×3 系数矩阵。

1. 背景:参数化与投影方程

我们要优化的位姿用六个参数表示:

x = [ α ,   β ,   θ ,   t 1 ,   t 2 ,   t 3 ] T \mathbf{x} = [\alpha,\, \beta,\, \theta,\, t_1,\, t_2,\, t_3]^T x=[α,β,θ,t1,t2,t3]T

前三个参数 ( α , β , θ ) (\alpha, \beta, \theta) (α,β,θ) 对应罗德里格斯公式给出的旋转表示。先用两个角 ( α , β ) (\alpha, \beta) (α,β) 把转轴方向写成单位向量:

n = [ cos ⁡ α sin ⁡ β ,    sin ⁡ α sin ⁡ β ,    cos ⁡ β ] T \mathbf{n} = [\cos\alpha\sin\beta,\; \sin\alpha\sin\beta,\; \cos\beta]^T n=[cosαsinβ,sinαsinβ,cosβ]T

再用旋转角 θ \theta θ 把旋转矩阵写成:

R = cos ⁡ θ   I + ( 1 − cos ⁡ θ )   n n T + sin ⁡ θ   [ n ] × \mathbf{R} = \cos\theta\, \mathbf{I} + (1-\cos\theta)\, \mathbf{n}\mathbf{n}^T + \sin\theta\, [\mathbf{n}]_\times R=cosθI+(1cosθ)nnT+sinθ[n]×

后三个参数就是平移向量 t = [ t 1 , t 2 , t 3 ] T \mathbf{t} = [t_1, t_2, t_3]^T t=[t1,t2,t3]T

世界坐标系下的一个空间点 w p i {}^w\mathbf{p}_i wpi 投影到图像上得到的点 p ˉ i \bar{\mathbf{p}}_i pˉi 满足:

p ˉ i = K 12   ( R   w p i + t ) K 3   ( R   w p i + t ) \bar{\mathbf{p}}_i = \frac{\mathbf{K}_{12}\, (\mathbf{R}\, {}^w\mathbf{p}_i + \mathbf{t})}{\mathbf{K}_3\, (\mathbf{R}\, {}^w\mathbf{p}_i + \mathbf{t})} pˉi=K3(Rwpi+t)K12(Rwpi+t)

其中 K 12 \mathbf{K}_{12} K12 是内参矩阵的前两行( 2 × 3 2\times 3 2×3), K 3 \mathbf{K}_3 K3 是最后一行( 1 × 3 1\times 3 1×3)。注意这里 p ˉ i \bar{\mathbf{p}}_i pˉi 是一个二维向量,所以分母上那个标量起到的就是齐次坐标归一化的作用。

LM 优化的目标函数是所有点的平方距离和:

F ( x ) = ∑ i = 1 N ε i 2 , ε i = ∥ p ˉ i − q i ∥ 2 F(\mathbf{x}) = \sum_{i=1}^N \varepsilon_i^2, \qquad \varepsilon_i = \|\bar{\mathbf{p}}_i - \mathbf{q}_i\|_2 F(x)=i=1Nεi2,εi=pˉiqi2

要算雅可比,就要对每个 ε i \varepsilon_i εi 分别对六个参数求偏导。把 x \mathbf{x} x 拆成 x 1 = [ α , β , θ ] T \mathbf{x}_1 = [\alpha, \beta, \theta]^T x1=[α,β,θ]T x 2 = [ t 1 , t 2 , t 3 ] T \mathbf{x}_2 = [t_1, t_2, t_3]^T x2=[t1,t2,t3]T,分别处理。

对平移参数 x 2 \mathbf{x}_2 x2 的求导很简单(后面会顺手做掉),对旋转参数 x 1 \mathbf{x}_1 x1 的求导是真正的难点。


2. 第一关:商式求导

这一关的目标是把 ∇ y T   p ˉ i \nabla_{\mathbf{y}}^T\, \bar{\mathbf{p}}_i yTpˉi(其中 y \mathbf{y} y 可以是 x 1 \mathbf{x}_1 x1 x 2 \mathbf{x}_2 x2)展开成一个干净的形式。投影方程是分式,所以要用商的求导法则。

为了让推导更清晰,记 u = R   w p i + t \mathbf{u} = \mathbf{R}\, {}^w\mathbf{p}_i + \mathbf{t} u=Rwpi+t,那么 p ˉ i = K 12 u K 3 u \bar{\mathbf{p}}_i = \frac{\mathbf{K}_{12}\mathbf{u}}{\mathbf{K}_3\mathbf{u}} pˉi=K3uK12u

2.1 一步一步展开

直接对 p ˉ i \bar{\mathbf{p}}_i pˉi 求梯度:

∇ y T   p ˉ i = ∇ y T ( K 12 u K 3 u ) \nabla_{\mathbf{y}}^T\, \bar{\mathbf{p}}_i = \nabla_{\mathbf{y}}^T \left( \frac{\mathbf{K}_{12}\mathbf{u}}{\mathbf{K}_3\mathbf{u}} \right) yTpˉi=yT(K3uK12u)

注意 K 12 u \mathbf{K}_{12}\mathbf{u} K12u 是一个二维列向量, K 3 u \mathbf{K}_3\mathbf{u} K3u 是一个标量。商式求导给出:

∇ y T   p ˉ i = ( ∇ y T K 12 u )   ( K 3 u ) − ( K 12 u )   ( ∇ y T K 3 u ) ( K 3 u ) 2 \nabla_{\mathbf{y}}^T\, \bar{\mathbf{p}}_i = \frac{(\nabla_{\mathbf{y}}^T \mathbf{K}_{12}\mathbf{u})\,(\mathbf{K}_3 \mathbf{u}) - (\mathbf{K}_{12}\mathbf{u})\,(\nabla_{\mathbf{y}}^T \mathbf{K}_3\mathbf{u})}{(\mathbf{K}_3\mathbf{u})^2} yTpˉi=(K3u)2(yTK12u)(K3u)(K12u)(yTK3u)

把分子分母同除以 K 3 u \mathbf{K}_3\mathbf{u} K3u

= ∇ y T K 12 u − K 12 u K 3 u   ∇ y T K 3 u K 3 u = \frac{\nabla_{\mathbf{y}}^T \mathbf{K}_{12}\mathbf{u} - \dfrac{\mathbf{K}_{12}\mathbf{u}}{\mathbf{K}_3\mathbf{u}}\, \nabla_{\mathbf{y}}^T \mathbf{K}_3\mathbf{u}}{\mathbf{K}_3\mathbf{u}} =K3uyTK12uK3uK12uyTK3u

注意到中间那个分式正是 p ˉ i \bar{\mathbf{p}}_i pˉi 本身,于是:

∇ y T   p ˉ i = ∇ y T K 12 u − p ˉ i   ∇ y T K 3 u K 3 u \nabla_{\mathbf{y}}^T\, \bar{\mathbf{p}}_i = \frac{\nabla_{\mathbf{y}}^T \mathbf{K}_{12}\mathbf{u} - \bar{\mathbf{p}}_i\, \nabla_{\mathbf{y}}^T \mathbf{K}_3\mathbf{u}}{\mathbf{K}_3\mathbf{u}} yTpˉi=K3uyTK12upˉiyTK3u

K 12 \mathbf{K}_{12} K12 K 3 \mathbf{K}_3 K3 都是常数矩阵,可以提到梯度算子外面:

∇ y T   p ˉ i = K 12   ∇ y T u − p ˉ i   K 3   ∇ y T u K 3 u \nabla_{\mathbf{y}}^T\, \bar{\mathbf{p}}_i = \frac{\mathbf{K}_{12}\,\nabla_{\mathbf{y}}^T \mathbf{u} - \bar{\mathbf{p}}_i\, \mathbf{K}_3\,\nabla_{\mathbf{y}}^T \mathbf{u}}{\mathbf{K}_3\mathbf{u}} yTpˉi=K3uK12yTupˉiK3yTu

∇ y T u \nabla_{\mathbf{y}}^T \mathbf{u} yTu 提出来:

∇ y T   p ˉ i = K 12 − p ˉ i   K 3 K 3 u   ∇ y T u \boxed{\nabla_{\mathbf{y}}^T\, \bar{\mathbf{p}}_i = \frac{\mathbf{K}_{12} - \bar{\mathbf{p}}_i\, \mathbf{K}_3}{\mathbf{K}_3\mathbf{u}}\, \nabla_{\mathbf{y}}^T \mathbf{u}} yTpˉi=K3uK12pˉiK3yTu

这就是核心形式。前面的"系数" ( K 12 − p ˉ i K 3 ) / K 3 u (\mathbf{K}_{12} - \bar{\mathbf{p}}_i \mathbf{K}_3) / \mathbf{K}_3\mathbf{u} (K12pˉiK3)/K3u 跟参数 y \mathbf{y} y 完全无关,所有的参数依赖都收进了最后那一项 ∇ y T u \nabla_{\mathbf{y}}^T \mathbf{u} yTu 里。

2.2 对平移参数求导

x 2 = [ t 1 , t 2 , t 3 ] T \mathbf{x}_2 = [t_1, t_2, t_3]^T x2=[t1,t2,t3]T,因为 u = R   w p i + t \mathbf{u} = \mathbf{R}\,{}^w\mathbf{p}_i + \mathbf{t} u=Rwpi+t,所以 ∇ x 2 T u = ∇ x 2 T t = I 3 \nabla_{\mathbf{x}_2}^T \mathbf{u} = \nabla_{\mathbf{x}_2}^T \mathbf{t} = \mathbf{I}_3 x2Tu=x2Tt=I3。直接得到:

∇ x 2 T   p ˉ i = K 12 − p ˉ i   K 3 K 3   ( R   w p i + t ) \nabla_{\mathbf{x}_2}^T\, \bar{\mathbf{p}}_i = \frac{\mathbf{K}_{12} - \bar{\mathbf{p}}_i\, \mathbf{K}_3}{\mathbf{K}_3\,(\mathbf{R}\,{}^w\mathbf{p}_i + \mathbf{t})} x2Tpˉi=K3(Rwpi+t)K12pˉiK3

平移这边直接收工。

2.3 对旋转参数求导

x 1 = [ α , β , θ ] T \mathbf{x}_1 = [\alpha, \beta, \theta]^T x1=[α,β,θ]T,由于 t \mathbf{t} t 不依赖 x 1 \mathbf{x}_1 x1 ∇ x 1 T u = ∇ x 1 T ( R   w p i ) \nabla_{\mathbf{x}_1}^T \mathbf{u} = \nabla_{\mathbf{x}_1}^T (\mathbf{R}\,{}^w\mathbf{p}_i) x1Tu=x1T(Rwpi)。把它写成行向量形式:

∇ x 1 T ( R   w p i ) = [ ∂ R ∂ α   w p i ∂ R ∂ β   w p i ∂ R ∂ θ   w p i ] \nabla_{\mathbf{x}_1}^T (\mathbf{R}\,{}^w\mathbf{p}_i) = \begin{bmatrix} \dfrac{\partial \mathbf{R}}{\partial \alpha}\,{}^w\mathbf{p}_i & \dfrac{\partial \mathbf{R}}{\partial \beta}\,{}^w\mathbf{p}_i & \dfrac{\partial \mathbf{R}}{\partial \theta}\,{}^w\mathbf{p}_i \end{bmatrix} x1T(Rwpi)=[αRwpiβRwpiθRwpi]

代回 2.1 的核心形式:

∇ x 1 T   p ˉ i = K 12 − p ˉ i   K 3 K 3   ( R   w p i + t ) [ ∂ R ∂ α   w p i ∂ R ∂ β   w p i ∂ R ∂ θ   w p i ] \nabla_{\mathbf{x}_1}^T\, \bar{\mathbf{p}}_i = \frac{\mathbf{K}_{12} - \bar{\mathbf{p}}_i\, \mathbf{K}_3}{\mathbf{K}_3\,(\mathbf{R}\,{}^w\mathbf{p}_i + \mathbf{t})} \begin{bmatrix} \dfrac{\partial \mathbf{R}}{\partial \alpha}\,{}^w\mathbf{p}_i & \dfrac{\partial \mathbf{R}}{\partial \beta}\,{}^w\mathbf{p}_i & \dfrac{\partial \mathbf{R}}{\partial \theta}\,{}^w\mathbf{p}_i \end{bmatrix} x1Tpˉi=K3(Rwpi+t)K12pˉiK3[αRwpiβRwpiθRwpi]

这里 ∂ R / ∂ α \partial \mathbf{R}/\partial \alpha R/α ∂ R / ∂ β \partial \mathbf{R}/\partial \beta R/β ∂ R / ∂ θ \partial \mathbf{R}/\partial \theta R/θ 直接展开会非常凌乱——这就是第二关要解决的问题。


3. 第二关:旋转矩阵导数的代数化简

3.1 难点在哪

直接对罗德里格斯公式 R = cos ⁡ θ   I + ( 1 − cos ⁡ θ )   n n T + sin ⁡ θ   [ n ] × \mathbf{R} = \cos\theta\,\mathbf{I} + (1-\cos\theta)\,\mathbf{n}\mathbf{n}^T + \sin\theta\,[\mathbf{n}]_\times R=cosθI+(1cosθ)nnT+sinθ[n]× 关于 α \alpha α 求偏导,会得到:

∂ R ∂ α = ( 1 − cos ⁡ θ ) ( ∂ n ∂ α n T + n ∂ n T ∂ α ) + sin ⁡ θ   ∂ [ n ] × ∂ α \frac{\partial \mathbf{R}}{\partial \alpha} = (1-\cos\theta)\left(\frac{\partial \mathbf{n}}{\partial \alpha}\mathbf{n}^T + \mathbf{n}\frac{\partial \mathbf{n}^T}{\partial \alpha}\right) + \sin\theta\,\frac{\partial [\mathbf{n}]_\times}{\partial \alpha} αR=(1cosθ)(αnnT+nαnT)+sinθα[n]×

这一坨表达式如果就这样代入雅可比,每一项都是参数 ( α , β , θ ) (\alpha, \beta, \theta) (α,β,θ) 的混合三角函数,没法继续化简、也没法看出结构。

关键的转换是定义辅助矩阵:

[ V α ] × = R T ∂ R ∂ α , [ V β ] × = R T ∂ R ∂ β , [ V θ ] × = R T ∂ R ∂ θ [\mathbf{V}_\alpha]_\times = \mathbf{R}^T\frac{\partial \mathbf{R}}{\partial \alpha}, \qquad [\mathbf{V}_\beta]_\times = \mathbf{R}^T\frac{\partial \mathbf{R}}{\partial \beta}, \qquad [\mathbf{V}_\theta]_\times = \mathbf{R}^T\frac{\partial \mathbf{R}}{\partial \theta} [Vα]×=RTαR,[Vβ]×=RTβR,[Vθ]×=RTθR

为什么这能成立?因为 R T R = I \mathbf{R}^T\mathbf{R} = \mathbf{I} RTR=I 两边求导可得 R ˙ T R + R T R ˙ = 0 \dot{\mathbf{R}}^T\mathbf{R} + \mathbf{R}^T\dot{\mathbf{R}} = \mathbf{0} R˙TR+RTR˙=0,即 ( R T R ˙ ) T = − R T R ˙ (\mathbf{R}^T\dot{\mathbf{R}})^T = -\mathbf{R}^T\dot{\mathbf{R}} (RTR˙)T=RTR˙——所以 R T R ˙ \mathbf{R}^T\dot{\mathbf{R}} RTR˙ 必为反对称矩阵,可以合法地写成 [ ⋅ ] × [\cdot]_\times []× 的形式。每个 V \mathbf{V} V 都是一个三维向量。

把雅可比改写一下。由 [ V α ] × = R T ∂ R / ∂ α [\mathbf{V}_\alpha]_\times = \mathbf{R}^T\partial\mathbf{R}/\partial\alpha [Vα]×=RTR/α 推得 ∂ R / ∂ α = R   [ V α ] × \partial\mathbf{R}/\partial\alpha = \mathbf{R}\,[\mathbf{V}_\alpha]_\times R/α=R[Vα]×,于是:

∂ R ∂ α   w p i = R   [ V α ] ×   w p i = − R   [ w p i ] ×   V α \frac{\partial \mathbf{R}}{\partial \alpha}\,{}^w\mathbf{p}_i = \mathbf{R}\,[\mathbf{V}_\alpha]_\times\,{}^w\mathbf{p}_i = -\mathbf{R}\,[{}^w\mathbf{p}_i]_\times\,\mathbf{V}_\alpha αRwpi=R[Vα]×wpi=R[wpi]×Vα

(用了 [ a ] × b = − [ b ] × a [\mathbf{a}]_\times \mathbf{b} = -[\mathbf{b}]_\times \mathbf{a} [a]×b=[b]×a。)于是雅可比里的核心项变成:

[ ∂ R ∂ α   w p i ∂ R ∂ β   w p i ∂ R ∂ θ   w p i ] = − R   [ w p i ] ×   [ V α V β V θ ] \begin{bmatrix} \dfrac{\partial \mathbf{R}}{\partial \alpha}\,{}^w\mathbf{p}_i & \dfrac{\partial \mathbf{R}}{\partial \beta}\,{}^w\mathbf{p}_i & \dfrac{\partial \mathbf{R}}{\partial \theta}\,{}^w\mathbf{p}_i \end{bmatrix} = -\mathbf{R}\,[{}^w\mathbf{p}_i]_\times\,\begin{bmatrix} \mathbf{V}_\alpha & \mathbf{V}_\beta & \mathbf{V}_\theta \end{bmatrix} [αRwpiβRwpiθRwpi]=R[wpi]×[VαVβVθ]

剩下要做的事情就是: V α , V β , V θ \mathbf{V}_\alpha, \mathbf{V}_\beta, \mathbf{V}_\theta Vα,Vβ,Vθ 显式算出来

3.2 关键观察:一组天然正交基

整个推导的灵魂在这里——单位向量 n \mathbf{n} n 自然地诱导出两个与它正交的向量:

n α = [ − sin ⁡ α ,    cos ⁡ α ,    0 ] T \mathbf{n}_\alpha = [-\sin\alpha,\; \cos\alpha,\; 0]^T nα=[sinα,cosα,0]T

n β = [ cos ⁡ α cos ⁡ β ,    sin ⁡ α cos ⁡ β ,    − sin ⁡ β ] T \mathbf{n}_\beta = [\cos\alpha\cos\beta,\; \sin\alpha\cos\beta,\; -\sin\beta]^T nβ=[cosαcosβ,sinαcosβ,sinβ]T

可以直接验证 n , n α , n β \mathbf{n}, \mathbf{n}_\alpha, \mathbf{n}_\beta n,nα,nβ 两两正交且都是单位向量,构成 R 3 \mathbb{R}^3 R3 的一组标准正交基

而且, [ n ] × [\mathbf{n}]_\times [n]× 关于 α , β \alpha, \beta α,β 的偏导有非常漂亮的形式。把 n = [ cos ⁡ α sin ⁡ β ,    sin ⁡ α sin ⁡ β ,    cos ⁡ β ] T \mathbf{n} = [\cos\alpha\sin\beta,\; \sin\alpha\sin\beta,\; \cos\beta]^T n=[cosαsinβ,sinαsinβ,cosβ]T 代入 [ ⋅ ] × [\cdot]_\times []× 的定义:

[ n ] × = [ 0 − cos ⁡ β sin ⁡ α sin ⁡ β cos ⁡ β 0 − cos ⁡ α sin ⁡ β − sin ⁡ α sin ⁡ β cos ⁡ α sin ⁡ β 0 ] [\mathbf{n}]_\times = \begin{bmatrix} 0 & -\cos\beta & \sin\alpha\sin\beta \\ \cos\beta & 0 & -\cos\alpha\sin\beta \\ -\sin\alpha\sin\beta & \cos\alpha\sin\beta & 0 \end{bmatrix} [n]×= 0cosβsinαsinβcosβ0cosαsinβsinαsinβcosαsinβ0

α \alpha α 求偏导:

∂ [ n ] × ∂ α = [ 0 0 cos ⁡ α sin ⁡ β 0 0 sin ⁡ α sin ⁡ β − cos ⁡ α sin ⁡ β − sin ⁡ α sin ⁡ β 0 ] = sin ⁡ β   [ n α ] × \frac{\partial [\mathbf{n}]_\times}{\partial \alpha} = \begin{bmatrix} 0 & 0 & \cos\alpha\sin\beta \\ 0 & 0 & \sin\alpha\sin\beta \\ -\cos\alpha\sin\beta & -\sin\alpha\sin\beta & 0 \end{bmatrix} = \sin\beta\,[\mathbf{n}_\alpha]_\times α[n]×= 00cosαsinβ00sinαsinβcosαsinβsinαsinβ0 =sinβ[nα]×

β \beta β 求偏导:

∂ [ n ] × ∂ β = [ 0 sin ⁡ β sin ⁡ α cos ⁡ β − sin ⁡ β 0 − cos ⁡ α cos ⁡ β − sin ⁡ α cos ⁡ β cos ⁡ α cos ⁡ β 0 ] = [ n β ] × \frac{\partial [\mathbf{n}]_\times}{\partial \beta} = \begin{bmatrix} 0 & \sin\beta & \sin\alpha\cos\beta \\ -\sin\beta & 0 & -\cos\alpha\cos\beta \\ -\sin\alpha\cos\beta & \cos\alpha\cos\beta & 0 \end{bmatrix} = [\mathbf{n}_\beta]_\times β[n]×= 0sinβsinαcosβsinβ0cosαcosβsinαcosβcosαcosβ0 =[nβ]×

所以两个核心等式:

∂ [ n ] × ∂ α = sin ⁡ β   [ n α ] × , ∂ [ n ] × ∂ β = [ n β ] × \frac{\partial [\mathbf{n}]_\times}{\partial \alpha} = \sin\beta\,[\mathbf{n}_\alpha]_\times, \qquad \frac{\partial [\mathbf{n}]_\times}{\partial \beta} = [\mathbf{n}_\beta]_\times α[n]×=sinβ[nα]×,β[n]×=[nβ]×

正交基的存在让我们可以用一个很有用的证明套路:要证明某个 3 × 3 3\times 3 3×3 矩阵 M \mathbf{M} M 恒等于零,只需要验证它作用到任意向量 v = a n α + b n β + c n \mathbf{v} = a\mathbf{n}_\alpha + b\mathbf{n}_\beta + c\mathbf{n} v=anα+bnβ+cn a , b , c ∈ R a, b, c \in \mathbb{R} a,b,cR 任意)上的结果都是零。这把矩阵恒等式转化成了少数几个基向量的代数运算,省去了硬展开的痛苦。

在用这套套路之前,先记下几个基向量在反对称矩阵作用下的关系(直接用叉乘 [ a ] × b = a × b [\mathbf{a}]_\times \mathbf{b} = \mathbf{a} \times \mathbf{b} [a]×b=a×b 验证即可):

[ n ] × n = 0 , [ n ] × n α = − n β , [ n ] × n β = n α [\mathbf{n}]_\times \mathbf{n} = \mathbf{0}, \qquad [\mathbf{n}]_\times \mathbf{n}_\alpha = -\mathbf{n}_\beta, \qquad [\mathbf{n}]_\times \mathbf{n}_\beta = \mathbf{n}_\alpha [n]×n=0,[n]×nα=nβ,[n]×nβ=nα

[ n α ] × n = n β , [ n α ] × n α = 0 , [ n α ] × n β = − n [\mathbf{n}_\alpha]_\times \mathbf{n} = \mathbf{n}_\beta, \qquad [\mathbf{n}_\alpha]_\times \mathbf{n}_\alpha = \mathbf{0}, \qquad [\mathbf{n}_\alpha]_\times \mathbf{n}_\beta = -\mathbf{n} [nα]×n=nβ,[nα]×nα=0,[nα]×nβ=n

这些关系我们后面会反复用。

3.3 四个引理

为了证明 V α , V β , V θ \mathbf{V}_\alpha, \mathbf{V}_\beta, \mathbf{V}_\theta Vα,Vβ,Vθ 的最终形式,需要四个代数引理。每个引理在最终证明里承担不同的角色。

引理 1:三明治消零

[ n ] × ∂ [ n ] × ∂ α [ n ] × ≡ 0 [\mathbf{n}]_\times \frac{\partial [\mathbf{n}]_\times}{\partial \alpha} [\mathbf{n}]_\times \equiv \mathbf{0} [n]×α[n]×[n]×0

证明:用正交基套路。设 v = a n α + b n β + c n \mathbf{v} = a\mathbf{n}_\alpha + b\mathbf{n}_\beta + c\mathbf{n} v=anα+bnβ+cn,由 3.2 节的结果 ∂ [ n ] × / ∂ α = sin ⁡ β [ n α ] × \partial[\mathbf{n}]_\times/\partial\alpha = \sin\beta[\mathbf{n}_\alpha]_\times [n]×/α=sinβ[nα]×

[ n ] × ∂ [ n ] × ∂ α [ n ] ×   v = sin ⁡ β   [ n ] × [ n α ] × [ n ] ×   ( a n α + b n β + c n ) [\mathbf{n}]_\times \frac{\partial [\mathbf{n}]_\times}{\partial \alpha} [\mathbf{n}]_\times\,\mathbf{v} = \sin\beta\,[\mathbf{n}]_\times [\mathbf{n}_\alpha]_\times [\mathbf{n}]_\times\,(a\mathbf{n}_\alpha + b\mathbf{n}_\beta + c\mathbf{n}) [n]×α[n]×[n]×v=sinβ[n]×[nα]×[n]×(anα+bnβ+cn)

v \mathbf{v} v 的三个分量分别处理:

  • c n c\mathbf{n} cn 分量: [ n ] × n = 0 [\mathbf{n}]_\times \mathbf{n} = \mathbf{0} [n]×n=0,整项为零。
  • a n α a\mathbf{n}_\alpha anα 分量: [ n ] × n α = − n β [\mathbf{n}]_\times \mathbf{n}_\alpha = -\mathbf{n}_\beta [n]×nα=nβ,再 [ n α ] × ( − n β ) = n [\mathbf{n}_\alpha]_\times(-\mathbf{n}_\beta) = \mathbf{n} [nα]×(nβ)=n,再 [ n ] × n = 0 [\mathbf{n}]_\times \mathbf{n} = \mathbf{0} [n]×n=0,整项为零。
  • b n β b\mathbf{n}_\beta bnβ 分量: [ n ] × n β = n α [\mathbf{n}]_\times \mathbf{n}_\beta = \mathbf{n}_\alpha [n]×nβ=nα,再 [ n α ] × n α = 0 [\mathbf{n}_\alpha]_\times \mathbf{n}_\alpha = \mathbf{0} [nα]×nα=0,整项为零。

三项都为零,所以 [ n ] × ∂ [ n ] × ∂ α [ n ] ×   v = 0 [\mathbf{n}]_\times \frac{\partial [\mathbf{n}]_\times}{\partial \alpha} [\mathbf{n}]_\times\,\mathbf{v} = \mathbf{0} [n]×α[n]×[n]×v=0 对任意 v \mathbf{v} v 成立,即原矩阵恒为零矩阵。 ■ \blacksquare

引理 2:外积变身

[ n ] × 2 + I = n n T [\mathbf{n}]_\times^2 + \mathbf{I} = \mathbf{n}\mathbf{n}^T [n]×2+I=nnT

证明:设 n = [ n 1 , n 2 , n 3 ] T \mathbf{n} = [n_1, n_2, n_3]^T n=[n1,n2,n3]T,则 n 1 2 + n 2 2 + n 3 2 = 1 n_1^2 + n_2^2 + n_3^2 = 1 n12+n22+n32=1(单位向量的模为1)。直接展开:

[ n ] × = [ 0 − n 3 n 2 n 3 0 − n 1 − n 2 n 1 0 ] [\mathbf{n}]_\times = \begin{bmatrix} 0 & -n_3 & n_2 \\ n_3 & 0 & -n_1 \\ -n_2 & n_1 & 0 \end{bmatrix} [n]×= 0n3n2n30n1n2n10

矩阵乘法给出:

[ n ] × 2 = [ − n 2 2 − n 3 2 n 1 n 2 n 1 n 3 n 1 n 2 − n 1 2 − n 3 2 n 2 n 3 n 1 n 3 n 2 n 3 − n 1 2 − n 2 2 ] [\mathbf{n}]_\times^2 = \begin{bmatrix} -n_2^2 - n_3^2 & n_1 n_2 & n_1 n_3 \\ n_1 n_2 & -n_1^2 - n_3^2 & n_2 n_3 \\ n_1 n_3 & n_2 n_3 & -n_1^2 - n_2^2 \end{bmatrix} [n]×2= n22n32n1n2n1n3n1n2n12n32n2n3n1n3n2n3n12n22

加上 I \mathbf{I} I,对角线变成 1 − n 2 2 − n 3 2 = n 1 2 1 - n_2^2 - n_3^2 = n_1^2 1n22n32=n12,其他依此类推:

[ n ] × 2 + I = [ n 1 2 n 1 n 2 n 1 n 3 n 1 n 2 n 2 2 n 2 n 3 n 1 n 3 n 2 n 3 n 3 2 ] = n n T ■ [\mathbf{n}]_\times^2 + \mathbf{I} = \begin{bmatrix} n_1^2 & n_1 n_2 & n_1 n_3 \\ n_1 n_2 & n_2^2 & n_2 n_3 \\ n_1 n_3 & n_2 n_3 & n_3^2 \end{bmatrix} = \mathbf{n}\mathbf{n}^T \quad \blacksquare [n]×2+I= n12n1n2n1n3n1n2n22n2n3n1n3n2n3n32 =nnT

这个引理特别有用:每次看到罗德里格斯公式里的 n n T \mathbf{n}\mathbf{n}^T nnT,就可以替换成 [ n ] × 2 + I [\mathbf{n}]_\times^2 + \mathbf{I} [n]×2+I,把所有项统一到 [ n ] × [\mathbf{n}]_\times [n]× 的多项式上。

引理 3:对易关系(李括号)

[ n α ] × [ n ] × − [ n ] × [ n α ] × = [ n β ] × [\mathbf{n}_\alpha]_\times[\mathbf{n}]_\times - [\mathbf{n}]_\times[\mathbf{n}_\alpha]_\times = [\mathbf{n}_\beta]_\times [nα]×[n]×[n]×[nα]×=[nβ]×

[ n ] × [ n β ] × − [ n β ] × [ n ] × = [ n α ] × [\mathbf{n}]_\times[\mathbf{n}_\beta]_\times - [\mathbf{n}_\beta]_\times[\mathbf{n}]_\times = [\mathbf{n}_\alpha]_\times [n]×[nβ]×[nβ]×[n]×=[nα]×

证明:仍然用正交基套路。要证明第一式,等价于证明矩阵

M ≡ [ n α ] × [ n ] × − [ n ] × [ n α ] × − [ n β ] × = 0 \mathbf{M} \equiv [\mathbf{n}_\alpha]_\times[\mathbf{n}]_\times - [\mathbf{n}]_\times[\mathbf{n}_\alpha]_\times - [\mathbf{n}_\beta]_\times = \mathbf{0} M[nα]×[n]×[n]×[nα]×[nβ]×=0

v = a n + b n α + c n β \mathbf{v} = a\mathbf{n} + b\mathbf{n}_\alpha + c\mathbf{n}_\beta v=an+bnα+cnβ,分三项验证。先列一些后面要用的基本关系(除了 3.2 节列过的,再补上 [ n β ] × n = − n α [\mathbf{n}_\beta]_\times \mathbf{n} = -\mathbf{n}_\alpha [nβ]×n=nα [ n β ] × n α = n [\mathbf{n}_\beta]_\times \mathbf{n}_\alpha = \mathbf{n} [nβ]×nα=n [ n β ] × n β = 0 [\mathbf{n}_\beta]_\times \mathbf{n}_\beta = \mathbf{0} [nβ]×nβ=0,都可以直接由叉乘验证)。

作用在 n \mathbf{n} n

  • [ n α ] × [ n ] × n = [ n α ] × 0 = 0 [\mathbf{n}_\alpha]_\times[\mathbf{n}]_\times \mathbf{n} = [\mathbf{n}_\alpha]_\times \mathbf{0} = \mathbf{0} [nα]×[n]×n=[nα]×0=0
  • [ n ] × [ n α ] × n = [ n ] × n β = n α [\mathbf{n}]_\times[\mathbf{n}_\alpha]_\times \mathbf{n} = [\mathbf{n}]_\times \mathbf{n}_\beta = \mathbf{n}_\alpha [n]×[nα]×n=[n]×nβ=nα
  • [ n β ] × n = − n α [\mathbf{n}_\beta]_\times \mathbf{n} = -\mathbf{n}_\alpha [nβ]×n=nα

相加: M n = 0 − n α − ( − n α ) = 0 \mathbf{M}\mathbf{n} = \mathbf{0} - \mathbf{n}_\alpha - (-\mathbf{n}_\alpha) = \mathbf{0} Mn=0nα(nα)=0

作用在 n α \mathbf{n}_\alpha nα

  • [ n α ] × [ n ] × n α = [ n α ] × ( − n β ) = − ( − n ) = n [\mathbf{n}_\alpha]_\times[\mathbf{n}]_\times \mathbf{n}_\alpha = [\mathbf{n}_\alpha]_\times(-\mathbf{n}_\beta) = -(-\mathbf{n}) = \mathbf{n} [nα]×[n]×nα=[nα]×(nβ)=(n)=n
  • [ n ] × [ n α ] × n α = [ n ] × 0 = 0 [\mathbf{n}]_\times[\mathbf{n}_\alpha]_\times \mathbf{n}_\alpha = [\mathbf{n}]_\times \mathbf{0} = \mathbf{0} [n]×[nα]×nα=[n]×0=0
  • [ n β ] × n α = n [\mathbf{n}_\beta]_\times \mathbf{n}_\alpha = \mathbf{n} [nβ]×nα=n

相加: M n α = n − 0 − n = 0 \mathbf{M}\mathbf{n}_\alpha = \mathbf{n} - \mathbf{0} - \mathbf{n} = \mathbf{0} Mnα=n0n=0

作用在 n β \mathbf{n}_\beta nβ

  • [ n α ] × [ n ] × n β = [ n α ] × n α = 0 [\mathbf{n}_\alpha]_\times[\mathbf{n}]_\times \mathbf{n}_\beta = [\mathbf{n}_\alpha]_\times \mathbf{n}_\alpha = \mathbf{0} [nα]×[n]×nβ=[nα]×nα=0
  • [ n ] × [ n α ] × n β = [ n ] × ( − n ) = 0 [\mathbf{n}]_\times[\mathbf{n}_\alpha]_\times \mathbf{n}_\beta = [\mathbf{n}]_\times(-\mathbf{n}) = \mathbf{0} [n]×[nα]×nβ=[n]×(n)=0
  • [ n β ] × n β = 0 [\mathbf{n}_\beta]_\times \mathbf{n}_\beta = \mathbf{0} [nβ]×nβ=0

相加: M n β = 0 \mathbf{M}\mathbf{n}_\beta = \mathbf{0} Mnβ=0

三项都为零,所以 M v = 0 \mathbf{M}\mathbf{v} = \mathbf{0} Mv=0 对任意 v \mathbf{v} v 成立,第一式得证。第二式同理(读者可以自行验证)。 ■ \blacksquare

引理 4:高次降阶

cos ⁡ 2 θ   [ n ] × − sin ⁡ 2 θ   [ n ] × 3 = [ n ] × \cos^2\theta\,[\mathbf{n}]_\times - \sin^2\theta\,[\mathbf{n}]_\times^3 = [\mathbf{n}]_\times cos2θ[n]×sin2θ[n]×3=[n]×

证明:用正交基套路。要证 M ≡ cos ⁡ 2 θ   [ n ] × − sin ⁡ 2 θ   [ n ] × 3 − [ n ] × = 0 \mathbf{M} \equiv \cos^2\theta\,[\mathbf{n}]_\times - \sin^2\theta\,[\mathbf{n}]_\times^3 - [\mathbf{n}]_\times = \mathbf{0} Mcos2θ[n]×sin2θ[n]×3[n]×=0。设 v = a n + b n α + c n β \mathbf{v} = a\mathbf{n} + b\mathbf{n}_\alpha + c\mathbf{n}_\beta v=an+bnα+cnβ,分三项。

作用在 n \mathbf{n} n [ n ] × n = 0 [\mathbf{n}]_\times \mathbf{n} = \mathbf{0} [n]×n=0,所以 [ n ] × 3 n = 0 [\mathbf{n}]_\times^3 \mathbf{n} = \mathbf{0} [n]×3n=0 M n = 0 \mathbf{M}\mathbf{n} = \mathbf{0} Mn=0

作用在 n α \mathbf{n}_\alpha nα

  • [ n ] × n α = − n β [\mathbf{n}]_\times \mathbf{n}_\alpha = -\mathbf{n}_\beta [n]×nα=nβ
  • [ n ] × 2 n α = [ n ] × ( − n β ) = − n α [\mathbf{n}]_\times^2 \mathbf{n}_\alpha = [\mathbf{n}]_\times(-\mathbf{n}_\beta) = -\mathbf{n}_\alpha [n]×2nα=[n]×(nβ)=nα
  • [ n ] × 3 n α = [ n ] × ( − n α ) = n β [\mathbf{n}]_\times^3 \mathbf{n}_\alpha = [\mathbf{n}]_\times(-\mathbf{n}_\alpha) = \mathbf{n}_\beta [n]×3nα=[n]×(nα)=nβ

代入:

M   n α = cos ⁡ 2 θ   ( − n β ) − sin ⁡ 2 θ   n β − ( − n β ) = n β   ( − cos ⁡ 2 θ − sin ⁡ 2 θ + 1 ) = 0.   \mathbf{M}\,\mathbf{n}_\alpha = \cos^2\theta\,(-\mathbf{n}_\beta) - \sin^2\theta\,\mathbf{n}_\beta - (-\mathbf{n}_\beta) = \mathbf{n}_\beta\,(-\cos^2\theta - \sin^2\theta + 1) = \mathbf{0}.\, Mnα=cos2θ(nβ)sin2θnβ(nβ)=nβ(cos2θsin2θ+1)=0.

作用在 n β \mathbf{n}_\beta nβ

  • [ n ] × n β = n α [\mathbf{n}]_\times \mathbf{n}_\beta = \mathbf{n}_\alpha [n]×nβ=nα
  • [ n ] × 2 n β = [ n ] × n α = − n β [\mathbf{n}]_\times^2 \mathbf{n}_\beta = [\mathbf{n}]_\times \mathbf{n}_\alpha = -\mathbf{n}_\beta [n]×2nβ=[n]×nα=nβ
  • [ n ] × 3 n β = [ n ] × ( − n β ) = − n α [\mathbf{n}]_\times^3 \mathbf{n}_\beta = [\mathbf{n}]_\times(-\mathbf{n}_\beta) = -\mathbf{n}_\alpha [n]×3nβ=[n]×(nβ)=nα

代入:

M   n β = cos ⁡ 2 θ   n α − sin ⁡ 2 θ   ( − n α ) − n α = n α   ( cos ⁡ 2 θ + sin ⁡ 2 θ − 1 ) = 0.   \mathbf{M}\,\mathbf{n}_\beta = \cos^2\theta\,\mathbf{n}_\alpha - \sin^2\theta\,(-\mathbf{n}_\alpha) - \mathbf{n}_\alpha = \mathbf{n}_\alpha\,(\cos^2\theta + \sin^2\theta - 1) = \mathbf{0}.\, Mnβ=cos2θnαsin2θ(nα)nα=nα(cos2θ+sin2θ1)=0.

三项都为零, M ≡ 0 \mathbf{M} \equiv \mathbf{0} M0,引理得证。 ■ \blacksquare


字数太多,一篇文章无法写完,接下一篇文章:在位姿优化里手推雅可比:罗德里格斯参数化下的两类求导技巧(二)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐