IMU与GPS传感器ESKF融合定位
文章目录
分别在两个终端下运行命令:
rosbag play utbm_robocar_dataset_20180502_noimage1.bag
roslaunch imu_gps_localization imu_gps_localization.launch
1、代码整体框架说明
代码具体结构框架如下图所示:
cpp文件 | 文件具体实现作用 | 备注 |
---|---|---|
localization_node.cpp | 主函数文件,实现初始化ros,初始化LocalizationWrapper类 | |
localization_wrapper.h | LocalizationWrapper类定义,主要声明构造函数、析构函数以及imu回调函数、gps回调函数、打印状态、打印gps数据,把状态格式数据转换成ros话题机制 | |
localization_wrapper.cpp | 构造函数中主要是加载参数,保存数据到文件夹下,订阅imu和gps的话题然后发布融合后的轨迹;析构函数主要是释放空间;imu回调函数主要是读取imu数据,然后对数据进行处理,转变状态发布成ros话题,打印状态;gps回调函数主要是实现读取数据,然后进行处理,最后打印。 | |
imu_gps_localizer.cpp | ProcessImuData()函数初始化imu数据,对imu数据进行预测,从ENU坐标系转换到GPS坐标系,发布融合后的状态;ProcessGpsPositionData()函数主要实现初始化数据以及位置的更新。 | |
imu_gps_localizer.h | ImuGpsLocalizer类构造函数,声明ProcessImuData()函数,声明ProcessGpsPositionData()函数 | |
initializer.h | 初始化类,主要是构造函数,添加imu数据,添加gps数据,计算imu数据到gps数据的旋转矩阵这里参考的是openvins | |
imu_processor.cpp | 滤波融合的预测部分Predict()函数具体实现 | |
imu_processor.h | ImuProcessor类主要是滤波融合的预测部分Predict()函数声明 | |
gps_processor.h | GpsProcessor类通过GPS位置更新系统的状态UpdateStateByGpsPosition()以及计算残差以及雅可比矩阵和把得到的误差更新状态 | |
base_type.h | 主要是imu数据、GPS数据以及系统状态的数据结构 | |
utils.h | 主要包括弧度和角度之间的相互转换、ENU坐标系与LLA坐标系的转换以及得到反对称矩阵 |