maplab系列9:poseUpdate调参

rovioli在rovio之上加了定位功能,使用poseUpdate对滤波器添加一个观察量。专业样做的好处是在没有观察量的时候,可以靠存vio推进。在滤波器状态好的时候可以实现长时间(大于几十秒)的正确定位。

并且虽然只用pose来更新,但通过prediction的F矩阵,同样可以调整到速度,imu等。其实滤波器完整的更新过程应该从上一个时刻的状态到当前时刻的预测直再到更新直。这样如果上一个时刻预测这个时刻的位置移动少了一些,那么说明速度也需要提高。

检查更新过程可以计算一个全量更新,也就是\Delta x=H*r的到更新量,和通过K得到的跟新量的对比。看跟新量大概是全量的百分比。

H决定一个參差r能对应每个状态量的跟新量,这个比例完全又推到决定,没有调参的余地,如果推到有误,这里也会有错。可以调的东西有观察量的不确定度,有一些观察量会影响所有的状态量,比如重投影。这时候调整观察量的不确定度只是整体调整全量更新的比例。如果不同的观察量只影响部分状态量,这样可以通过调整观察量的不确定度来平衡观察量之间的影响度。比如前后帧的update和gps全局的update。

检测滤波器状态可以突然关闭滤波器跟新,过一段时间再打开跟新,看下这时的偏差量。

检查滤波器是否有效可以通过降低update频率。看下状态有没有跟着跟新量走的趋势。但只有update的频率够高才能快速让滤波器进入状态,然后再减少跟新频率才行。

rovioli中的poseupdate分为三部分,一部分是更新观察量pose所在坐标系到滤波器所在坐标系的变换(IW),一个直接跟新滤波器状态,一个是观察量local和滤波器local的变换(MV),比如观察量是激光slam的pose,滤波器是imu。这时可以不用精确确定lidar到imu的变换,而放到MV中来更新。这三部分的比重通过调节。

  UpdateNoise:值越大pose更新越慢,对应prenoiP_的滤波器状态部分

  init_cov_IrIW 10; 
  init_cov_qWI 1;  

  pre_cov_MrMV 1e-4;  
  pre_cov_qVM 1e-4; 
  
  init_cov_MrMV 1; 
  init_cov_qVM 1;  
  pre_cov_IrIW 0.0001;  
  pre_cov_qWI 0.0001; 

对应prenoiP_的pose部分状态部分

值越小,对速度等滤波器状态影响越大,如果值太大,就等于强行把body的pose等于更新的pose

updateVecNormTermination对应IEKF的收敛直,如果pose跟新和自建点跟新太矛盾,会招骋不收敛,然后就没有任何poseupdate更新量了。也就是两者矛盾的时候,选择相信自建点的更新。

静止启动初始化比运动中初始化容易。
  

猜你喜欢

转载自blog.csdn.net/ziliwangmoe/article/details/83902803