/LearnRoboticsCpp

Classical robotics algorithms implemented in C++17.

Primary LanguageC++

LearnRoboticsCpp

This repository contains my implementations of classical robotics algorithms in C++. Inspiration drawn from PythonRobotics and CppRobotics. The CppRobotics repo was very good, but it used OpenCV to plot 2D graphs. I found the process of converting 2D points to pixel coordinates in OpenCV very tedious and it seems like a bit of a hack. This repo uses gnuplot-iostream instead for plotting which makes much prettier graphs than OpenCV and allows for us to easily make 3D plots.

Some of these implementations will have a tutorial attached to it. It's still a work in progress.

Table of Contents

Requirments

Tested on Ubuntu 18.04

Running with Docker

The Docker image is about 3GB.

Deployment

$ sudo docker build -f Dockerfile -t ctfchan/learn-robotics-cpp:latest .
$ sudo docker push ctfchan/learn-robotics-cpp:latest

Make sure -it ctfchan/learn-robotics-cpp goes last when you do docker run.

$ sudo docker pull ctfchan/learn-robotics-cpp
$ sudo docker run --name learn-robotics-cpp --mount type=bind,source="$(pwd)",target=/root/LearnRoboticsCpp -it ctfchan/learn-robotics-cpp

From inside the Docker

$ cd ~/LearnRoboticsCpp
$ ./bin/state_lattice # or whatever executable you want to run

The images will show up in the animations directory.

docker stop when you're done. docker rm when you want to get rid of the container to start over or something.

$ sudo docker stop learn-robotics-cpp
$ sudo docker rm learn-robotics-cpp

docker exec to run it after you stop it.

$ sudo docker exec learn-robotics-cpp bash

Path Planning

DWA

DWA Demo

Dijkstra

Dijkstra Demo

A*

A* Demo

PRM

PRM Demo

RRT

RRT Demo

RRTStar

RRTStar Demo

Potential Field

Potential Field Demo

Quintic Polynomial

Quintic Polynomial Demo

Explanation

Cubic Spline

Cubic Spline Demo

Explanation

Model Predictive Trajectory Generation

 Model Predictive Trajectory Generation

Explanation

State Lattice Planner

Left to right: uniform, biased, lane sampling

Tutorial

Path Tracking

Move To Pose

Move To Pose Demo

Stanley Control

Stanely Control Demo

Model Predictive Control

Model Predictive Control Demo

Tutorial

Localization

Extended Kalman Filter

Extended Kalman Filter Demo

Tutorial

Unscented Kalman Filter

Unscented Kalman Filter Demo

We can see error ellipse in this demo is a much better approximation of the true distribution. EKF can be biased and inconsistent.

Tutorial

Particle Filter

Particle Filter Demo