Jacobian与切空间

0.引言

知识的融会贯通,只是一个小的知识点,记录一下。

1.Jaocibian与切空间

众所周知,Jaocibian矩阵本质上就是导数。初中时学习的一元二次方程 a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0求导,当 x x x确定时可以得到 x x x处的切线方程,切线就是一维的切空间。切空间是在某一点所有的切向量组成的线性空间。

由于线性化本质就是微分, d f / d x df/dx df/dx表示了雅克比矩阵是 f f f x x x的导数,是函数变化的斜率,因此也可类比一元函数的概念理解雅克比矩阵的线性化作用。而与此同时,对于向量空间而言,微分就是以微元为基底,得到的切空间,雅克比矩阵也是一个切空间的坐标变换矩阵。

J = [ ∂ f ∂ x 1 ⋯ ∂ f ∂ x n ] = [ ∂ f 1 ∂ x 1 ⋯ ∂ f 1 ∂ x n ⋮ ⋱ ⋮ ∂ f m ∂ x 1 ⋯ ∂ f m ∂ x n ] \mathbf{J}=\left[\begin{array}{lll} \frac{\partial \mathbf{f}}{\partial x_{1}} & \cdots & \frac{\partial \mathbf{f}}{\partial x_{n}} \end{array}\right]=\left[\begin{array}{ccc} \frac{\partial f_{1}}{\partial x_{1}} & \cdots & \frac{\partial f_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_{m}}{\partial x_{1}} & \cdots & \frac{\partial f_{m}}{\partial x_{n}} \end{array}\right] J=[x1fxnf]=x1f1x1fmxnf1xnfm

和一元二次方程类似,当 x x x确定时,就可以找到具体的切线方程;当具体的点确定时,就可以通过Jacobian得到具体的切空间。

2.旋转矩阵中的切空间

在使用旋转矩阵表达三维世界中刚体的运动方式时,我们需要对其进行估计和优化。例如在优化位姿 T T T时,就需要构建一个残差方程,也就是估计值与观测值之间的误差,而此时需要求解残差方程 e e e对变化矩阵 T T T的求导,变成了矩阵求导问题,而且对于变换矩阵是并不封闭的,所谓的不封闭就是两个变换矩阵相加得到的并不是变换矩阵,而不像是实数1加上实数2得到的3仍然是一个实数。

除此之外,由上面的变换矩阵的定义我们知道,旋转矩阵本身是带有约束的矩阵,也就是旋转矩阵为一个行列式为1的正交矩阵,额外的约束会增加优化的困难,为了简化求解的方式,引入了李群。

简单的说群就是一种集合加上一种运算的代数结构。虽然旋转矩阵对于加法是不封闭的,但是对于乘法是封闭的,两个旋转矩阵相乘代表做了两次旋转。

对于旋转矩阵和变换矩阵的群定义如下:
S O ( 3 ) = { R ∈ R 3 × 3 ∣ R R T = I , det ⁡ ( R ) = 1 } S O(3)=\left\{R \in \mathbb{R}^{3 \times 3} \mid R R^{T}=I, \operatorname{det}(R)=1\right\} SO(3)={RR3×3RRT=I,det(R)=1} S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , T ∈ R 3 } S E(3)=\left\{T=\left[\begin{array}{cc} R & t \\ 0^{T} & 1 \end{array}\right] \in \mathbb{R}^{4 \times 4} \mid R \in S O(3), T \in \mathbb{R}^{3}\right\} SE(3)={T=[R0Tt1]R4×4RSO(3),TR3}
所谓的李群是指具有连续(光滑)性质的群, S o ( 3 ) So(3) So(3) S E ( 3 ) SE(3) SE(3)在实数空间上都是连续的,所以他们都是李群。到此为止李群的引入解决了变换矩阵额外约束的问题,

