ORBSLAM3初始化对配置文件里的IMU标定参数(噪声和随机游走)这么敏感,是拿那些参数参与实际的IMU预积分运算了

ORBSLAM3初始化对配置文件里的IMU标定参数(噪声和随机游走)这么敏感,是拿那些参数参与实际的IMU预积分运算了,vins里面那些参数只是影响IMU预积分权重。

可以看到IMU预积分函数传入的参数有IMU偏置和IMU标定参数 ORB_SLAM3/src/Tracking.cc

    const float sf = sqrt(freq);
    cout << endl;
    cout << "IMU frequency: " << freq << " Hz" << endl;
    cout << "IMU gyro noise: " << Ng << " rad/s/sqrt(Hz)" << endl;
    cout << "IMU gyro walk: " << Ngw << " rad/s^2/sqrt(Hz)" << endl;
    cout << "IMU accelerometer noise: " << Na << " m/s^2/sqrt(Hz)" << endl;
    cout << "IMU accelerometer walk: " << Naw << " m/s^3/sqrt(Hz)" << endl;

    mpImuCalib = new IMU::Calib(Tbc,Ng*sf,Na*sf,Ngw/sf,Naw/sf);

    mpImuPreintegratedFromLastKF = new IMU::Preintegrated(IMU::Bias(),*mpImuCalib);

ORB_SLAM3/src/ImuTypes.cc

/** 
 * @brief 预积分类构造函数,根据输入的偏置初始化预积分参数
 * @param b_ 偏置
 * @param calib imu标定参数的类
 */
Preintegrated::Preintegrated(const Bias &b_, const Calib &calib)
{
    Nga = calib.Cov;
    NgaWalk = calib.CovWalk;
    Initialize(b_);
}

Nga 和NgaWalk 有在Preintegrated::IntegrateNewMeasurement函数里更新协方差的时候用到,协方差也就是信息矩阵,程小六的书里有讲(这感觉跟vins里面影响IMU预积分权重类似啊 ),Preintegrated::IntegrateNewMeasurement函数就是预积分计算函数(可以看这里的注释 https://github.com/electech6/ORB_SLAM3_detailed_comments/blob/master/src/ImuTypes.cc#L247 ) ORB_SLAM3/src/ImuTypes.cc

    // Update covariance
    C.rowRange(0,9).colRange(0,9) = A*C.rowRange(0,9).colRange(0,9)*A.t() + B*Nga*B.t();
    C.rowRange(9,15).colRange(9,15) = C.rowRange(9,15).colRange(9,15) + NgaWalk;

之所以传入这两个参数也是有道理的
https://blog.csdn.net/qq_44530706/article/details/129780079
 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值