使用误差状态卡尔曼滤波器融合GPS和IMU,实现更高精度的定位

Overview

ESKF融合IMU与GPS数据

融合IMU数据之后的GPS轨迹效果

绿色轨迹:ground truth 蓝色轨迹:fuse IMU and GPS 红色轨迹:GPS

实现方法请参考我的博客《【附源码+代码注释】误差状态卡尔曼滤波(error-state Kalman Filter)实现GPS+IMU融合,EKF ESKF GPS+IMU》

1. 依赖库

Eigen

sudo apt-get install libeigen3-dev

Yaml

sudo apt-get install libyaml-cpp-dev

2. 编译

cd eskf-gps-imu-fusion
mkdir build
cd build
cmake ..
make 

3. 运行

cd eskf-gps-imu-fusion/build
./gps_imu_fusion

4.轨迹显示

执行完./gps_imu_fusion会生成轨迹文件

cd eskf-gps-imu-fusion/data
evo_traj kitti fused.txt gt.txt measured.txt -p

需要安装evo,可以参考我的博客中的介绍

Issues
  • pdf version of blog post

    pdf version of blog post

    it is not easy for foreigners to read csdn blog post (https://blog.csdn.net/u011341856/article/details/114262451). it is good to include a PDF version of blog in repo

    opened by iceberg1369 0
  • imu和gps模拟手机的姿态和位置

    imu和gps模拟手机的姿态和位置

    您好 ,我看到您对通过imu和gps传感器模拟定位有很多经验 ,我有一个问题很困扰想从您这得到帮助。 我是游戏开发工程师 ,希望通过手机的imu和gps模拟手机的姿态和位置出现在unity(游戏引擎)中的地图上行驶。 但是我根据imu的横摆角来模拟时和gps经纬发生了很大的偏离 ,您是否有使用gps来纠正imu yaw角 来修正朝向的经验? 我希望能够及时的响应imu的朝向 ,但不要偏离gps位置太多 。 image 黄色箭头是gps位置,红色箭头是根据imu航向和速度模拟的,朝向偏差导致分道扬镳了。

    opened by wei-kris 6
  • fix some formula error

    fix some formula error

    Modifications

    • adjust the coordinate system of ins/gps measurement
    • add gyro/accel bias compensation into prediction equation
    • fix error observation equation and jacobian

    Results

    fix_bug

    opened by LeatherWang 0
  • gps数据中的velocity 是NED 坐标系的,而imu数据Body frame的,为何他们可以共用一个TransformCoordinate转换函数呢?

    gps数据中的velocity 是NED 坐标系的,而imu数据Body frame的,为何他们可以共用一个TransformCoordinate转换函数呢?

    GPS数据: True GPS position/velocity, ['rad', 'rad', 'm', 'm/s', 'm/s', 'm/s'] for NED (LLA)

    imu数据: 'ref_gyro' True angular velocity in the body frame, units: ['rad/s', 'rad/s', 'rad/s'] 'ref_accel' True acceleration in the body frame, units: ['m/s^2', 'm/s^2', 'm/s^2'] The body coordinate system is fixed at the device. Its origin is located at the center of device. Its x axis points forward, lying in the symmetric plane of the device. Its y axis points to the right side of the device. Its z axis points downward to complete the right-hand coordinate system.

    目标看起来是要都转换到ENU坐标系下。 但gps数据中的velocity 是NED 坐标系的,而imu数据Body frame的,为何他们可以共用一个TransformCoordinate转换函数呢?

    opened by ideafold 0