接下来解决矩阵的求导问题。首先对于任意矩阵 R R R,假设 R R R是某个刚体的旋转,它会随着时间连续变换即为时间的函数 R ( t ) R(t) R(t),因此:
R ( t ) R ( t ) T = I R(t) R(t)^{T}=I R(t)R(t)T=I
对时间 t t t进行求导,其中 R ^ ( t ) \hat{R}(t) R^(t) 代表函数 R ( t ) R(t) R(t)的导数:

R ( t ) R ( t ) T + R ( t ) R ( t ) T = 0 R(t) R(t)^{T}+R(t) R(t)^{T}=0 R(t)R(t)T+R(t)R(t)T=0 R ( ^ t ) R ( t ) T = − R ( t ) R ( t ) T = − ( R ( t ) ^ R ( t ) T ) T R \hat{(} t) R(t)^{T}=-R(t) R(t)^{T}=-\left(R \hat{(t)} R(t)^{T}\right)^{T} R(^t)R(t)T=R(t)R(t)T=(R(t)^R(t)T)T显然, R ( ^ t ) R ( t ) T R \hat{(} t) R(t)^{T} R(^t)R(t)T是一个反对称函数。其特征是主对角线上的元素是0,关于主对角线对称的元素互为相反数。因此对于任意反对称矩阵,总能找到一个唯一与之对应的向量。

a ∧ = A = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] a^{\wedge}=A=\left[\begin{array}{ccc} 0 & -a_{3} & a_{2} \\ a_{3} & 0 & -a_{1} \\ -a_{2} & a_{1} & 0 \end{array}\right] a=A=0a3a2a30a1a2a10因此对于反对称矩阵 R ( t ^ ) R ( t ) T R \hat{(t}) R(t)^{T} R(t^)R(t)T,同样也可以找到一个三维向量 ϕ ( t ) ∈ R 3 \phi(t) \in \mathbb{R}^{3} ϕ(t)R3 ,即:
R ( t ) R ( t ) T = ϕ ( t ) ∧ R(t) R(t)^{T}=\phi(t)^{\wedge} R(t)R(t)T=ϕ(t)
等式两边右乘 R ( t ) R(t) R(t),且 R R R为正交矩阵,所以得到:

R ( t ^ ) = ϕ ( t ) ∧ R ( t ) = [ 0 − ϕ 3 ϕ 2 ϕ 3 0 − ϕ 1 − ϕ 2 ϕ 1 0 ] R ( t ) R \hat{(t})=\phi(t)^{\wedge} R(t)=\left[\begin{array}{ccc} 0 & -\phi_{3} & \phi_{2} \\ \phi_{3} & 0 & -\phi_{1} \\ -\phi_{2} & \phi_{1} & 0 \end{array}\right] R(t) R(t^)=ϕ(t)R(t)=0ϕ3ϕ2ϕ30ϕ1ϕ2ϕ10R(t)
至此我们就得到了矩阵的导数,每次对旋转矩阵求导只需要左乘 ϕ ( t ) \phi(t) ϕ(t)即可。李代数描述了旋转矩阵 R R R局部的导数关系,也叫正切空间。

  • 通过 ϕ ( t ) \phi(t) ϕ(t)可以映射到正切空间,这里的 ϕ ( t ) ∧ R ( t ) \phi(t)^{\wedge} R(t) ϕ(t)R(t)扮演的就是Jacobian的角色,当数值给定时,就能确定具体的正切空间,即是 R ( t ^ ) R(\hat{t}) R(t^).

下面给出旋转矩阵和变换矩阵的群所对应的李代数:

