MSCKF中左零空间的计算

问题

如下公式(1)对应MSCKF论文中的公式(23),其表示特征 j j j与所有观测到该特征的状态构成的观测方程,但这个方程中的 G p ~ j {}^{G}\widetilde{\boldsymbol{p}}_{j} Gp j 是由状态 X ~ \widetilde{\boldsymbol{X}} X 推导出来的,于是这两类状态之间存在耦合,这与EKF所要求的观测方程不一致,因此需要调整该观测方程。
r ( j ) ≃ H x ( j ) X ~ + H f ( j ) G p ~ j + n ( j ) (1) \mathbf{r}^{(j)} \simeq \mathbf{H}_{\mathbf{x}}^{(j)}\widetilde{\boldsymbol{X}} + \mathbf{H}_{f}^{(j)} {}^{G}\widetilde{\boldsymbol{p}}_{j} + \mathbf{n}^{(j)} \tag{1} r(j)Hx(j)X +Hf(j)Gp j+n(j)(1)
调整的策略是只保留状态 X ~ \widetilde{\boldsymbol{X}} X 而将 G p ~ j {}^{G}\widetilde{\boldsymbol{p}}_{j} Gp j 移除,那自然会想到在公式(1)左右两侧同时乘以"某个矩阵"使得右侧第二项直接变成 0 \mathbf{0} 0,而"某个矩阵"如果是 H f ( j ) \mathbf{H}_{f}^{(j)} Hf(j) 的左零空间构成的矩阵既可以达到这个效果。于是调整后观测方程为:
A T r ( j ) ≃ A T H x ( j ) X ~ + A T H f ( j ) G p ~ j + A T n ( j ) r o ( j ) ≃ H o ( j ) X ~ + n o ( j ) (2) \begin{aligned} \mathbf{A}^{T}\mathbf{r}^{(j)} &\simeq\mathbf{A}^{T} \mathbf{H}_{\mathbf{x}}^{(j)}\widetilde{\boldsymbol{X}} + \mathbf{A}^{T}\mathbf{H}_{f}^{(j)} {}^{G}\widetilde{\boldsymbol{p}}_{j} + \mathbf{A}^{T}\mathbf{n}^{(j)}\\ \mathbf{r}_{o}^{(j)} &\simeq \mathbf{H}_{o}^{(j)}\widetilde{\boldsymbol{X}} + \mathbf{n}_{o}^{(j)} \tag{2} \end{aligned} ATr(j)ro(j)ATHx(j)X +ATHf(j)Gp j+ATn(j)Ho(j)X +no(j)(2)
式中 A T \mathbf{A}^{T} AT即为 H f ( j ) \mathbf{H}_{f}^{(j)} Hf(j) 的左零空间构成的矩阵。

注: 零空间是满足 A x = 0 \mathbf{Ax}=\mathbf{0} Ax=0的所有 x \mathbf{x} x组成的空间,而左零空间是满足 x T A = 0 \mathbf{x}^{T}\mathbf{A}=\mathbf{0} xTA=0 ( A T x = 0 ) (\mathbf{A}^{T}\mathbf{x}=\mathbf{0}) (ATx=0)的所有 x \mathbf{x} x组成的空间

原理

假设特征点 p j \mathbf{p}_{j} pj 被n个相机位姿看到,则可知 H f ( j ) \mathbf{H}_{f}^{(j)} Hf(j) 的维度为 2 n × 3 ( n > 1 ) 2n\times 3(n>1) 2n×3n>1,于是可对 H f ( j ) \mathbf{H}_{f}^{(j)} Hf(j) 进行QR分解得:
在这里插入图片描述
其中 Q \mathbf{Q} Q为正交矩阵,即该矩阵的所有列向量彼此正交,于是可知 Q 2 \mathbf{Q}_{2} Q2 任意一列 q 2 i \mathbf{q}_{2i} q2i 满足 q 2 i T Q 1 = 0 \mathbf{q}_{2i}^{T}\mathbf{Q}_{1}=\mathbf{0} q2iTQ1=0,根据左零空间的定义可知矩阵 Q 2 \mathbf{Q}_{2} Q2的所有列向量构成的空间即为 Q 1 \mathbf{Q}_{1} Q1 的左零空间,所以可得 Q 2 T Q 1 = 0 \mathbf{Q}_{2}^{T}\mathbf{Q}_{1}=\mathbf{0} Q2TQ1=0,于是 Q 2 T \mathbf{Q}_{2}^{T} Q2T 即为公式(2)中的 A T \mathbf{A}^{T} AT.

实现

利用eigen中的qr分解对象,按如下计算过程获得矩阵 H f \mathbf{H}_{f} Hf 的左零空间:

Eigen::ColPivHouseholderQR<Eigen::MatrixXd> qr(H_f.rows(), H_f.cols());
qr.compute(H_f);
Eigen::MatrixXd Q = qr.householderQ();
Eigen::MatrixXd Q1 = Q.block(0,0,Q.rows(),3);
Eigen::MatrixXd Q2 = Q.block(0,3,Q.rows(),Q.cols()-3);

参考

MSCKF论文
MSCKF Nullspace Projection
零空间1
零空间2
QR分解1
QR分解2

### MSCKF中FEJ原理解释 在多传感器融合背景下,前端误差建模(Front End Jacobian, FEJ)是一种用于改进扩展卡尔曼滤波器(EKF)性能的方法。具体来说,在MSCKF(Multi-State Constraint Kalman Filter)环境中应用FEJ可以有效提升系统的稳定性和准确性。 #### 原理概述 FEJ的核心思想是在每次更新过程中使用状态向量的第一个可用估计来计算雅可比矩阵[^3]。这意味着在整个迭代周期内保持初始估计的一致性,从而减少由于不断变化的线性化点带来的累积误差。这种做法有助于维持更精确的状态转换模型和观测模型表示,特别是在处理非线性动态系统时尤为重要。 对于MSCKF而言,FEJ的应用不仅限于简单的状态预测阶段;它同样适用于涉及多个传感器输入的数据关联过程以及后续的地图构建环节。通过固定首次获得的最佳猜测作为参考基准,能够更好地同步来自不同源的信息流,并确保各部分之间逻辑连贯统一。 ```matlab % MATLAB伪代码展示如何实现FEJ原则下的MSCKF算法 function msckf_fej_update(stateEstimate, measurements) % 使用最初的状态估计初始化雅克比矩阵 J_initial = compute_jacobian(stateEstimate); % 对每一个新的测量执行如下操作... for each measurement in measurements do predict_state(J_initial); % 预测下一个状态 update_measurement_model(); % 更新测量模型 correct_state_with_new_data(); % 利用新数据校正状态 end end ``` 上述MATLAB伪代码片段展示了在一个典型的MSCKF循环里怎样贯彻FEJ理念:始终采用最开始的那个状态预估值去构造雅克比矩阵`J_initial`,而不是随着每一步骤重新评估这个重要参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值