小白一枚,看这篇文章的时候有些痛苦,感觉这一篇论文公式字母都怪怪的乱乱的,然后还有一些不太知道的东西查了一下资料,现在整理一下。
论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6162880
公式上下标解释
-
字母上面有 ⋅ \cdot ⋅ 代表其次坐标,例如
u ˙ = ( u 1 ) \dot{\boldsymbol u}= \begin{pmatrix} \boldsymbol u \\ 1 \end{pmatrix} u˙=(u1) -
下标 k k k 表示第 k k k 帧时刻,例如
R k 表 示 第 k 帧 时 刻 深 度 相 机 的 深 度 图 \mathrm R_k 表示第k帧时刻深度相机的深度图 Rk表示第k帧时刻深度相机的深度图 -
上标和下标 g g g 都代表的是世界坐标系,例如
T g , k 表 示 从 世 界 坐 标 系 到 第 k 帧 相 机 坐 标 系 的 转 换 V k g ( u ) 表 示 世 界 坐 标 系 下 的 V k ( u ) \boldsymbol T_{g,k}~~表示从世界坐标系到第k帧相机坐标系的转换\\ \boldsymbol V_k^g(\boldsymbol u)~~表示世界坐标系下的~~\boldsymbol V_k(\boldsymbol u) Tg,k 表示从世界坐标系到第k帧相机坐标系的转换Vkg(u) 表示世界坐标系下的 Vk(u) -
字母上面有 ^ ~\hat{}~ ^ 代表预测值,没有的代表的是测量值。例如
V ^ k , N ^ k 分 别 表 示 V k , N k 的 预 测 值 \hat{\boldsymbol V}_k,~\hat{\boldsymbol N}_k ~~ 分别表示\boldsymbol V_k,~\boldsymbol N_k的预测值 V^k, N^k 分别表示Vk, Nk的预测值 -
字母上面有 ~ 代表还在迭代中的值,没有 ~ 就代表已经迭代完成的值,例如
T ~ g , k z = T ~ i n c z T ~ g , k z − 1 表 示 的 是 一 个 I C P 的 迭 代 过 程 , 上 标 z 表 示 迭 代 次 数 \widetilde{\boldsymbol T}_{g,k}^z=\widetilde{\boldsymbol T}_{inc}^z\widetilde{\boldsymbol T}_{g,k}^{z-1} ~~表示的是一个\mathsf{ICP}的迭代过程,上标z表示迭代次数 T g,kz=T inczT g,kz−1 表示的是一个ICP的迭代过程,上标z表示迭代次数
公式(6)
F R k ( p ) = Ψ ( λ − 1 ∥ t g , k − p ∥ 2 − R k ( x ) ) (6) \mathrm F_{\mathrm R_k}(\boldsymbol p) = \Psi\Big(\lambda^{-1} {\color{#009900} \|\boldsymbol t_{g,k}-\boldsymbol p\|_2} - \mathrm R_k(\boldsymbol x)\Big) \tag{6} FRk(p)=Ψ(λ−1∥tg,k−p∥2−Rk(x))(6)
这个其实就是上面
∣
r
−
λ
R
k
(
u
)
∣
≤
μ
|r-\lambda\mathrm R_k(\boldsymbol u)|\leq\mu
∣r−λRk(u)∣≤μ的变体
r
=
∥
p
k
∥
2
=
∥
R
g
,
k
p
k
∥
2
=
∥
p
−
t
g
.
k
∥
2
(
∵
p
=
R
g
,
k
p
k
+
t
g
.
k
)
r=\|\boldsymbol p_k\|_2 =\| \boldsymbol R_{g,k}\boldsymbol p_k \|_2 ={\color{#009900} \| \boldsymbol p-\boldsymbol t_{g.k} \|_2 } \\ {\color{#BBBBBB}(~\because \boldsymbol p= \boldsymbol R_{g,k}\boldsymbol p_k+\boldsymbol t_{g.k}~)}
r=∥pk∥2=∥Rg,kpk∥2=∥p−tg.k∥2( ∵p=Rg,kpk+tg.k )
而
∣
r
−
λ
R
k
(
u
)
∣
≤
μ
即
,
∣
λ
−
1
r
−
R
k
(
u
)
∣
≤
μ
′
,
λ
≥
0
|~r-\lambda\mathrm R_k(\boldsymbol u)~|\leq\mu \\ 即, |~\lambda^{-1}r-\mathrm R_k(\boldsymbol u)~|\leq\mu', ~~~\lambda\geq0
∣ r−λRk(u) ∣≤μ即,∣ λ−1r−Rk(u) ∣≤μ′, λ≥0
就得到了上式
公式(16)
∑ u ∈ U Ω k ( u ) ≠ n u l l ∥ ( T g , k V ˙ k ( u ) − V ^ k − 1 g ( u ^ ) ) T N ^ k − 1 g ( u ^ ) ∥ 2 (16) \tag{16} \sum_{\boldsymbol u\in\mathscr U \atop \Omega_k(\boldsymbol u)\neq null} \Bigg\|\Big(\boldsymbol T_{g,k}\dot{\boldsymbol V}_k(\boldsymbol u)-\hat{\boldsymbol V}_{k-1}^g(\hat{\boldsymbol u})\Big)^\mathsf T\hat{\boldsymbol N}_{k-1}^g(\hat{\boldsymbol u})\Bigg\|_2 Ωk(u)=nullu∈U∑∥∥∥∥∥(Tg,kV˙k(u)−V^k−1g(u^))TN^k−1g(u^)∥∥∥∥∥2(16)
这公式其实就是 ICP 中的 Point-to-Plane 方式构造的误差函数。
不了解ICP的,可以看我的这篇 ICP算法思想与推导详解
公式(18)
T ~ i n c z = [ R ~ z ∣ t ~ z ] = [ 1 α − γ t x − α 1 β t y γ − β 1 t z ] (18) \widetilde{\boldsymbol T}_{inc}^z=\Big[ \widetilde{\boldsymbol R}^z \Big| \widetilde{\boldsymbol t}^z \Big]= \left[\begin{array}{ccc|c} 1 & \alpha & -\gamma & t_x \\ -\alpha & 1 & \beta & t_y \\ \gamma & -\beta & 1 & t_z \end{array}\right] \tag{18} T incz=[R z∣∣∣t z]=⎣⎡1−αγα1−β−γβ1txtytz⎦⎤(18)
这里旋转矩阵 R \boldsymbol R R为什么可以这么表示?
它这里绕三个轴旋转的角度分别是 β , γ , α \color{#FFAA00}\beta,\gamma,\alpha β,γ,α,然后这里的 T ~ i n c z \widetilde{\boldsymbol T}_{inc}^z T incz表示的是相机量帧之间的变化,这个变化非常小,所以,
-
解释一:
我们知道,按照1-2-3顺序旋转的旋转矩阵的表达式为:
R = [ c γ c α c β s α + s β s γ c α s β s α − c β s γ c α − c γ c α c β c α − s β s γ s α s β c α + c β s γ s α s γ − s β c γ c β c γ ] \boldsymbol R= \begin{bmatrix} c_\gamma c_\alpha & c_\beta s_\alpha + s_\beta s_\gamma c_\alpha & s_\beta s_\alpha - c_\beta s_\gamma c_\alpha \\ -c_\gamma c_\alpha & c_\beta c_\alpha - s_\beta s_\gamma s_\alpha & s_\beta c_\alpha + c_\beta s_\gamma s_\alpha \\ s_\gamma & -s_\beta c_\gamma & c_\beta c_\gamma \end{bmatrix} R=⎣⎡cγcα−cγcαsγcβsα+sβsγcαcβcα−sβsγsα−sβcγsβsα−cβsγcαsβcα+cβsγsαcβcγ⎦⎤
(这里 s s s表示 sin \sin sin, c c c表示 cos \cos cos)
此时 α , β , γ → 0 \alpha,\beta,\gamma \rightarrow 0 α,β,γ→0,那么,
c α , c β , c γ → 1 c_\alpha,c_\beta,c_\gamma \rightarrow 1 cα,cβ,cγ→1,
s α , s β , s γ → 0 s_\alpha,s_\beta,s_\gamma \rightarrow 0 sα,sβ,sγ→0, s α ∼ α , s β ∼ β , s γ ∼ γ s_\alpha\sim\alpha,s_\beta\sim\beta,s_\gamma\sim\gamma sα∼α,sβ∼β,sγ∼γ,
并舍去 sin ⋅ sin \sin\cdot\sin sin⋅sin 高阶项:
R ≈ [ 1 α − γ − α 1 β γ − β 1 ] \boldsymbol R ≈ \begin{bmatrix} 1 & \alpha & -\gamma \\ -\alpha & 1 & \beta \\ \gamma & -\beta & 1 \end{bmatrix} R≈⎣⎡1−αγα1−β−γβ1⎦⎤ -
解释二:
使用罗德里格斯公式来解释,可看我 这篇 的1.3节
公式(20)
T
~
g
,
k
z
V
˙
k
(
u
)
=
R
~
z
V
~
k
g
(
u
)
+
t
~
z
=
G
(
u
)
x
+
V
~
k
g
(
u
)
(20)
\widetilde{\boldsymbol T}_{g,k}^z \dot{\boldsymbol V}_k(\boldsymbol u)= \widetilde{\boldsymbol R}^z \widetilde{\boldsymbol V}_k^g(\boldsymbol u)+\widetilde{\boldsymbol t}^z= \boldsymbol G(\boldsymbol u)\boldsymbol x+\widetilde{\boldsymbol V}_k^g(\boldsymbol u) \tag{20}
T
g,kzV˙k(u)=R
zV
kg(u)+t
z=G(u)x+V
kg(u)(20)
其中
x
=
(
β
,
γ
,
α
,
t
x
,
t
y
,
t
z
)
T
G
(
u
)
=
(
[
V
~
k
g
(
u
)
]
×
∣
I
3
×
3
)
[
⋅
]
×
表
示
向
量
的
叉
积
矩
阵
\boldsymbol x=\big( {\color{#FFAA00}\beta, \gamma, \alpha}, t_x, t_y, t_z \big)^\mathsf T \\ \boldsymbol G(\boldsymbol u)=\Bigg(\Big[ \widetilde{\boldsymbol V}_k^g(\boldsymbol u)\Big]_\times~ \Bigg|~\boldsymbol I_{3\times 3}\Bigg) \\ ~[~\cdot ~]_\times表示向量的叉积矩阵
x=(β,γ,α,tx,ty,tz)TG(u)=([V
kg(u)]× ∣∣∣∣∣ I3×3) [ ⋅ ]×表示向量的叉积矩阵
左边一个等号很简单:
T
~
g
,
k
z
V
˙
k
(
u
)
=
T
~
i
n
c
z
T
~
g
,
k
z
−
1
V
˙
k
(
u
)
=
T
~
i
n
c
z
V
~
k
g
(
u
)
=
R
~
z
V
~
k
g
(
u
)
+
t
~
z
\begin{aligned} \widetilde{\boldsymbol T}_{g,k}^z \dot{\boldsymbol V}_k(\boldsymbol u) &=\widetilde{\boldsymbol T}_{inc}^z\widetilde{\boldsymbol T}_{g,k}^{z-1} \dot{\boldsymbol V}_k(\boldsymbol u) \\ &=\widetilde{\boldsymbol T}_{inc}^z\widetilde{\boldsymbol V}_k^g(\boldsymbol u) \\ &=\widetilde{\boldsymbol R}^z \widetilde{\boldsymbol V}_k^g(\boldsymbol u) +\widetilde{\boldsymbol t}^z \end{aligned}
T
g,kzV˙k(u)=T
inczT
g,kz−1V˙k(u)=T
inczV
kg(u)=R
zV
kg(u)+t
z
再看右边一个等号
对于
G
(
u
)
x
\boldsymbol G(\boldsymbol u)\boldsymbol x
G(u)x 部分,
我们把
x
\boldsymbol x
x 拆开一下,记:
ϕ
=
(
β
,
γ
,
α
)
T
{\color{#00AAFF}\boldsymbol \phi} = ({\color{#FFAA00}\beta, \gamma, \alpha})^\mathsf T
ϕ=(β,γ,α)T
那么
x
=
(
ϕ
t
~
z
)
=
(
ϕ
T
,
t
~
z
T
)
T
\boldsymbol x= \begin{pmatrix} {\color{#00AAFF}\boldsymbol \phi} \\ \widetilde{\boldsymbol t}^z \end{pmatrix}= ( {\color{#00AAFF}\boldsymbol \phi}^\mathsf T, {\widetilde{\boldsymbol t}^z}^\mathsf T)^\mathsf T \\
x=(ϕt
z)=(ϕT,t
zT)T
根据分块矩阵乘法,
G
(
u
)
⋅
x
\boldsymbol G(\boldsymbol u)\cdot \boldsymbol x
G(u)⋅x 实际上就是:
G
(
u
)
⋅
x
=
[
V
~
k
g
(
u
)
]
×
⋅
ϕ
+
t
~
z
\boldsymbol G(\boldsymbol u)\cdot \boldsymbol x= \Big[ \widetilde{\boldsymbol V}_k^g(\boldsymbol u)\Big]_\times\cdot{\color{#00AAFF}\boldsymbol \phi}+\widetilde{\boldsymbol t}^z
G(u)⋅x=[V
kg(u)]×⋅ϕ+t
z
上面根据公式(18)的结果可知:
R
~
z
≈
[
1
α
−
γ
−
α
1
β
γ
−
β
1
]
=
I
−
[
(
β
,
γ
,
α
)
T
]
×
=
I
−
[
ϕ
]
×
\widetilde{\boldsymbol R}^z ≈ \begin{bmatrix} 1 & \alpha & -\gamma \\ -\alpha & 1 & \beta \\ \gamma & -\beta & 1 \end{bmatrix} =\boldsymbol I-\Big[({\color{#FFAA00}\beta, \gamma, \alpha})^\mathsf T\Big]_\times =\boldsymbol I-[{\color{#00AAFF}\boldsymbol\phi}]_\times
R
z≈⎣⎡1−αγα1−β−γβ1⎦⎤=I−[(β,γ,α)T]×=I−[ϕ]×
根据叉积性质我们知道:
R
~
z
V
~
k
g
(
u
)
=
(
I
−
[
ϕ
]
×
)
⋅
V
~
k
g
(
u
)
=
V
~
k
g
(
u
)
−
ϕ
×
V
~
k
g
(
u
)
=
V
~
k
g
(
u
)
+
V
~
k
g
(
u
)
×
ϕ
=
V
~
k
g
(
u
)
+
[
V
~
k
g
(
u
)
]
×
⋅
ϕ
\begin{aligned} \widetilde{\boldsymbol R}^z \widetilde{\boldsymbol V}_k^g(\boldsymbol u) &=\big(\boldsymbol I-[{\color{#00AAFF}\boldsymbol\phi}]_\times\big) \cdot\widetilde{\boldsymbol V}_k^g(\boldsymbol u) \\ &=\widetilde{\boldsymbol V}_k^g(\boldsymbol u)-{\color{#00AAFF}\boldsymbol\phi} \times \widetilde{\boldsymbol V}_k^g(\boldsymbol u)= \widetilde{\boldsymbol V}_k^g(\boldsymbol u)+\widetilde{\boldsymbol V}_k^g(\boldsymbol u) \times {\color{#00AAFF}\boldsymbol\phi} \\ &=\widetilde{\boldsymbol V}_k^g(\boldsymbol u)+\Big[ \widetilde{\boldsymbol V}_k^g(\boldsymbol u)\Big]_\times\cdot{\color{#00AAFF}\boldsymbol \phi} \end{aligned}
R
zV
kg(u)=(I−[ϕ]×)⋅V
kg(u)=V
kg(u)−ϕ×V
kg(u)=V
kg(u)+V
kg(u)×ϕ=V
kg(u)+[V
kg(u)]×⋅ϕ
那么就得出:
R
~
z
V
~
k
g
(
u
)
+
t
~
z
=
V
~
k
g
(
u
)
+
[
V
~
k
g
(
u
)
]
×
⋅
ϕ
+
t
~
z
=
V
~
k
g
(
u
)
+
G
(
u
)
⋅
x
\begin{aligned} \widetilde{\boldsymbol R}^z \widetilde{\boldsymbol V}_k^g(\boldsymbol u) +\widetilde{\boldsymbol t}^z &=\widetilde{\boldsymbol V}_k^g(\boldsymbol u)+ \Big[ \widetilde{\boldsymbol V}_k^g(\boldsymbol u)\Big]_\times\cdot{\color{#00AAFF}\boldsymbol \phi}+\widetilde{\boldsymbol t}^z\\ &=\widetilde{\boldsymbol V}_k^g(\boldsymbol u)+\boldsymbol G(\boldsymbol u)\cdot \boldsymbol x \end{aligned}
R
zV
kg(u)+t
z=V
kg(u)+[V
kg(u)]×⋅ϕ+t
z=V
kg(u)+G(u)⋅x
结束
其他几个公式就木有什么问题了,大家帮我看看上面我写的对不对,thx~
或者这篇里大家还有哪个地方不懂的给我留言我也可以把它写一写。
之后有时间还是把 S t a t e E s t i m a t i o n f o r R o b o t i c s State Estimation for Robotics StateEstimationforRobotics 这本书过一遍把,真难受,我是废物