The goal of this algorithm is to enhance the accuracy of GPS reading based on IMU reading. No RTK supported GPS modules accuracy should be equal to greater than 2.5 meters. Extended Kalman Filter algorithm shall fuse the GPS reading (Lat, Lng, Alt) and Velocities (Vn, Ve, Vd) with 9 axis IMU to improve the accuracy of the GPS.
- CMake
- Boost
- Eigen
- librobotcontrol (Optional to compile and execute test executable in Beaglebone Blue)
- git clone https://github.com/balamuruganky/EKF_IMU_GPS
- cd EKF_IMU_GPS
- git submodule update --init --recursive
- mkdir build
- cd build
- cmake ..
- make
Beaglebone Blue board is used as test platform. There is an inboard MPU9250 IMU and related library to calibrate the IMU. Please go through librobotcontrol documentation for more information. If you are having Beaglebone Blue board, then connect Ublox GPS through USB to test the EKF filter as mentioned below,
- Compile the source code as mentioned in the above section
- ../bin/ekf_test
- Latitude, units are rad
- Longitude, units are rad
- Altitude, units are m
- Velocity (North), units are m/s
- Velocity (East), units are m/s
- Velocity (Down), units are m/s
- Accelarometer X, units are m/s/s
- Accelarometer Y, units are m/s/s
- Accelarometer Z, units are m/s/s
- Gyro X, units are rad/s
- Gyro Y, units are rad/s
- Gyro Z, units are rad/s
- Magnetometer X, units need to be consistant across all magnetometer measurements used (eg. mT)
- Magnetometer Y, units need to be consistant across all magnetometer measurements used (eg. mT)
- Magnetometer Z, units need to be consistant across all magnetometer measurements used (eg. mT)
- double getLatitude_rad()
- double getLongitude_rad()
- double getAltitude_m()
- double getVelNorth_ms()
- double getVelEast_ms()
- double getVelDown_ms()
- float getRoll_rad()
- float getPitch_rad()
- float getHeading_rad()
- float getGroundTrack_rad()
- float getGyroBiasX_rads()
- float getGyroBiasY_rads()
- float getGyroBiasZ_rads()
- float getAccelBiasX_mss()
- float getAccelBiasY_mss()
- float getAccelBiasZ_mss()
The ekf_test executable produce gnss.txt file that contains the raw and filtered GPS coordinates. Python utils developed to visualize the EKF filter performance. Sample result shown below.