假定一个 3D 点同时被两个 frame 观测到,两个 frame 的位姿分别为 Twci,Twcj,在 frame i 上观测得到的归一化坐标为 [ui,vi],逆深度为 λ,则在 frame i 相机坐标系下的齐次坐标 Pci 为
Pci=λ1uiλ1viλ11 假定在 frame j 相机坐标系下的齐次坐标 Pcj 为
xcjycjzcj1 有了上述定义后我们就可以构建视觉重投影残差了,如下
Pcj=xcjycjzcj1=Twcj⊤Twciλ1uiλ1viλ11 将两个位姿展开
Pcj=[Rwcj⊤0−Rwcj⊤twcj1][Rwci0twci1]λ1uiλ1viλ11 继续化简得
Pcj=[Rwcj⊤Rwci0Rwcj⊤twci−Rwcj⊤twcj1]Pci 注意在展开后,我们用 P′ 来表示去掉最后一个维度 1 的坐标,也就是非齐次坐标。
Pcj′=Rwcj⊤RwciPci′+Rwcj⊤(twci−twcj) 则残差为
f(⋅)=Rwcj⊤RwciPci′+Rwcj⊤(twci−twcj)−Pcj′ 我们要优化的变量分别是两个位姿和逆深度,也就是 Rwci,twci,Rwcj,twcj,λ,我们分别进行推导,推导之前先看几个常见的导数
R1⊤R2p 对 R2 的导数
R2∂R1⊤R2p=ϕ→0limϕR1⊤R2exp(ϕ∧)p−R1⊤R2p≈ϕ→0limϕR1⊤R2(I+ϕ∧)p−R1⊤R2p=ϕ→0limϕR1⊤R2ϕ∧p=ϕ→0limϕ−R1⊤R2p∧ϕ=−R1⊤R2p∧ R⊤p 对 R 的导数 (R−1p 对 R 的导数)
∂ϕ∂(R−1p)=ϕ→0limϕ(Rexp(ϕ∧))−1p−R−1p=ϕ→0limϕexp(ϕ∧)−1R−1p−R−1p=ϕ→0limϕexp(−ϕ∧)R−1p−R−1p≈ϕ→0limϕ(I−ϕ∧)R−1p−R−1p=ϕ→0limϕ−ϕ∧R−1p=ϕ→0limϕ(R−1p)∧ϕ=(R−1p)∧ 下面开始正式求导
首先是对 Rwci 的导数,通过残差公式可见,只有前半部分和 Rwci 有关,也就是
ϕ∂Rwcj⊤RwciPci′ 根据上面第一个公式可以得到
ϕ∂Rwcj⊤RwciPci′=−Rwcj⊤RwciPci′∧ 然后是对 twci 的导数,指和后半部分有关,可以直接得到导数为
∂twci∂Rwcj⊤(twci−twcj)=Rwcj⊤ 同样可以简单的得到 twcj 的导数
∂twcj∂Rwcj⊤(twci−twcj)=−Rwcj⊤ 对 Rwcj 求导前先进行一些化简,注意到和 Rwcj 有关的项
Rwcj⊤RwciPci′+Rwcj⊤(twci−twcj)=Rwcj⊤(RwciPci′+twci−twcj) 其中
Rwcj⊤(RwciPci′+twci−twcj)=Rwcj⊤(Pw′−twcj) 其实到这里我们已经发现其结构和前面的第二个导数结构很像了,R−1p 的结构,导数结果为 (R−1p)∧,所以接下来我们直接计算该式子的最终结果,然后取反对称即可。根据 SE3 逆运算可知
twcj=−Rcjw⊤tcjw 则
Rwcj⊤(RwciPci′+twci−twcj)=Rwcj⊤(Pw′+Rcjw⊤tcjw)=RcjwPw′+tcjw=Pcj′ 所以最终对 Rwcj 的求导结果为 Pcj′∧。
最后则是对逆深度 λ的导数,这个很见到,是一个在分子上的常数,直接求导即可,结果为
f(⋅)=Rwcj⊤Rwciλ1uiλ1viλ1+Rwcj⊤(twci−twcj)−Pcj′ 结果为
−λ21Rwcj⊤Rwciuivi1