All Projects → mithi → fusion-ekf

mithi / fusion-ekf

Licence: MIT license
An extended Kalman Filter implementation in C++ for fusing lidar and radar sensor measurements.

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to fusion-ekf

CarND-Extended-Kalman-Filter-P6
Self Driving Car Project 6 - Sensor Fusion(Extended Kalman Filter)
Stars: ✭ 24 (-78.76%)
Mutual labels:  radar, lidar, sensor-fusion, kalman-filter, extended-kalman-filters
Fusion Ukf
An unscented Kalman Filter implementation for fusing lidar and radar sensor measurements.
Stars: ✭ 162 (+43.36%)
Mutual labels:  udacity, radar, lidar, self-driving-car, kalman-filter
sensor-fusion
Filters: KF, EKF, UKF || Process Models: CV, CTRV || Measurement Models: Radar, Lidar
Stars: ✭ 96 (-15.04%)
Mutual labels:  radar, lidar, sensor-fusion, kalman-filter
Self-Driving-Car-NanoDegree-Udacity
This repository contains code and writeups for projects and labs completed as a part of UDACITY's first of it's kind self driving car nanodegree program.
Stars: ✭ 29 (-74.34%)
Mutual labels:  udacity, sensor-fusion, extended-kalman-filters
self-driving-car-nd
Udacity's Self-Driving Car Nanodegree project files and notes.
Stars: ✭ 50 (-55.75%)
Mutual labels:  udacity, self-driving-car, sensor-fusion
Vehicle Detection
Vehicle detection using machine learning and computer vision techniques for Udacity's Self-Driving Car Engineer Nanodegree.
Stars: ✭ 1,093 (+867.26%)
Mutual labels:  udacity, self-driving-car
Advanced Lane Detection
An advanced lane-finding algorithm using distortion correction, image rectification, color transforms, and gradient thresholding.
Stars: ✭ 71 (-37.17%)
Mutual labels:  udacity, self-driving-car
go-estimate
State estimation and filtering algorithms in Go
Stars: ✭ 98 (-13.27%)
Mutual labels:  sensor-fusion, kalman-filter
parallel-non-linear-gaussian-smoothers
Companion code in JAX for the paper Parallel Iterated Extended and Sigma-Point Kalman Smoothers.
Stars: ✭ 17 (-84.96%)
Mutual labels:  kalman-filter, extended-kalman-filters
Self-Driving-Car-Steering-Simulator
The aim of this project is to allow a self driving car to steer autonomously in a virtual environment.
Stars: ✭ 15 (-86.73%)
Mutual labels:  udacity, self-driving-car
OpenMaterial
3D model exchange format with physical material properties for virtual development, test and validation of automated driving.
Stars: ✭ 23 (-79.65%)
Mutual labels:  radar, lidar
ai for robotics
Visualizations of algorithms covered in Sebastian Thrun's excellent Artificial Intelligence for Robotics course on Udacity.
Stars: ✭ 125 (+10.62%)
Mutual labels:  udacity, kalman-filter
Uselfdrivingsimulator
Self-Driving Car Simulator
Stars: ✭ 48 (-57.52%)
Mutual labels:  udacity, self-driving-car
continuous-fusion
(ROS) Sensor fusion algorithm for camera+lidar.
Stars: ✭ 26 (-76.99%)
Mutual labels:  lidar, sensor-fusion
LiDAR-GTA-V
A plugin for Grand Theft Auto V that generates a labeled LiDAR point cloud from the game environment.
Stars: ✭ 127 (+12.39%)
Mutual labels:  lidar, self-driving-car
pyUKF
Unscented kalman filter (UKF) library in python that supports multiple measurement updates
Stars: ✭ 52 (-53.98%)
Mutual labels:  sensor-fusion, kalman-filter
tf-semantic-segmentation-FCN-VGG16
Semantic segmentation for classifying road. "Fully Convolutional Networks for Semantic Segmentation (2015)" implemented using TF
Stars: ✭ 30 (-73.45%)
Mutual labels:  udacity, self-driving-car
Tracking With Extended Kalman Filter
Object (e.g Pedestrian, vehicles) tracking by Extended Kalman Filter (EKF), with fused data from both lidar and radar sensors.
Stars: ✭ 393 (+247.79%)
Mutual labels:  radar, lidar
Model-Predictive-Control
C++ implementation of Model Predictive Control(MPC)
Stars: ✭ 51 (-54.87%)
Mutual labels:  udacity, self-driving-car
highway-path-planning
My path-planning pipeline to navigate a car safely around a virtual highway with other traffic.
Stars: ✭ 39 (-65.49%)
Mutual labels:  udacity, self-driving-car

