diff --git a/docs/index.rst b/docs/index.rst index cd112c86..bf775bf4 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -36,7 +36,10 @@ See this paper for more details: modules/localization modules/mapping modules/slam - + modules/path_planning + modules/path_tracking + modules/arm_navigation + modules/aerial_navigation Indices and tables diff --git a/docs/modules/aerial_navigation.rst b/docs/modules/aerial_navigation.rst new file mode 100644 index 00000000..2f15289b --- /dev/null +++ b/docs/modules/aerial_navigation.rst @@ -0,0 +1,13 @@ +.. _aerial_navigation: + +Aerial Navigation +================= + +Drone 3d trajectory following +----------------------------- + +This is a 3d trajectory following simulation for a quadrotor. + +|3| + +.. |3| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/AerialNavigation/drone_3d_trajectory_following/animation.gif diff --git a/docs/modules/arm_navigation.rst b/docs/modules/arm_navigation.rst new file mode 100644 index 00000000..a3e13dce --- /dev/null +++ b/docs/modules/arm_navigation.rst @@ -0,0 +1,33 @@ +.. _arm_navigation: + +Arm Navigation +============== + +Two joint arm to point control +------------------------------ + +Two joint arm to a point control simulation. + +This is a interactive simulation. + +You can set the goal position of the end effector with left-click on the +ploting area. + +|3| + +N joint arm to point control +---------------------------- + +N joint arm to a point control simulation. + +This is a interactive simulation. + +You can set the goal position of the end effector with left-click on the +ploting area. + +|4| + +In this simulation N = 10, however, you can change it. + +.. |3| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/ArmNavigation/two_joint_arm_to_point_control/animation.gif +.. |4| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/ArmNavigation/n_joint_arm_to_point_control/animation.gif diff --git a/docs/modules/path_planning.rst b/docs/modules/path_planning.rst new file mode 100644 index 00000000..dcec3e39 --- /dev/null +++ b/docs/modules/path_planning.rst @@ -0,0 +1,456 @@ +.. _path_planning: + +Path Planning +============= + +Dynamic Window Approach +----------------------- + +This is a 2D navigation sample code with Dynamic Window Approach. + +- `The Dynamic Window Approach to Collision + Avoidance `__ + +|DWA| + +Grid based search +----------------- + +Dijkstra algorithm +~~~~~~~~~~~~~~~~~~ + +This is a 2D grid based shortest path planning with Dijkstra's +algorithm. + +|Dijkstra| + +In the animation, cyan points are searched nodes. + +.. _a*-algorithm: + +A\* algorithm +~~~~~~~~~~~~~ + +This is a 2D grid based shortest path planning with A star algorithm. + +|astar| + +In the animation, cyan points are searched nodes. + +Its heuristic is 2D Euclid distance. + +Potential Field algorithm +~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is a 2D grid based path planning with Potential Field algorithm. + +|PotentialField| + +In the animation, the blue heat map shows potential value on each grid. + +Ref: + +- `Robotic Motion Planning:Potential + Functions `__ + +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 +~~~~~~~~~~~~~~~~~~~~~~~~ + +|4| + +Lookup table generation sample +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +|5| + +Ref: + +- `Optimal rough terrain trajectory generation for wheeled mobile + robots `__ + +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. + +Ref: + +- `Optimal rough terrain trajectory generation for wheeled mobile + robots `__ + +- `State Space Sampling of Feasible Motions for High-Performance Mobile + Robot Navigation in Complex + Environments `__ + +Uniform polar sampling +~~~~~~~~~~~~~~~~~~~~~~ + +|6| + +Biased polar sampling +~~~~~~~~~~~~~~~~~~~~~ + +|7| + +Lane sampling +~~~~~~~~~~~~~ + +|8| + +.. _probabilistic-road-map-(prm)-planning: + +Probabilistic Road-Map (PRM) planning +------------------------------------- + +|PRM| + +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 `__ + +   + +Voronoi Road-Map planning +------------------------- + +|VRM| + +This Voronoi road-map planner uses Dijkstra method for graph search. + +In the animation, blue points are Voronoi points, + +Cyan crosses mean searched points with Dijkstra method, + +The red line is the final path of Vornoi Road-Map. + +Ref: + +- `Robotic Motion + Planning `__ + +.. _rapidly-exploring-random-trees-(rrt): + +Rapidly-Exploring Random Trees (RRT) +------------------------------------ + +Basic RRT +~~~~~~~~~ + +|9| + +This 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*: + +RRT\* +~~~~~ + +|10| + +This 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 `__ + +- `Sampling-based Algorithms for Optimal Motion + Planning `__ + +RRT with dubins path +~~~~~~~~~~~~~~~~~~~~ + +|PythonRobotics| + +Path planning for a car robot with RRT and dubins path planner. + +.. _rrt*-with-dubins-path: + +RRT\* with dubins path +~~~~~~~~~~~~~~~~~~~~~~ + +|AtsushiSakai/PythonRobotics| + +Path planning for a car robot with RRT\* and dubins path planner. + +.. _rrt*-with-reeds-sheep-path: + +RRT\* with reeds-sheep path +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +|11| + +Path planning for a car robot with RRT\* and reeds sheep path planner. + +.. _informed-rrt*: + +Informed RRT\* +~~~~~~~~~~~~~~ + +|irrt| + +This is a path planning code with Informed RRT*. + +The cyan ellipse is the heuristic sampling domain of Informed RRT*. + +Ref: + +- `Informed RRT\*: Optimal Sampling-based Path Planning Focused via + Direct Sampling of an Admissible Ellipsoidal + Heuristic `__ + +.. _batch-informed-rrt*: + +Batch Informed RRT\* +~~~~~~~~~~~~~~~~~~~~ + +|irrt2| + +This is a path planning code with Batch Informed RRT*. + +Ref: + +- `Batch Informed Trees (BIT*): Sampling-based Optimal Planning via the + Heuristically Guided Search of Implicit Random Geometric + Graphs `__ + +.. _closed-loop-rrt*: + +Closed Loop RRT\* +~~~~~~~~~~~~~~~~~ + +A vehicle model based path planning with closed loop RRT*. + +|CLRRT| + +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 `__ + +- `Real-time Motion Planning with Applications to Autonomous Urban + Driving `__ + +- `[1601.06326] Sampling-based Algorithms for Optimal Motion Planning + Using Closed-loop Prediction `__ + +.. _lqr-rrt*: + +LQR-RRT\* +~~~~~~~~~ + +This is a path planning simulation with LQR-RRT*. + +A double integrator motion model is used for LQR local planner. + +|LQRRRT| + +Ref: + +- `LQR-RRT\*: Optimal Sampling-Based Motion Planning with Automatically + Derived Extension + Heuristics `__ + +- `MahanFathi/LQR-RRTstar: LQR-RRT\* method is used for random motion + planning of a simple pendulum in its phase + plot `__ + +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. + +|12| +|13| +|14| + +B-Spline planning +----------------- + +|B-Spline| + +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 `__ + +.. _eta^3-spline-path-planning: + +Eta^3 Spline path planning +-------------------------- + +|eta3| + +This is a path planning with Eta^3 spline. + +Ref: + +- `\\eta^3-Splines for the Smooth Path Generation of Wheeled Mobile + Robots `__ + +Bezier path planning +-------------------- + +A sample code of Bezier path planning. + +It is based on 4 control points Beier path. + +|Bezier1| + +If you change the offset distance from start and end point, + +You can get different Beizer course: + +|Bezier2| + +Ref: + +- `Continuous Curvature Path Generation Based on Bezier Curves for + Autonomous + Vehicles `__ + +Quintic polynomials planning +---------------------------- + +Motion planning with quintic polynomials. + +|2| + +It can calculate 2D path, velocity, and acceleration profile based on +quintic polynomials. + +Ref: + +- `Local Path Planning And Motion Control For Agv In + Positioning `__ + +Dubins path planning +-------------------- + +A sample code for Dubins path planning. + +|dubins| + +Ref: + +- `Dubins path - + Wikipedia `__ + +Reeds Shepp planning +-------------------- + +A sample code with Reeds Shepp path planning. + +|RSPlanning| + +Ref: + +- `15.3.2 Reeds-Shepp + Curves `__ + +- `optimal paths for a car that goes both forwards and + backwards `__ + +- `ghliu/pyReedsShepp: Implementation of Reeds Shepp + curve. `__ + +LQR based path planning +----------------------- + +A sample code using LQR based path planning for double integrator model. + +|RSPlanning2| + +Optimal Trajectory in a Frenet Frame +------------------------------------ + +|15| + +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 `__ + +- `Optimal trajectory generation for dynamic street scenarios in a + Frenet Frame `__ + +.. |DWA| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/DynamicWindowApproach/animation.gif +.. |Dijkstra| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/Dijkstra/animation.gif +.. |astar| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/AStar/animation.gif +.. |PotentialField| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/PotentialFieldPlanning/animation.gif +.. |4| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/ModelPredictiveTrajectoryGenerator/kn05animation.gif +.. |5| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/ModelPredictiveTrajectoryGenerator/lookuptable.png?raw=True +.. |6| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/StateLatticePlanner/UniformPolarSampling.gif +.. |7| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/StateLatticePlanner/BiasedPolarSampling.gif +.. |8| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/StateLatticePlanner/LaneSampling.gif +.. |PRM| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/ProbabilisticRoadMap/animation.gif +.. |VRM| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/VoronoiRoadMap/animation.gif +.. |9| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/RRT/animation.gif +.. |10| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/RRTstar/animation.gif +.. |PythonRobotics| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/RRTDubins/animation.gif +.. |AtsushiSakai/PythonRobotics| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/RRTStarDubins/animation.gif +.. |11| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/RRTStarReedsShepp/animation.gif +.. |irrt| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/InformedRRTStar/animation.gif +.. |irrt2| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/BatchInformedRRTStar/animation.gif +.. |CLRRT| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/ClosedLoopRRTStar/animation.gif +.. |LQRRRT| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/LQRRRTStar/animation.gif +.. |12| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/CubicSpline/Figure_1.png?raw=True +.. |13| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/CubicSpline/Figure_2.png?raw=True +.. |14| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/CubicSpline/Figure_3.png?raw=True +.. |B-Spline| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/BSplinePath/Figure_1.png?raw=True +.. |eta3| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/Eta3SplinePath/animation.gif?raw=True +.. |Bezier1| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/BezierPath/Figure_1.png?raw=True +.. |Bezier2| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/BezierPath/Figure_2.png?raw=True +.. |2| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/QuinticPolynomialsPlanner/animation.gif +.. |dubins| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/DubinsPath/animation.gif?raw=True +.. |RSPlanning| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/ReedsSheppPath/animation.gif?raw=true +.. |RSPlanning2| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/LQRPlanner/animation.gif?raw=true +.. |15| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathPlanning/FrenetOptimalTrajectory/animation.gif diff --git a/docs/modules/path_tracking.rst b/docs/modules/path_tracking.rst new file mode 100644 index 00000000..24e6c9c5 --- /dev/null +++ b/docs/modules/path_tracking.rst @@ -0,0 +1,112 @@ +.. _path_tracking: + +Path tracking +============= + +move to a pose control +---------------------- + +This is a simulation of moving to a pose control + +|2| + +Ref: + +- `P. I. Corke, "Robotics, Vision and Control" \| SpringerLink + p102 `__ + +Pure pursuit tracking +--------------------- + +Path tracking simulation with pure pursuit steering control and PID +speed control. + +|3| + +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 `__ + +Stanley control +--------------- + +Path tracking simulation with Stanley steering control and PID speed +control. + +|4| + +Ref: + +- `Stanley: The robot that won the DARPA grand + challenge `__ + +- `Automatic Steering Methods for Autonomous Automobile Path + Tracking `__ + +Rear wheel feedback control +--------------------------- + +Path tracking simulation with rear wheel feedback steering control and +PID speed control. + +|5| + +Ref: + +- `A Survey of Motion Planning and Control Techniques for Self-driving + Urban Vehicles `__ + +.. _linearquadratic-regulator-(lqr)-steering-control: + +Linear–quadratic regulator (LQR) steering control +------------------------------------------------- + +Path tracking simulation with LQR steering control and PID speed +control. + +|6| + +Ref: + +- `ApolloAuto/apollo: An open autonomous driving + platform `__ + +.. _linearquadratic-regulator-(lqr)-speed-and-steering-control: + +Linear–quadratic regulator (LQR) speed and steering control +----------------------------------------------------------- + +Path tracking simulation with LQR speed and steering control. + +|7| + +Ref: + +- `Towards fully autonomous driving: Systems and algorithms - IEEE + Conference + Publication `__ + +Model predictive speed and steering control +------------------------------------------- + +Path tracking simulation with iterative linear model predictive speed +and steering control. + +.. raw:: html + + + +Ref: + +- `notebook `__ + +.. |2| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/move_to_pose/animation.gif +.. |3| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/pure_pursuit/animation.gif +.. |4| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/stanley_controller/animation.gif +.. |5| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/rear_wheel_feedback/animation.gif +.. |6| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/lqr_steer_control/animation.gif +.. |7| image:: https://github.com/AtsushiSakai/PythonRobotics/raw/master/PathTracking/lqr_speed_steer_control/animation.gif