问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SLAM如何在Ceres中计算残差对四元数的雅可比矩阵

创作时间:
作者:
@小白创作中心

SLAM如何在Ceres中计算残差对四元数的雅可比矩阵

引用
CSDN
1.
https://m.blog.csdn.net/weixin_45533366/article/details/145670364

在SLAM(同时定位与地图构建)算法中,姿态优化是一个核心问题。本文将详细介绍如何在Ceres优化框架下计算残差对四元数的雅可比矩阵,这对于理解SLAM算法中的姿态优化过程具有重要参考价值。

姿态可以进行数学运算的表达式有两种。一种是四元数Q,一种是旋转矩阵R

假设在SLAM算法中构建了一个姿态残差如下:

$$e = Q_{var}^{-1} * Q_2$$

或者

$$e = R_{var}^{-1} * R_2$$

其中 $Q_{var}$ 和 $R_{var}$ 是待优化变量,$Q_2$ 和 $R_2$ 是约束。

那么,如何对 $Q_{var}$ 和 $R_{var}$ 求导呢?

通过四元数方法进行求导

残差对Manifold变量求导

在VINS-MONO中预计分的姿态约束公式如下:

$$r_q = 2 * [ Q_i^j \otimes ( Q_i^{-1} \otimes Q_j ) ]_{vec}$$

其中 $Q_i^j$ 表示 $i, j$ 帧之间的姿态预积分的逆,$Q_i, Q_j$ 表示第 $i, j$ 帧的姿态是待优化的量。

然后 $r_q$ 对姿态 $Q_j$ 求导,得到:

$$J_r^Q = R_{left}(Q_i^j \otimes Q_i^{-1} \otimes Q_j).bottomRightCorner<3, 3>()$$

VINS-MONO是通过右扰动的方式推导残差对四元数的导数。以对 $Q_j$ 为例,对 $Q_j$ 右乘一个小扰动:

$$\lim_{\theta \to 0} \frac{ Q_i^j\otimes Q_i^{-1}\otimes (Q_j \otimes \begin{bmatrix} 1 \ \theta \end{bmatrix})-Q_i^j\otimes Q_i^{-1}\otimes (Q_j \otimes \begin{bmatrix} 1 \ 0 \end{bmatrix})} {\theta}$$

$$= R_{left}(Q_i^j \otimes Q_i^{-1} \otimes Q_j) \lim_{\theta \to 0} \frac{ \begin{bmatrix} 1 \ \theta \end{bmatrix}-\begin{bmatrix} 1 \ 0 \end{bmatrix}} {\theta}$$

$$= R_{left}(Q_i^j \otimes Q_i^{-1} \otimes Q_j)$$

其中 $R_{left}(Q_i^j \otimes Q_i^{-1} \otimes Q_j)$ 就是残差对四元数的导数,$R_{left}$ 表示四元数左矩阵。

因为VINS-MONO只取了四元数的虚部作为残差,所以只取了矩阵的下面三行。

具体推导过程可以看这个链接的第42页:VINS MONO公式推导

四元数的基础概念可以查看下述链接:四元数速查手册

Manifold变量对Tangent变量求导

然后VINS-MONO在LocalParameterization类中定义了四元数

Manifold空间相对于Tangent空间的jacobian矩阵:

$$\lim_{\theta \to 0} \frac{ \begin{bmatrix} 1 \ \theta \end{bmatrix}-\begin{bmatrix} 1 \ 0 \end{bmatrix}} {\theta} = \frac{\partial\begin{bmatrix} 1 \ \theta \end{bmatrix}}{\theta}$$

结果如下:前三行是位置的和姿态无关不用管,后四行是姿态的。

$$J_{manifold}^{tangent}=\begin{bmatrix} 1 & 0 & 0& 0 & 0& 0 \ 0 & 1 & 0& 0 & 0& 0\ 0 & 0 &1& 0 & 0& 0\ 0 & 0 &0& 1 & 0& 0\ 0 & 0 &0& 0 & 1& 0\ 0 & 0 &0& 0 & 0& 1\ 0 & 0 &0& 0 & 0& 0\ \end{bmatrix}$$

VINS-MONO中LocalParameterization中ComputeJacobian是:

$$\frac{\partial\begin{bmatrix} 1 \ \theta \end{bmatrix}}{\theta}$$

VINS-MONO的结果是:

$$\begin{bmatrix}1 &0 & 0 &0 \0 &1 & 0 &0 \0 & 0 & 1 &0 \0 &0 & 0 &0 \\end{bmatrix}$$

其中全是0的那行从第一行放到第四行。其对应的残差对Manifold变量求导的雅可比矩阵中第一列放到最后一列。

Ceres中自带的QuaternionParameterization 中ComputeJacobian是:

$$\frac{\partial Q \otimes \begin{bmatrix} 1 \ \theta \end{bmatrix}}{\theta}$$

其结果是:

Ceres根据链式法则最终计算残差对Manifold变量的雅可比矩阵和Manifold变量对Tangent变量的雅可比矩阵的乘积。殊途同归,两种方法只要最后的雅可比矩阵相同就行。关于LocalParameterization类型变量雅可比矩阵计算方式可以看我另一篇博客:

Ceres中LocalParameterization参数Jacobian矩阵计算过程

自定义的角度约束残差推导

然后借鉴VINS-MONO中求导的方法,自己定义的残差:

$$r_q = 2*[Q_{imu}^{-1} \otimes Q_i].vec$$

其中 $Q_i$ 是待优化变量, $r_q$ 对 $Q_i$ 求导, 其表达式为:

$$R_{left}(Q_{imu}^{-1} \otimes Q_i)$$

LocalParameterization中定义的jacobian为:

$$\begin{bmatrix}1 &0 & 0 &0 \0 &1 & 0 &0 \0 & 0 & 1 &0 \0 &0 & 0 &0 \\end{bmatrix}$$

其对应的残差对Manifold变量求导的雅可比矩阵中第一列放到最后一列。

开始用上述雅可比矩阵求导的时候,发现残差并不会收敛,发现是没有加Eigen::RowMajor。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号