mirror of
https://github.com/AtsushiSakai/PythonRobotics.git
synced 2026-01-14 16:08:05 -05:00
372 lines
14 KiB
Markdown
372 lines
14 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)
|
||
* [Path Planning](#path-planning)
|
||
* [Dynamic Window Approach](#dynamic-window-approach)
|
||
* [Grid based search](#grid-based-search)
|
||
* [Dijkstra algorithm](#dijkstra-algorithm)
|
||
* [A* algorithm](#a-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)
|
||
* [Bezier path planning](#bezier-path-planning)
|
||
* [Dubins path planning](#dubins-path-planning)
|
||
* [Reeds Shepp planning](#reeds-shepp-planning)
|
||
* [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) control](#linearquadratic-regulator-lqr-control)
|
||
* [License](#license)
|
||
* [Author](#author)
|
||
|
||
# Requirements
|
||
|
||
- Python 3.6.x
|
||
|
||
- numpy
|
||
|
||
- scipy
|
||
|
||
- matplotlib
|
||
|
||
- [pyReedsShepp](https://github.com/ghliu/pyReedsShepp) (Only for reeds sheep path and RRTStarCar_reeds_sheep)
|
||
|
||
- [cvxpy](https://cvxgrp.github.io/cvxpy/index.html) (Only for mix integer optimization based model predictive planning and control)
|
||
|
||
# How to use
|
||
|
||
1. Install the required libraries.
|
||
|
||
2. Clone this repo.
|
||
|
||
3. Execute python script in each dir.
|
||
|
||
4. Add star to this repo if you like it :smiley:.
|
||
|
||
|
||
# Path Planning
|
||
|
||
Path planning algorithm.
|
||
|
||
## 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.
|
||
|
||
|
||
## Model Predictive Trajectory Generator
|
||
|
||
This script is a path planning code with model predictive trajectory generator.
|
||
|
||
### 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
|
||
|
||
Rapidly Randamized Tree Path planning sample.
|
||
|
||

|
||
|
||
This script is a simple path planning code with Rapidly-Exploring Random Trees (RRT)
|
||
|
||
### RRT\*
|
||
|
||

|
||
|
||
This script is a path planning code with RRT \*
|
||
|
||
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 sample code with closed loop RRT\*.
|
||
|
||

|
||

|
||

|
||
|
||
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 continious path based on x-y waypoints with cubic spline.
|
||
|
||
Heading angle of each point can be also calculated analytically.
|
||
|
||

|
||

|
||

|
||
|
||
## 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)
|
||
|
||
|
||
## 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)
|
||
|
||
|
||
|
||
## 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 used cvxpy as optimization modeling tool,
|
||
|
||
- [Welcome to CVXPY 1\.0 — CVXPY 1\.0\.0 documentation](https://cvxgrp.github.io/cvxpy/index.html)
|
||
|
||
and 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
|
||
|
||
Path tracking algorithm samples.
|
||
|
||
## Pure pursuit tracking
|
||
|
||
Path tracking simulation with pure pursuit steering control and PID speed control.
|
||
|
||

|
||
|
||
## 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) control
|
||
|
||
Path tracking simulation with LQR steering control and PID speed control.
|
||
|
||

|
||
|
||
|
||
# License
|
||
|
||
MIT
|
||
|
||
# Author
|
||
|
||
Atsushi Sakai ([@Atsushi_twi](https://twitter.com/Atsushi_twi))
|
||
|