mirror of
https://github.com/AtsushiSakai/PythonRobotics.git
synced 2026-01-13 23:37:56 -05:00
490 lines
18 KiB
Markdown
490 lines
18 KiB
Markdown
<img src="https://github.com/AtsushiSakai/PythonRobotics/blob/master/icon.png?raw=true" align="right" width="300"/>
|
||
|
||
# PythonRobotics
|
||
[](https://travis-ci.org/AtsushiSakai/PythonRobotics)
|
||
|
||
Python codes for robotics algorithm.
|
||
|
||
|
||
# Table of Contents
|
||
* [Requirements](#requirements)
|
||
* [How to use](#how-to-use)
|
||
* [Localization](#localization)
|
||
* [Extended Kalman Filter localization](#extended-kalman-filter-localization)
|
||
* [Unscented Kalman Filter localization](#unscented-kalman-filter-localization)
|
||
* [Path Planning](#path-planning)
|
||
* [Dynamic Window Approach](#dynamic-window-approach)
|
||
* [Grid based search](#grid-based-search)
|
||
* [Dijkstra algorithm](#dijkstra-algorithm)
|
||
* [A* algorithm](#a-algorithm)
|
||
* [Potential Field algorithm](#potential-field-algorithm)
|
||
* [Model Predictive Trajectory Generator](#model-predictive-trajectory-generator)
|
||
* [Path optimization sample](#path-optimization-sample)
|
||
* [Lookup table generation sample](#lookup-table-generation-sample)
|
||
* [State Lattice Planning](#state-lattice-planning)
|
||
* [Uniform polar sampling](#uniform-polar-sampling)
|
||
* [Biased polar sampling](#biased-polar-sampling)
|
||
* [Lane sampling](#lane-sampling)
|
||
* [Probabilistic Road-Map (PRM) planning](#probabilistic-road-map-prm-planning)
|
||
* [Voronoi Road-Map planning](#voronoi-road-map-planning)
|
||
* [Rapidly-Exploring Random Trees (RRT)](#rapidly-exploring-random-trees-rrt)
|
||
* [Basic RRT](#basic-rrt)
|
||
* [RRT*](#rrt)
|
||
* [RRT with dubins path](#rrt-with-dubins-path)
|
||
* [RRT* with dubins path](#rrt-with-dubins-path-1)
|
||
* [RRT* with reeds-sheep path](#rrt-with-reeds-sheep-path)
|
||
* [Closed Loop RRT*](#closed-loop-rrt)
|
||
* [Cubic spline planning](#cubic-spline-planning)
|
||
* [B-Spline planning](#b-spline-planning)
|
||
* [Bezier path planning](#bezier-path-planning)
|
||
* [Quintic polynomials planning](#quintic-polynomials-planning)
|
||
* [Dubins path planning](#dubins-path-planning)
|
||
* [Reeds Shepp planning](#reeds-shepp-planning)
|
||
* [Optimal Trajectory in a Frenet Frame](#optimal-trajectory-in-a-frenet-frame)
|
||
* [Mix Integer Optimization based model predictive planning and control](#mix-integer-optimization-based-model-predictive-planning-and-control)
|
||
* [Path tracking](#path-tracking)
|
||
* [Pure pursuit tracking](#pure-pursuit-tracking)
|
||
* [Stanley control](#stanley-control)
|
||
* [Rear wheel feedback control](#rear-wheel-feedback-control)
|
||
* [Linear–quadratic regulator (LQR) steering control](#linearquadratic-regulator-lqr-steering-control)
|
||
* [Linear–quadratic regulator (LQR) speed and steering control](#linearquadratic-regulator-lqr-speed-and-steering-control)
|
||
* [Model predictive speed and steering control](#model-predictive-speed-and-steering-control)
|
||
* [License](#license)
|
||
* [Author](#author)
|
||
|
||
# Requirements
|
||
|
||
- Python 3.6.x
|
||
|
||
- numpy
|
||
|
||
- scipy
|
||
|
||
- matplotlib
|
||
|
||
- pandas
|
||
|
||
- [pyReedsShepp](https://github.com/ghliu/pyReedsShepp)
|
||
|
||
- [cvxpy](https://cvxgrp.github.io/cvxpy/index.html)
|
||
|
||
# How to use
|
||
|
||
1. Install the required libraries.
|
||
|
||
2. Clone this repo.
|
||
|
||
3. Execute python script in each directory.
|
||
|
||
4. Add star to this repo if you like it :smiley:.
|
||
|
||
# Localization
|
||
|
||
## Extended Kalman Filter localization
|
||
|
||
<img src="https://github.com/AtsushiSakai/PythonRobotics/blob/master/Localization/extended_kalman_filter/animation.gif" width="640">
|
||
|
||
This is a sensor fusion localization with Extended Kalman Filter(EKF).
|
||
|
||
The blue line is true trajectory, the black line is dead reckoning trajectory,
|
||
|
||
the gren point is positioning observation (ex. GPS), and the red line is estimated trajectory with EKF.
|
||
|
||
The red ellipse is estimated covariance ellipse with EKF.
|
||
|
||
## Unscented Kalman Filter localization
|
||
|
||

|
||
|
||
This is a sensor fusion localization with Unscented Kalman Filter(UKF).
|
||
|
||
The lines and points are same meaning of the EKF simulation.
|
||
|
||
Ref:
|
||
|
||
- [Discriminatively Trained Unscented Kalman Filter for Mobile Robot Localization](https://www.researchgate.net/publication/267963417_Discriminatively_Trained_Unscented_Kalman_Filter_for_Mobile_Robot_Localization)
|
||
|
||
# Path Planning
|
||
|
||
## Dynamic Window Approach
|
||
|
||
This is a 2D navigation sample code with Dynamic Window Approach.
|
||
|
||
- [The Dynamic Window Approach to Collision Avoidance](https://www.ri.cmu.edu/pub_files/pub1/fox_dieter_1997_1/fox_dieter_1997_1.pdf)
|
||
|
||

|
||
|
||
|
||
|
||
## Grid based search
|
||
|
||
### Dijkstra algorithm
|
||
|
||
This is a 2D grid based shortest path planning with Dijkstra's algorithm.
|
||
|
||

|
||
|
||
In the animation, cyan points are searched nodes.
|
||
|
||
### A\* algorithm
|
||
|
||
This is a 2D grid based shortest path planning with A star algorithm.
|
||
|
||

|
||
|
||
In the animation, cyan points are searched nodes.
|
||
|
||
It's heuristic is 2D Euclid distance.
|
||
|
||
### Potential Field algorithm
|
||
|
||
This is a 2D grid based path planning with Potential Field algorithm.
|
||
|
||

|
||
|
||
In the animation, the blue heat map shows potential value on each grid.
|
||
|
||
Ref:
|
||
|
||
- [Robotic Motion Planning:Potential Functions](https://www.cs.cmu.edu/~motionplanning/lecture/Chap4-Potential-Field_howie.pdf)
|
||
|
||
|
||
|
||
## Model Predictive Trajectory Generator
|
||
|
||
This is a path optimization sample on model predictive trajectory generator.
|
||
|
||
This algorithm is used for state lattice planner.
|
||
|
||
### Path optimization sample
|
||
|
||

|
||
|
||
### Lookup table generation sample
|
||
|
||

|
||
|
||
Ref:
|
||
|
||
- [Optimal rough terrain trajectory generation for wheeled mobile robots](http://journals.sagepub.com/doi/pdf/10.1177/0278364906075328)
|
||
|
||
|
||
|
||
## State Lattice Planning
|
||
|
||
This script is a path planning code with state lattice planning.
|
||
|
||
This code uses the model predictive trajectory generator to solve boundary problem.
|
||
|
||
|
||
### Uniform polar sampling
|
||
|
||

|
||
|
||
|
||
### Biased polar sampling
|
||
|
||

|
||
|
||
|
||
### Lane sampling
|
||
|
||

|
||
|
||
## Probabilistic Road-Map (PRM) planning
|
||
|
||

|
||
|
||
This PRM planner uses Dijkstra method for graph search.
|
||
|
||
In the animation, blue points are sampled points,
|
||
|
||
Cyan crosses means searched points with Dijkstra method,
|
||
|
||
The red line is the final path of PRM.
|
||
|
||
Ref:
|
||
|
||
- [Probabilistic roadmap \- Wikipedia](https://en.wikipedia.org/wiki/Probabilistic_roadmap)
|
||
|
||
|
||
## Voronoi Road-Map planning
|
||
|
||

|
||
|
||
This Voronoi road-map planner uses Dijkstra method for graph search.
|
||
|
||
In the animation, blue points are Voronoi points,
|
||
|
||
Cyan crosses means searched points with Dijkstra method,
|
||
|
||
The red line is the final path of Vornoi Road-Map.
|
||
|
||
Ref:
|
||
|
||
- [Robotic Motion Planning](https://www.cs.cmu.edu/~motionplanning/lecture/Chap5-RoadMap-Methods_howie.pdf)
|
||
|
||
|
||
## Rapidly-Exploring Random Trees (RRT)
|
||
|
||
### Basic RRT
|
||
|
||

|
||
|
||
This script is a simple path planning code with Rapidly-Exploring Random Trees (RRT)
|
||
|
||
Black circles are obstacles, green line is a searched tree, red crosses are start and goal positions.
|
||
|
||
### RRT\*
|
||
|
||

|
||
|
||
This script is a path planning code with RRT\*
|
||
|
||
Black circles are obstacles, green line is a searched tree, red crosses are start and goal positions.
|
||
|
||
Ref:
|
||
|
||
- [Incremental Sampling-based Algorithms for Optimal Motion Planning](https://arxiv.org/abs/1005.0416)
|
||
|
||
- [Sampling-based Algorithms for Optimal Motion Planningj](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.419.5503&rep=rep1&type=pdf)
|
||
|
||
|
||
### RRT with dubins path
|
||
|
||

|
||
|
||
Path planning for a car robot with RRT and dubins path planner.
|
||
|
||
|
||
### RRT\* with dubins path
|
||
|
||

|
||
|
||
Path planning for a car robot with RRT\* and dubins path planner.
|
||
|
||
|
||
### RRT\* with reeds-sheep path
|
||
|
||
)
|
||
|
||
Path planning for a car robot with RRT\* and reeds sheep path planner.
|
||
|
||
### Closed Loop RRT\*
|
||
|
||
A vehicle model based path planning with closed loop RRT\*.
|
||
|
||

|
||
|
||
In this code, pure-pursuit algorithm is used for steering control,
|
||
|
||
PID is used for speed control.
|
||
|
||
Ref:
|
||
|
||
- [Motion Planning in Complex Environments
|
||
using Closed-loop Prediction](http://acl.mit.edu/papers/KuwataGNC08.pdf)
|
||
|
||
- [Real-time Motion Planning with Applications to
|
||
Autonomous Urban Driving](http://acl.mit.edu/papers/KuwataTCST09.pdf)
|
||
|
||
- [[1601.06326] Sampling-based Algorithms for Optimal Motion Planning Using Closed-loop Prediction](https://arxiv.org/abs/1601.06326)
|
||
|
||
## Cubic spline planning
|
||
|
||
A sample code for cubic path planning.
|
||
|
||
This code generates a curvature continuous path based on x-y waypoints with cubic spline.
|
||
|
||
Heading angle of each point can be also calculated analytically.
|
||
|
||

|
||

|
||

|
||
|
||
|
||
## B-Spline planning
|
||
|
||

|
||
|
||
This is a path planning with B-Spline curse.
|
||
|
||
If you input waypoints, it generates a smooth path with B-Spline curve.
|
||
|
||
The final course should be on the first and last waypoints.
|
||
|
||
Ref:
|
||
|
||
- [B\-spline \- Wikipedia](https://en.wikipedia.org/wiki/B-spline)
|
||
|
||
## Bezier path planning
|
||
|
||
A sample code of Bezier path planning.
|
||
|
||
It is based on 4 control points Beier path.
|
||
|
||

|
||
|
||
If you change the offset distance from start and end point,
|
||
|
||
You can get different Beizer course:
|
||
|
||

|
||
|
||
|
||
|
||
Ref:
|
||
|
||
- [Continuous Curvature Path Generation Based on B ́ezier Curves for Autonomous Vehicles](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.294.6438&rep=rep1&type=pdf)
|
||
|
||
## Quintic polynomials planning
|
||
|
||
Motion planning with quintic polynomials.
|
||
|
||

|
||
|
||
It can calculate 2D path, velocity, and acceleration profile based on quintic polynomials.
|
||
|
||
Ref:
|
||
|
||
- [Local Path Planning And Motion Control For Agv In Positioning](http://ieeexplore.ieee.org/document/637936/)
|
||
|
||
|
||
## Dubins path planning
|
||
|
||
A sample code for Dubins path planning.
|
||
|
||
|
||

|
||

|
||

|
||
|
||
Ref:
|
||
|
||
- [Dubins path - Wikipedia](https://en.wikipedia.org/wiki/Dubins_path)
|
||
|
||
## Reeds Shepp planning
|
||
|
||
A sample code with Reeds Shepp path planning.
|
||
|
||

|
||

|
||

|
||
|
||
Ref:
|
||
|
||
- [15.3.2 Reeds\-Shepp Curves](http://planning.cs.uiuc.edu/node822.html)
|
||
|
||
- [optimal paths for a car that goes both forwards and backwards](https://pdfs.semanticscholar.org/932e/c495b1d0018fd59dee12a0bf74434fac7af4.pdf)
|
||
|
||
- [ghliu/pyReedsShepp: Implementation of Reeds Shepp curve\.](https://github.com/ghliu/pyReedsShepp)
|
||
|
||
|
||
## Optimal Trajectory in a Frenet Frame
|
||
|
||

|
||
|
||
This is optimal trajectory generation in a Frenet Frame.
|
||
|
||
The cyan line is the target course and black crosses are obstacles.
|
||
|
||
The red line is predicted path.
|
||
|
||
Ref:
|
||
|
||
- [Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame](https://www.researchgate.net/profile/Moritz_Werling/publication/224156269_Optimal_Trajectory_Generation_for_Dynamic_Street_Scenarios_in_a_Frenet_Frame/links/54f749df0cf210398e9277af.pdf)
|
||
|
||
- [Optimal trajectory generation for dynamic street scenarios in a Frenet Frame](https://www.youtube.com/watch?v=Cj6tAQe7UCY)
|
||
|
||
|
||
|
||
## Mix Integer Optimization based model predictive planning and control
|
||
|
||

|
||
|
||
A model predictive planning and control code with mixed integer programming.
|
||
|
||
It is based on this paper.
|
||
|
||
- [MIXED INTEGER PROGRAMMING FOR MULTI-VEHICLE PATH PLANNING](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.4.2591&rep=rep1&type=pdf)
|
||
|
||
This code uses cvxpy as an optimization modeling tool,
|
||
|
||
- [Welcome to CVXPY 1\.0 — CVXPY 1\.0\.0 documentation](https://cvxgrp.github.io/cvxpy/index.html)
|
||
|
||
Gurobi is used as a solver for mix integer optimization problem.
|
||
|
||
- [Gurobi Optimization \- The State\-of\-the\-Art Mathematical Programming Solver](http://www.gurobi.com/)
|
||
|
||
|
||
# Path tracking
|
||
|
||
## Pure pursuit tracking
|
||
|
||
Path tracking simulation with pure pursuit steering control and PID speed control.
|
||
|
||

|
||
|
||
The red line is a target course, the green cross means the target point for pure pursuit control, the blue line is the tracking.
|
||
|
||
Ref:
|
||
|
||
- [A Survey of Motion Planning and Control Techniques for Self-driving Urban Vehicles](https://arxiv.org/abs/1604.07446)
|
||
|
||
## Stanley control
|
||
|
||
Path tracking simulation with Stanley steering control and PID speed control.
|
||
|
||

|
||
|
||
Ref:
|
||
|
||
- [Stanley: The robot that won the DARPA grand challenge](http://robots.stanford.edu/papers/thrun.stanley05.pdf)
|
||
|
||
- [Automatic Steering Methods for Autonomous Automobile Path Tracking](https://www.ri.cmu.edu/pub_files/2009/2/Automatic_Steering_Methods_for_Autonomous_Automobile_Path_Tracking.pdf)
|
||
|
||
|
||
|
||
## Rear wheel feedback control
|
||
|
||
Path tracking simulation with rear wheel feedback steering control and PID speed control.
|
||
|
||

|
||
|
||
## Linear–quadratic regulator (LQR) steering control
|
||
|
||
Path tracking simulation with LQR steering control and PID speed control.
|
||
|
||

|
||
|
||
## Linear–quadratic regulator (LQR) speed and steering control
|
||
|
||
Path tracking simulation with LQR speed and steering control.
|
||
|
||

|
||
|
||
|
||
## Model predictive speed and steering control
|
||
|
||
Path tracking simulation with iterative linear model predictive speed and steering control.
|
||
|
||
<img src="https://github.com/AtsushiSakai/PythonRobotics/blob/master/PathTracking/model_predictive_speed_and_steer_control/animation.gif" width="640">
|
||
|
||
This code uses cvxpy as an optimization modeling tool,
|
||
|
||
- [Welcome to CVXPY 1\.0 — CVXPY 1\.0\.0 documentation](https://cvxgrp.github.io/cvxpy/index.html)
|
||
|
||
|
||
# License
|
||
|
||
MIT
|
||
|
||
# Author
|
||
|
||
Atsushi Sakai ([@Atsushi_twi](https://twitter.com/Atsushi_twi))
|
||
|
||
|
||
|
||
|
||
|