vins-mono边缘化
时间: 2023-08-19 13:16:06 浏览: 182
对于vins-mono边缘化,它是一种针对视觉惯导系统中的状态估计问题的优化方法。VINS-Mono是一个基于单目相机的视觉惯导系统,它可以估计相机的位姿、速度和重力向量等状态信息。
边缘化是指在状态估计过程中将某些变量从整个系统中"边缘化"掉,即通过消除它们的先验和后验不确定性来简化问题。在vins-mono中,通过边缘化一些变量,可以将整个系统的复杂度降低,提高状态估计的精度和效率。
在vins-mono中,边缘化主要用于移除历史图像帧的状态变量,以减少系统的计算复杂度。当系统处理新的图像帧时,历史图像帧的状态变量会被边缘化掉,只保留当前图像帧的状态信息。这样可以降低系统的维度,减少计算量,并且保持状态估计的一致性。
需要注意的是,vins-mono边缘化是一个迭代优化过程,在每个时间步骤上都会进行。通过边缘化历史图像帧的状态变量,可以使系统更加稳定,并提高运动估计的准确性。
相关问题
vins-mono的边缘化分析
vins-mono是一种基于单目相机的视觉惯性里程计系统,可以用于实现相机的定位和建图。边缘化分析是vins-mono系统中的一个重要步骤,用于优化状态变量并更新系统的状态估计。
边缘化分析是一种对非关键状态变量进行消除的方法,可以将状态变量的数量降至最小化,从而简化状态估计问题。在vins-mono系统中,边缘化分析用于消除相机的姿态变量和特征点的位置变量,保留相机的速度和加速度等惯性测量单元的状态变量。
在边缘化分析中,可以通过计算雅可比矩阵来消除非关键状态变量。雅可比矩阵是状态变量和观测变量之间的导数矩阵,可以用于计算状态变量的边缘概率分布。通过计算雅可比矩阵,可以将非关键状态变量从状态估计中消除,并更新系统的状态估计。
总之,边缘化分析是vins-mono系统中的一个重要步骤,可以用于优化状态变量并更新系统的状态估计,从而实现相机的定位和建图。
VINS-mono中的marginlaizaition.cpp的滑窗部分的代码
VINS-Mono中的Marginalization.cpp文件中的滑窗代码如下所示:
```
for (int j = 0; j < _pre_integration_vec.size(); j++) {
if (_pre_integration_vec[j]->sum_dt > _repropagation_threshold) {
if (j == 0) {
continue;
}
delete _pre_integration_vec[j - 1];
_pre_integration_vec.erase(_pre_integration_vec.begin(),
_pre_integration_vec.begin() + j - 1);
j = 0;
}
}
if (_pre_integration_vec.size() > 2) {
// sort imu measurements
sort(_pre_integration_vec.begin(), _pre_integration_vec.end(),
[](const IntegrationBase *p1, const IntegrationBase *p2) {
return p1->sum_dt < p2->sum_dt;
});
// remove the oldest pre-integration
IntegrationBase *pre_integrations = _pre_integration_vec.front();
_pre_integration_vec.pop_front();
delete pre_integrations;
// create new marginalization factor
MarginalizationFactor *marginalization_factor =
new MarginalizationFactor(_pre_integration_vec.front(), i);
_marginalization_factors.push_back(marginalization_factor);
// update Jacobian and residual
for (int j = 0; j < _pre_integration_vec.size(); j++) {
if (j != 0) {
_pre_integration_vec[j]->repropagate(
_pre_integration_vec[j - 1]->delta_q,
_pre_integration_vec[j - 1]->delta_v,
_pre_integration_vec[j - 1]->delta_p);
}
_pre_integration_vec[j]->compute_jacobian();
marginalization_factor->add_information(
_pre_integration_vec[j]->jacobian,
_pre_integration_vec[j]->residual);
}
}
```
其中,变量`_pre_integration_vec`是一个存储IMU预积分量的vector,而`_marginalization_factors`存储的是边缘化因子。该代码实现了Marginalization Factor的滑窗策略,根据预积分时间的累积和来判断是否需要删除旧的预积分量,然后创建新的边缘化因子,并更新其Jacobian矩阵和残差。
阅读全文
相关推荐















