ai-winter / python_motion_planning

Motion planning and Navigation of AGV/AMR:python implementation of Dijkstra, A*, JPS, D*, LPA*, D* Lite, (Lazy)Theta*, RRT, RRT*, RRT-Connect, Informed RRT*, ACO, Voronoi, PID, DWA, APF, LQR, MPC, RPP, DDPG, Bezier, Dubins etc.
GNU General Public License v3.0
329 stars 47 forks source link
a-star ant-colony-optimization artificial-potential-field bezier-curve d-star d-star-lite dijkstra dubins-curve informed-rrt-star jump-point-search lazy-theta-star lpa-star model-predictive-control motion-planning python rrt rrt-connect rrt-star theta-star voronoi

Introduction

Motion planning plans the state sequence of the robot without conflict between the start and goal.

Motion planning mainly includes Path planning and Trajectory planning.

This repository provides the implementations of common Motion planning algorithms. Your stars and forks are welcome. Maintaining this repository requires a huge amount of work. Therefore, you are also welcome to contribute to this repository by opening issues, submitting pull requests or joining our development team.

The theory analysis can be found at motion-planning.

We also provide ROS C++ version and Matlab version.

Quick Start

The file structure is shown below

python_motion_planning
├─assets
├─docs
├─examples
└─python_motion_planning
    ├─global_planner
    |   ├─graph_search
    |   ├─sample_search
    |   └─evolutionary_search
    ├─local_planner
    ├─curve_generation
    └─utils
        ├─agent
        ├─environment
        ├─helper
        ├─planner
        └─plot

The code was tested in python=3.10. To install other dependencies, please run the following command in shell.

pip install -r requirements.txt

To start simulation, open the folder example and select the algorithm, for example

if __name__ == '__main__':
    '''
    path searcher constructor
    '''
    search_factory = SearchFactory()

    '''
    graph search
    '''
    # build environment
    start = (5, 5)
    goal = (45, 25)
    env = Grid(51, 31)

    # creat planner
    planner = search_factory("a_star", start=start, goal=goal, env=env)
    # animation
    planner.run()

Version

Global Planner

Planner Version Animation
GBFS Status gbfs_python.png
Dijkstra Status dijkstra_python.png
**A*** Status a_star_python.png
JPS Status jps_python.png
**D*** Status d_star_python.png
**LPA*** Status lpa_star_python.png
D* Lite Status d_star_lite_python.png
Theta* Status theta_star_python.png
Lazy Theta* Status lazy_theta_star_python.png
S-Theta* Status s_theta_star_python.png
Anya Status Status
Voronoi Status voronoi_python.png
RRT Status rrt_python.png
**RRT*** Status rrt_star_python.png
Informed RRT Status informed_rrt_python.png
RRT-Connect Status rrt_connect_python.png
ACO Status aco_python.png
GA Status Status
PSO Status pso_python.png pso_python_cost.png

Local Planner

Planner Version Animation
PID Status pid_python.svg
APF Status apf_python.svg
DWA Status dwa_python.svg
RPP Status rpp_python.svg
LQR Status lqr_python.svg
TEB Status Status
MPC Status mpc_python.svg
MPPI Status Status
Lattice Status Status
DDPG Status ddpg_python.svg

Curve Generation

Planner Version Animation
Polynomia Status polynomial_curve_python.gif
Bezier Status bezier_curve_python.png
Cubic Spline Status cubic_spline_python.png
BSpline Status bspline_curve_python.png
Dubins Status dubins_curve_python.png
Reeds-Shepp Status reeds_shepp_python.png
Fem-Pos Smoother Status fem_pos_smoother_python.png

Papers

Global Planning

Local Planning

Curve Generation

Acknowledgment