Update

Introduction

This is an extended Kalman Filter implementation in C++ for fusing lidar and radar sensor measurements. A Kalman filter can be used anywhere where you have uncertain information about some dynamic system, and you want to make an educated guess about what the system is going to do next.

In this case, we have two 'noisy' sensors:

  • A lidar sensor that measures our position in cartesian-coordinates (x, y)
  • A radar sensor that measures our position and relative velocity (the velocity within line of sight) in polar coordinates (rho, phi, drho)

We want to predict our position, and how fast we are going in what direction at any point in time:

  • In essence: the position and velocity of the system in cartesian coordinates: (x, y, vx, vy)
  • NOTE: We are assuming a constant velocity model (CV) for this particular system

This extended kalman filter does just that.


Table of Contents

  • Dependencies
  • Basic Usage
  • Notes

Dependencies

This project was tested on a Macbook Pro with Mac0S Sierra 10.12.4 with the following:

  • cmake version 3.7.2
  • GNU Make 4.2.1
  • gcc GNU 6.3.0

Here's a sample recipe:

  • Install xcode and xcode command line tools, if you haven't yet
$ xcode-select --install
  • Install homebrew if you haven't yet
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Install make
$ brew install homebrew/dupes/make --with-default-names
  • Install cmake
$ brew install cmake
  • Check if you have the correct version or higher
$ gcc-6 --version
$ make --version
$ cmake --version

Basic Usage

  • Clone this repository
$ git clone https://github.com/mithi/Fusion-EKF-CPP/
  • Go inside the build folder and compile:
$ cd build
$ CC=gcc-6 cmake .. && make
  • To execute inside the build folder use the following format:
$ ./extendedKF /PATH/TO/INPUT/FILE /PATH/TO/OUTPUT/FILE
$ ./ExtendedKF ../data/data-1.txt ../data/out-1.txt
  • Please use the following format for your input file
L(for lidar) m_x m_y t r_x r_y r_vx r_vy
R(for radar) m_rho m_phi m_drho t r_px r_py r_vx r_vy

Where:
(m_x, m_y) - measurements by the lidar
(m_rho, m_phi, m_drho) - measurements by the radar in polar coordinates
(t) - timestamp in unix/epoch time the measurements were taken
(r_x, r_y, r_vx, r_vy) - the real ground truth state of the system

Example:
R 8.60363 0.0290616 -2.99903  1477010443399637  8.6 0.25  -3.00029  0
L 8.45  0.25  1477010443349642  8.45  0.25  -3.00027  0 
  • The program outputs the predictions in the following format on the output file path you specified
p_x p_y p_vx p_vy m_x m_y r_px r_py r_vx r_vy

Where:
(p_x, p_y, p_vx, p_vy) - the predicted state of the system by FusionEKF
(m_x, m_y) - the position value as measured by the sensor converted to cartesian coordinates
(r_x, r_y, r_vx, r_vy) - the real ground truth state of the system

Example:
4.53271 0.279 -0.842172 53.1339 4.29136 0.215312  2.28434 0.226323
43.2222 2.65959 0.931181  23.2469 4.29136 0.215312  2.28434 0.226323
  • The measurement covariance matrices lidar_R and radar_R are hard-coded in line 16-21 of src/fusionekf.cpp. Change and recompile as necessary.
  • The initial state covariance matrix P is hard-coded in line 36-39 of src/fusionekf.cpp. Change and recompile as necessary.
  • The process 2d noise ax and ay used to update the process covariance matrix Q is hard-coded in line 17-18 of headers/fusionekf.h. Change and recompile as necessary.

Notes


Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].