在位姿优化里手推雅可比:罗德里格斯参数化下的两类求导技巧(一)
在位姿优化里手推雅可比:罗德里格斯参数化下的两类求导技巧
在基于模型的位姿估计里,列文伯格-马夸尔特(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)K12−pˉiK3(−Rw[wpi]×)[nαnβn] sinθsinβ(1−cosθ)sinβ01−cosθsinθ0001
整个推导分两关:
- 第一关是处理投影方程的商式求导——比较机械,但关键是要看出 K 12 − p ˉ i K 3 \mathbf{K}_{12} - \bar{\mathbf{p}}_i \mathbf{K}_3 K12−pˉ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+(1−cosθ)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=1∑Nεi2,εi=∥pˉi−qi∥2
要算雅可比,就要对每个 ε 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}} =K3u∇yTK12u−K3uK12u∇yTK3u
注意到中间那个分式正是 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=K3u∇yTK12u−pˉi∇yTK3u
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=K3uK12∇yTu−pˉiK3∇yTu
把 ∇ 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=K3uK12−pˉiK3∇yTu
这就是核心形式。前面的"系数" ( K 12 − p ˉ i K 3 ) / K 3 u (\mathbf{K}_{12} - \bar{\mathbf{p}}_i \mathbf{K}_3) / \mathbf{K}_3\mathbf{u} (K12−pˉ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)K12−pˉ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)K12−pˉ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+(1−cosθ)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=(1−cosθ)(∂α∂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α]×=RT∂R/∂α 推得 ∂ 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]×= 00−cosαsinβ00−sinα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]×= 0−sinβ−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,c∈R 任意)上的结果都是零。这把矩阵恒等式转化成了少数几个基向量的代数运算,省去了硬展开的痛苦。
在用这套套路之前,先记下几个基向量在反对称矩阵作用下的关系(直接用叉乘 [ 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]×= 0n3−n2−n30n1n2−n10
矩阵乘法给出:
[ 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= −n22−n32n1n2n1n3n1n2−n12−n32n2n3n1n3n2n3−n12−n22
加上 I \mathbf{I} I,对角线变成 1 − n 2 2 − n 3 2 = n 1 2 1 - n_2^2 - n_3^2 = n_1^2 1−n22−n32=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=0−nα−(−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α=n−0−n=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} M≡cos2θ[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} M≡0,引理得证。 ■ \blacksquare ■
字数太多,一篇文章无法写完,接下一篇文章:在位姿优化里手推雅可比:罗德里格斯参数化下的两类求导技巧(二)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)