在SLAM中,通常用BA(Bundle Adjustment)来实现多个三维点和不同相机位姿的优化
本文描述如何建立基于点特征的图优化,并推导相应的雅克比矩阵,并用g2o实现相应的类
1. 点特征误差及观测模型
假设相机位姿为 T c w T_{cw} Tcw表示世界坐标系到相机坐标系的变换,或者表示成 R c w , t c w R_{cw},t_{cw} Rcw,tcw。三维空间点表示成
世界坐标下 P w = [ P x w , P y w , P z w ] T P^{w}=\begin{bmatrix} P^{w}_{x}, P^{w}_{y}, P^{w}_{z}\end{bmatrix}^{T} Pw=[Pxw,Pyw,Pzw]T
相机坐标下 P c = [ P x c , P y c , P z c ] T P^{c}=\begin{bmatrix} P^{c}_{x}, P^{c}_{y}, P^{c}_{z}\end{bmatrix}^{T} Pc=[Pxc,Pyc,Pzc]T
相机内参为 K K K
重投影误差为 e p = p − p ′ = [ u v ] − [ u ′ v ′ ] e_{p}=p-p^{'}=\begin{bmatrix} u \\ v\end{bmatrix}-\begin{bmatrix} u^{'} \\ v^{'}\end{bmatrix} ep=p−p′=[uv]−[u′v′]
其中 p p p为当前图像中提取的点, p ′ p^{'} p′为与 p p p匹配的三维空间点的投影点,计算方式为
P c = R c w P w + t c w u ′ = f x P x c P z c + c x v ′ = f y P y c P z c + c y \begin{aligned} P^{c}&=R_{cw}P^{w}+t_{cw} \\ u^{'} &= \frac {f_{x}P^{c}_{x}} {P^{c}_{z}}+c_{x} \\ v^{'} &= \frac {f_{y}P^{c}_{y}} {P^{c}_{z}}+c_{y} \end{aligned} Pcu′v′=RcwPw+tcw=PzcfxPxc+cx=PzcfyPyc+cy
2. 点特征重投影误差关于位姿增量的雅克比矩阵
利用链式法则,可以求得
∂ e p ∂ δ ξ = ∂ e p ∂ P c ∂ P c ∂ δ ξ \frac{\partial e_{p}}{\partial \delta\xi}=\frac{\partial e_{p}}{\partial P^{c}}\frac{\partial P^{c}}{\partial \delta\xi } ∂δξ∂ep=∂Pc∂ep∂δξ∂Pc
下面分别计算等式右边两项
这里注意,这里需要涉及到矩阵求导,矩阵求导通常分为分子布局和分母布局,这两种情况只是表达形式的不同,本身并没有两样,下面统一都用分母布局,具体求导结果可以看这篇文章
第一部分
∂ e p ∂ P c = ∂ [ u − u ′ v − v ′ ] ∂ P c = [ ∂ ( u − u ′ ) ∂ P x c ∂ ( u − u ′ ) ∂ P y c ∂ ( u − u ′ ) ∂ P z c ∂ ( v − v ′ ) ∂ P x c ∂ ( v − v ′ ) ∂ P y c ∂ ( v − v ′ ) ∂ P z c ] = − [ f x P z c 0 f x P x c P z c 2 0 f y P z c f y P y c P z c 2 ] 2 × 3 \begin{aligned} \frac{\partial e_{p}}{\partial P^{c}}&= \frac{\partial \begin{bmatrix} u-u^{'}\\ v-v^{'}\end{bmatrix}}{\partial P^{c}} \\ &= \begin{bmatrix} \frac{\partial(u-u^{'})}{\partial P_{x}^{c}} & \frac{\partial(u-u^{'})}{\partial P_{y}^{c}} & \frac{\partial(u-u^{'})}{\partial P_{z}^{c}} \\ \frac{\partial(v-v^{'})}{\partial P_{x}^{c}} & \frac{\partial(v-v^{'})}{\partial P_{y}^{c}} & \frac{\partial(v-v^{'})}{\partial P_{z}^{c}} \end{bmatrix} \\ &= -\begin{bmatrix} \frac{f_{x}}{P_{z}^{c}} & 0 & \frac{f_{x}P_{x}^{c}}{P_{z}^{c2}} \\ 0 & \frac{f_{y}}{P_{z}^{c}} & \frac{f_{y}P_{y}^{c}}{P_{z}^{c2}} \end{bmatrix}_{2 \times 3} \end{aligned} ∂Pc∂ep=∂P