mirror of
https://github.com/AtsushiSakai/PythonRobotics.git
synced 2026-01-14 12:18:01 -05:00
273 lines
12 KiB
Markdown
273 lines
12 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 sample codes for robotics algorithm.
|
||
|
||
# Table of Contents
|
||
|
||
* [Requirements](#requirements)
|
||
* [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)
|
||
* [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)
|
||
* [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)
|
||
* [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)
|
||
|
||
# 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
|
||
|
||

|
||
|
||
see:
|
||
- [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
|
||
|
||

|
||
|
||

|
||
|
||
## 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 \*
|
||
|
||
- [Incremental Sampling-based Algorithms for Optimal Motion Planning](https://arxiv.org/abs/1005.0416)
|
||
|
||
|
||
### 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\*.
|
||
|
||

|
||

|
||

|
||
|
||
see:
|
||
|
||
- [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.
|
||
|
||

|
||

|
||

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

|
||

|
||

|
||
|
||
## Reeds Shepp planning
|
||
|
||
A sample code with Reeds Shepp path planning.
|
||
|
||

|
||

|
||

|
||
|
||
## 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.
|
||
|
||

|
||

|
||

|
||
|
||
|
||
## 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))
|
||
|