这是一个基于模板编程的通用滤波器,支持EKF,IEKF,UKF。并且还有一套参数的序列化系统:PropertyHandler。这篇文章讲详细讲解lightweight_filtering的使用。
https://github.com/rabienrose/3d_vision/blob/master/visual_map/src/try_lightfilter/src/main.cc
- 首先需要从LWF::FilterBase派生一个类出来,在派生LWF::FilterBase的时候需要在模板中指定一个LWF::Prediction,和多个LWF::Update。
- FilterBase负责管理消息的同步,以及调用LWF::Prediction的predictMerged和LWF::Update的performUpdate
- 负责接受各种measurement
- LWF::Prediction也需要使用派生类,派生的时候需要指定LWF::FilterState,从ModelBase继承来
- 需要实现纯虚函数evalPrediction
- 输入前一个时刻状态,输出当前时刻状态
- 需要实现纯虚函数jacPreviousState,使用UKF的时候不用
- 前一状态到当前状态的误差变换矩阵
- 需要实现纯虚函数jacNoise,使用UKF的时候不用
- 传感器误差到状态误差的变换矩阵
- 需要实现纯虚函数evalPrediction
- LWF::FilterBase从PropertyHandler继承而来
- PropertyHandler