KinectFusion阅读笔记 公式详解

小白一枚,看这篇文章的时候有些痛苦,感觉这一篇论文公式字母都怪怪的乱乱的,然后还有一些不太知道的东西查了一下资料,现在整理一下。

论文地址: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帧时刻深度相机的深度图 Rkk

  • 上标和下标 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  kVkg(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,kz1  ICPz


公式(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)=Ψ(λ1tg,kp2Rk(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=pk2=Rg,kpk2=ptg.k2( 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) μ λ1rRk(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)=nulluU(Tg,kV˙k(u)V^k1g(u^))TN^k1g(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 zt 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 sinsin 高阶项:
    R ≈ [ 1 α − γ − α 1 β γ − β 1 ] \boldsymbol R ≈ \begin{bmatrix} 1 & \alpha & -\gamma \\ -\alpha & 1 & \beta \\ \gamma & -\beta & 1 \end{bmatrix} R1αγα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,kz1V˙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 z1αγα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 这本书过一遍把,真难受,我是废物

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值