Open Maxinjun opened 6 months ago
代码如下: double ev = options.accevar; double et = options.gyrovar; double eg = options.bias_gyrovar; double ea = options.bias_accevar;
double ev2 = ev; // * ev; double et2 = et; // * et; double eg2 = eg; // * eg; double ea2 = ea; // * ea; // 设置过程噪声 Q_.diagonal() << 0, 0, 0, ev2, ev2, ev2, et2, et2, et2, eg2, eg2, eg2, ea2, ea2, ea2, 0, 0, 0;
第一个疑问是:应该把上面的注释放开,需要平方 第二个疑问是, ev2、 et2需要乘以dt^2, eg2、ea2需要乘以dt, 参考公式如下 根据代码 // 噪声由初始化器估计 options.gyrovar = sqrt(imu_init.GetCovGyro()[0]); options.accevar = sqrt(imu_init.GetCovAcce()[0]); 可以得知acce_var_是静止时离散时间的加速度计噪声标准差,单位是m/s^2; 如果ev2=et=options.accevar, 即Q中速度对应的方差的单位也是m/s^2, 这明显是不对的,如果是 acc_var^2*dt^2, 单位为 m^2/s^2, 这才是正确的
代码如下: double ev = options.accevar; double et = options.gyrovar; double eg = options.bias_gyrovar; double ea = options.bias_accevar;
第一个疑问是:应该把上面的注释放开,需要平方 第二个疑问是, ev2、 et2需要乘以dt^2, eg2、ea2需要乘以dt, 参考公式如下
根据代码
// 噪声由初始化器估计
options.gyrovar = sqrt(imu_init.GetCovGyro()[0]);
options.accevar = sqrt(imu_init.GetCovAcce()[0]);
可以得知acce_var_是静止时离散时间的加速度计噪声标准差,单位是m/s^2; 如果ev2=et=options.accevar, 即Q中速度对应的方差的单位也是m/s^2, 这明显是不对的,如果是 acc_var^2*dt^2, 单位为 m^2/s^2, 这才是正确的