s o ( 3 ) = { ϕ ∈ R 3 , Φ = ϕ ∧ ∈ R 3 × 3 } s o(3)=\left\{\phi \in \mathbb{R}^{3}, \Phi=\phi^{\wedge} \in \mathbb{R}^{3 \times 3}\right\} so(3)={ϕR3,Φ=ϕR3×3} s e ( 3 ) = { ξ = [ ρ ϕ ] ∈ R 6 , ρ ∈ R 3 , ϕ ∈ s o ( 3 ) , ξ ∧ = [ ϕ ∧ ρ 0 T 0 ] ∈ R 4 × 4 } s e(3)=\left\{\xi=\left[\begin{array}{l} \rho \\ \phi \end{array}\right] \in \mathbb{R}^{6}, \rho \in \mathbb{R}^{3}, \phi \in s o(3), \xi^{\wedge}=\left[\begin{array}{cc} \phi^{\wedge} & \rho \\ 0^{T} & 0 \end{array}\right] \in \mathbb{R}^{4 \times 4}\right\} se(3)={ξ=[ρϕ]R6,ρR3,ϕso(3),ξ=[ϕ0Tρ0]R4×4}

  • 引入李群的目的是解决旋转矩阵本身的约束问题,简化后面的优化过程。
  • 引入李代数是为了解决旋转矩阵的求导问题,当然李群和李代数之间也存在指数映射和对数映射的相互转换。

3.MLPnP中的切空间

MLPnP中,方位向量转置的零空间:
J v r ( v ) = null ⁡ ( v T ) = [ r s ] = [ r 1 s 1 r 2 s 2 r 3 s 3 ] \mathbf{J}_{\mathbf{v}_{\mathbf{r}}}(\mathbf{v})=\operatorname{null}\left(\mathbf{v}^{\mathbf{T}}\right)=\left[\begin{array}{ll} \mathbf{r} & \mathbf{s} \end{array}\right]=\left[\begin{array}{cc} r_{1} & s_{1} \\ r_{2} & s_{2} \\ r_{3} & s_{3} \end{array}\right] Jvr(v)=null(vT)=[rs]=r1r2r3s1s2s3

从零空间的定义,方位向量在零空间的投影为0,即是方位向量与零空间是垂直的,怎么能说零空间是它的切空间呢?

在这里插入图片描述
论文中提到, J v r \mathbf{J}_{\mathbf{v}_{r}} Jvr表示了从正切空间到原始向量的变换的雅可比矩阵 , J v r T \mathbf{J}_{\mathbf{v}_{r}}^{T} JvrT表示从原始齐次向量 v v v到其简化后的等价向量 v r v_r vr的变换:

v r = [ d r d s ] = J v r T ( v ) v = 0 \mathbf{v}_{r}=\left[\begin{array}{l}d r \\ d s\end{array}\right]=\mathbf{J}_{\mathbf{v}_{r}}^{T}(\mathbf{v}) \mathbf{v}=\mathbf{0} vr=[drds]=JvrT(v)v=0

在这里插入图片描述

个人理解这里的空间就是零空间,不是切空间, J v r \mathbf{J}_{\mathbf{v}_{r}} Jvr也不是通常意义的Jacobian矩阵,只是一个变换矩阵。 J v r T ( v ) \mathbf{J}_{\mathbf{v}_{r}}^{T}(\mathbf{v}) JvrT(v)表示将方位向量 v v v变换到零空间,再乘以 v v v即为0.

[ d r d s ] = [ r T s T ] λ i − 1 ( R p i + t ) = 0 \left[\begin{array}{l} d r \\ d s \end{array}\right]=\left[\begin{array}{c} \mathbf{r}^{T} \\ \mathbf{s}^{T} \end{array}\right] \lambda_{i}^{-1}\left(R p_{i}+t\right) = 0 [drds]=[rTsT]λi1(Rpi+t)=0
其中, [ r T s T ] \left[\begin{array}{l} \mathbf{r}^{T} \\ \mathbf{s}^{T} \end{array}\right] [rTsT]则为从2D像素坐标系经过相机内参求得方位向量再求得的零空间, λ i − 1 ( R p i + t ) \lambda_{i}^{-1}\left(R p_{i}+t\right) λi1(Rpi+t)则为世界坐标系到相机系的变换,理论上两者相乘应为0,但是由于 R R R t t t有误差,因此不为0,则构建出了目标函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值