From d74a91e062732ed9bc9e85fe708cd615bfc0bc7a Mon Sep 17 00:00:00 2001 From: Atsushi Sakai Date: Sat, 7 May 2022 15:21:03 +0900 Subject: [PATCH] Re-architecture document structure (#669) * Rearchitecture document structure * Rearchitecture document structure * Rearchitecture document structure * Rearchitecture document structure * Rearchitecture document structure * Rearchitecture document structure * Rearchitecture document structure --- docs/index_main.rst | 2 +- .../aerial_navigation_main.rst | 8 ++- ...=> drone_3d_trajectory_following_main.rst} | 0 ...ng.rst => rocket_powered_landing_main.rst} | 0 ...s_2.rst => Kalmanfilter_basics_2_main.rst} | 0 ...asics.rst => Kalmanfilter_basics_main.rst} | 0 docs/modules/appendix/appendix_main.rst | 7 ++- .../arm_navigation/arm_navigation_main.rst | 28 +++-------- .../n_joint_arm_to_point_control_main.rst | 13 +++++ ...obstacle_avoidance_arm_navigation_main.rst | 6 +++ ...ink_ik.rst => planar_two_link_ik_main.rst} | 0 docs/modules/bipedal/bipedal_main.rst | 6 ++- ...l_planner.rst => bipedal_planner_main.rst} | 0 docs/modules/control/control_main.rst | 7 ++- ...rst => inverted_pendulum_control_main.rst} | 2 +- ...ol.rst => move_to_a_pose_control_main.rst} | 0 ...amble_kalman_filter_localization_main.rst} | 0 ...ended_kalman_filter_localization_main.rst} | 2 +- ...=> histogram_filter_localization_main.rst} | 10 ++-- .../localization/localization_main.rst | 15 +++--- ... => particle_filter_localization_main.rst} | 2 +- ...ented_kalman_filter_localization_main.rst} | 0 ...le_fitting.rst => circle_fitting_main.rst} | 0 ...rid_map.rst => gaussian_grid_map_main.rst} | 0 ...rst => k_means_object_clustering_main.rst} | 0 ...st => lidar_to_grid_map_tutorial_main.rst} | 12 ++--- docs/modules/mapping/mapping_main.rst | 15 +++--- ..._map.rst => ray_casting_grid_map_main.rst} | 0 ...fitting.rst => rectangle_fitting_main.rst} | 0 .../{bezier_path.rst => bezier_path_main.rst} | 4 +- ...bspline_path.rst => bspline_path_main.rst} | 2 +- .../{bugplanner.rst => bugplanner_main.rst} | 0 ...othoid_path.rst => clothoid_path_main.rst} | 0 ...verage_path.rst => coverage_path_main.rst} | 0 ...cubic_spline.rst => cubic_spline_main.rst} | 6 +-- .../{dubins_path.rst => dubins_path_main.rst} | 4 +- ...h.rst => dynamic_window_approach_main.rst} | 2 + .../{eta3_spline.rst => eta3_spline_main.rst} | 0 ...me_path.rst => frenet_frame_path_main.rst} | 0 ...e_search.rst => grid_base_search_main.rst} | 0 .../{hybridastar.rst => hybridastar_main.rst} | 0 .../{lqr_path.rst => lqr_path_main.rst} | 0 ..._predictive_trajectory_generator_main.rst} | 2 +- .../path_planning/path_planning_main.rst | 46 ++++++++++-------- .../{prm_planner.rst => prm_planner_main.rst} | 0 ...t => quintic_polynomials_planner_main.rst} | 0 ...epp_path.rst => reeds_shepp_path_main.rst} | 0 .../rrt/{rrt.rst => rrt_main.rst} | 2 +- docs/modules/path_planning/rrt/rrt_star.rst | 2 +- ...ner.rst => state_lattice_planner_main.rst} | 0 ...t => visibility_road_map_planner_main.rst} | 8 +-- .../{vrm_planner.rst => vrm_planner_main.rst} | 0 .../{cgmres_nmpc.rst => cgmres_nmpc_main.rst} | 8 +-- ...> lqr_speed_and_steering_control_main.rst} | 0 ...trol.rst => lqr_steering_control_main.rst} | 0 ...ctive_speed_and_steering_control_main.rst} | 0 .../path_tracking/path_tracking_main.rst | 17 ++++--- ...ing.rst => pure_pursuit_tracking_main.rst} | 0 ...t => rear_wheel_feedback_control_main.rst} | 0 ...y_control.rst => stanley_control_main.rst} | 0 .../{FastSLAM1.rst => FastSLAM1_main.rst} | 12 ++--- .../{FastSLAM2.rst => FastSLAM2_main.rst} | 0 .../{ekf_slam.rst => ekf_slam_main.rst} | 2 +- .../slam/graph_slam/graphSLAM_SE2_example.rst | 14 +++--- .../Graph_SLAM_optimization.gif | Bin 0 -> 114966 bytes .../modules/slam/graph_slam/graphSLAM_doc.rst | 12 ++--- .../graphSLAM_doc_11_1.png | Bin 0 -> 3931 bytes .../graphSLAM_doc_11_2.png | Bin 0 -> 3931 bytes .../graphSLAM_doc_files/graphSLAM_doc_2_0.png | Bin 0 -> 7764 bytes .../graphSLAM_doc_files/graphSLAM_doc_2_2.png | Bin 0 -> 7924 bytes .../graphSLAM_doc_files/graphSLAM_doc_4_0.png | Bin 0 -> 9308 bytes .../graphSLAM_doc_files/graphSLAM_doc_9_1.png | Bin 0 -> 8521 bytes .../slam/graph_slam/graphSLAM_formulation.rst | 2 +- .../{graph_slam.rst => graph_slam_main.rst} | 6 +-- ...iterative_closest_point_matching_main.rst} | 0 docs/modules/slam/slam_main.rst | 13 +++-- 76 files changed, 167 insertions(+), 132 deletions(-) rename docs/modules/aerial_navigation/drone_3d_trajectory_following/{drone_3d_trajectory_following.rst => drone_3d_trajectory_following_main.rst} (100%) rename docs/modules/aerial_navigation/rocket_powered_landing/{rocket_powered_landing.rst => rocket_powered_landing_main.rst} (100%) rename docs/modules/appendix/{Kalmanfilter_basics_2.rst => Kalmanfilter_basics_2_main.rst} (100%) rename docs/modules/appendix/{Kalmanfilter_basics.rst => Kalmanfilter_basics_main.rst} (100%) create mode 100644 docs/modules/arm_navigation/n_joint_arm_to_point_control_main.rst create mode 100644 docs/modules/arm_navigation/obstacle_avoidance_arm_navigation_main.rst rename docs/modules/arm_navigation/{planar_two_link_ik.rst => planar_two_link_ik_main.rst} (100%) rename docs/modules/bipedal/bipedal_planner/{bipedal_planner.rst => bipedal_planner_main.rst} (100%) rename docs/modules/control/inverted_pendulum_control/{inverted_pendulum_control.rst => inverted_pendulum_control_main.rst} (98%) rename docs/modules/control/move_to_a_pose_control/{move_to_a_pose_control.rst => move_to_a_pose_control_main.rst} (100%) rename docs/modules/localization/ensamble_kalman_filter_localization_files/{ensamble_kalman_filter_localization.rst => ensamble_kalman_filter_localization_main.rst} (100%) rename docs/modules/localization/extended_kalman_filter_localization_files/{extended_kalman_filter_localization.rst => extended_kalman_filter_localization_main.rst} (98%) rename docs/modules/localization/histogram_filter_localization/{histogram_filter_localization.rst => histogram_filter_localization_main.rst} (94%) rename docs/modules/localization/particle_filter_localization/{particle_filter_localization.rst => particle_filter_localization_main.rst} (94%) rename docs/modules/localization/unscented_kalman_filter_localization/{unscented_kalman_filter_localization.rst => unscented_kalman_filter_localization_main.rst} (100%) rename docs/modules/mapping/circle_fitting/{circle_fitting.rst => circle_fitting_main.rst} (100%) rename docs/modules/mapping/gaussian_grid_map/{gaussian_grid_map.rst => gaussian_grid_map_main.rst} (100%) rename docs/modules/mapping/k_means_object_clustering/{k_means_object_clustering.rst => k_means_object_clustering_main.rst} (100%) rename docs/modules/mapping/lidar_to_grid_map_tutorial/{lidar_to_grid_map_tutorial.rst => lidar_to_grid_map_tutorial_main.rst} (92%) rename docs/modules/mapping/ray_casting_grid_map/{ray_casting_grid_map.rst => ray_casting_grid_map_main.rst} (100%) rename docs/modules/mapping/rectangle_fitting/{rectangle_fitting.rst => rectangle_fitting_main.rst} (100%) rename docs/modules/path_planning/bezier_path/{bezier_path.rst => bezier_path_main.rst} (85%) rename docs/modules/path_planning/bspline_path/{bspline_path.rst => bspline_path_main.rst} (88%) rename docs/modules/path_planning/bugplanner/{bugplanner.rst => bugplanner_main.rst} (100%) rename docs/modules/path_planning/clothoid_path/{clothoid_path.rst => clothoid_path_main.rst} (100%) rename docs/modules/path_planning/coverage_path/{coverage_path.rst => coverage_path_main.rst} (100%) rename docs/modules/path_planning/cubic_spline/{cubic_spline.rst => cubic_spline_main.rst} (68%) rename docs/modules/path_planning/dubins_path/{dubins_path.rst => dubins_path_main.rst} (96%) rename docs/modules/path_planning/dynamic_window_approach/{dynamic_window_approach.rst => dynamic_window_approach_main.rst} (92%) rename docs/modules/path_planning/eta3_spline/{eta3_spline.rst => eta3_spline_main.rst} (100%) rename docs/modules/path_planning/frenet_frame_path/{frenet_frame_path.rst => frenet_frame_path_main.rst} (100%) rename docs/modules/path_planning/grid_base_search/{grid_base_search.rst => grid_base_search_main.rst} (100%) rename docs/modules/path_planning/hybridastar/{hybridastar.rst => hybridastar_main.rst} (100%) rename docs/modules/path_planning/lqr_path/{lqr_path.rst => lqr_path_main.rst} (100%) rename docs/modules/path_planning/model_predictive_trajectory_generator/{model_predictive_trajectory_generator.rst => model_predictive_trajectory_generator_main.rst} (90%) rename docs/modules/path_planning/prm_planner/{prm_planner.rst => prm_planner_main.rst} (100%) rename docs/modules/path_planning/quintic_polynomials_planner/{quintic_polynomials_planner.rst => quintic_polynomials_planner_main.rst} (100%) rename docs/modules/path_planning/reeds_shepp_path/{reeds_shepp_path.rst => reeds_shepp_path_main.rst} (100%) rename docs/modules/path_planning/rrt/{rrt.rst => rrt_main.rst} (99%) rename docs/modules/path_planning/state_lattice_planner/{state_lattice_planner.rst => state_lattice_planner_main.rst} (100%) rename docs/modules/path_planning/visibility_road_map_planner/{visibility_road_map_planner.rst => visibility_road_map_planner_main.rst} (91%) rename docs/modules/path_planning/vrm_planner/{vrm_planner.rst => vrm_planner_main.rst} (100%) rename docs/modules/path_tracking/cgmres_nmpc/{cgmres_nmpc.rst => cgmres_nmpc_main.rst} (92%) rename docs/modules/path_tracking/lqr_speed_and_steering_control/{lqr_speed_and_steering_control.rst => lqr_speed_and_steering_control_main.rst} (100%) rename docs/modules/path_tracking/lqr_steering_control/{lqr_steering_control.rst => lqr_steering_control_main.rst} (100%) rename docs/modules/path_tracking/model_predictive_speed_and_steering_control/{model_predictive_speed_and_steering_control.rst => model_predictive_speed_and_steering_control_main.rst} (100%) rename docs/modules/path_tracking/pure_pursuit_tracking/{pure_pursuit_tracking.rst => pure_pursuit_tracking_main.rst} (100%) rename docs/modules/path_tracking/rear_wheel_feedback_control/{rear_wheel_feedback_control.rst => rear_wheel_feedback_control_main.rst} (100%) rename docs/modules/path_tracking/stanley_control/{stanley_control.rst => stanley_control_main.rst} (100%) rename docs/modules/slam/FastSLAM1/{FastSLAM1.rst => FastSLAM1_main.rst} (98%) rename docs/modules/slam/FastSLAM2/{FastSLAM2.rst => FastSLAM2_main.rst} (100%) rename docs/modules/slam/ekf_slam/{ekf_slam.rst => ekf_slam_main.rst} (99%) create mode 100644 docs/modules/slam/graph_slam/graphSLAM_SE2_example_files/Graph_SLAM_optimization.gif create mode 100644 docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_11_1.png create mode 100644 docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_11_2.png create mode 100644 docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_2_0.png create mode 100644 docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_2_2.png create mode 100644 docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_4_0.png create mode 100644 docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_9_1.png rename docs/modules/slam/graph_slam/{graph_slam.rst => graph_slam_main.rst} (78%) rename docs/modules/slam/iterative_closest_point_matching/{iterative_closest_point_matching.rst => iterative_closest_point_matching_main.rst} (100%) diff --git a/docs/index_main.rst b/docs/index_main.rst index 79980c2b..15175928 100644 --- a/docs/index_main.rst +++ b/docs/index_main.rst @@ -31,7 +31,7 @@ See this paper for more details: .. toctree:: :maxdepth: 2 - :caption: Guide + :caption: Contents getting_started modules/introduction diff --git a/docs/modules/aerial_navigation/aerial_navigation_main.rst b/docs/modules/aerial_navigation/aerial_navigation_main.rst index ea6c4c8e..b2ccb071 100644 --- a/docs/modules/aerial_navigation/aerial_navigation_main.rst +++ b/docs/modules/aerial_navigation/aerial_navigation_main.rst @@ -3,6 +3,10 @@ Aerial Navigation ================= -.. include:: drone_3d_trajectory_following/drone_3d_trajectory_following.rst -.. include:: rocket_powered_landing/rocket_powered_landing.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents + + drone_3d_trajectory_following/drone_3d_trajectory_following + rocket_powered_landing/rocket_powered_landing diff --git a/docs/modules/aerial_navigation/drone_3d_trajectory_following/drone_3d_trajectory_following.rst b/docs/modules/aerial_navigation/drone_3d_trajectory_following/drone_3d_trajectory_following_main.rst similarity index 100% rename from docs/modules/aerial_navigation/drone_3d_trajectory_following/drone_3d_trajectory_following.rst rename to docs/modules/aerial_navigation/drone_3d_trajectory_following/drone_3d_trajectory_following_main.rst diff --git a/docs/modules/aerial_navigation/rocket_powered_landing/rocket_powered_landing.rst b/docs/modules/aerial_navigation/rocket_powered_landing/rocket_powered_landing_main.rst similarity index 100% rename from docs/modules/aerial_navigation/rocket_powered_landing/rocket_powered_landing.rst rename to docs/modules/aerial_navigation/rocket_powered_landing/rocket_powered_landing_main.rst diff --git a/docs/modules/appendix/Kalmanfilter_basics_2.rst b/docs/modules/appendix/Kalmanfilter_basics_2_main.rst similarity index 100% rename from docs/modules/appendix/Kalmanfilter_basics_2.rst rename to docs/modules/appendix/Kalmanfilter_basics_2_main.rst diff --git a/docs/modules/appendix/Kalmanfilter_basics.rst b/docs/modules/appendix/Kalmanfilter_basics_main.rst similarity index 100% rename from docs/modules/appendix/Kalmanfilter_basics.rst rename to docs/modules/appendix/Kalmanfilter_basics_main.rst diff --git a/docs/modules/appendix/appendix_main.rst b/docs/modules/appendix/appendix_main.rst index 8840603b..8a29d846 100644 --- a/docs/modules/appendix/appendix_main.rst +++ b/docs/modules/appendix/appendix_main.rst @@ -3,7 +3,10 @@ Appendix ============== -.. include:: Kalmanfilter_basics.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents -.. include:: Kalmanfilter_basics_2.rst + Kalmanfilter_basics + Kalmanfilter_basics_2 diff --git a/docs/modules/arm_navigation/arm_navigation_main.rst b/docs/modules/arm_navigation/arm_navigation_main.rst index 4399ae13..bbbc872c 100644 --- a/docs/modules/arm_navigation/arm_navigation_main.rst +++ b/docs/modules/arm_navigation/arm_navigation_main.rst @@ -3,26 +3,10 @@ Arm Navigation ============== -.. include:: planar_two_link_ik.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents - -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 -plotting area. - -.. image:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/ArmNavigation/n_joint_arm_to_point_control/animation.gif - -In this simulation N = 10, however, you can change it. - -Arm navigation with obstacle avoidance --------------------------------------- - -Arm navigation with obstacle avoidance simulation. - -.. image:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/ArmNavigation/arm_obstacle_navigation/animation.gif + planar_two_link_ik + n_joint_arm_to_point_control + obstacle_avoidance_arm_navigation diff --git a/docs/modules/arm_navigation/n_joint_arm_to_point_control_main.rst b/docs/modules/arm_navigation/n_joint_arm_to_point_control_main.rst new file mode 100644 index 00000000..cc6279f6 --- /dev/null +++ b/docs/modules/arm_navigation/n_joint_arm_to_point_control_main.rst @@ -0,0 +1,13 @@ +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 +plotting area. + +.. image:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/ArmNavigation/n_joint_arm_to_point_control/animation.gif + +In this simulation N = 10, however, you can change it. diff --git a/docs/modules/arm_navigation/obstacle_avoidance_arm_navigation_main.rst b/docs/modules/arm_navigation/obstacle_avoidance_arm_navigation_main.rst new file mode 100644 index 00000000..899a64a5 --- /dev/null +++ b/docs/modules/arm_navigation/obstacle_avoidance_arm_navigation_main.rst @@ -0,0 +1,6 @@ +Arm navigation with obstacle avoidance +-------------------------------------- + +Arm navigation with obstacle avoidance simulation. + +.. image:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/ArmNavigation/arm_obstacle_navigation/animation.gif \ No newline at end of file diff --git a/docs/modules/arm_navigation/planar_two_link_ik.rst b/docs/modules/arm_navigation/planar_two_link_ik_main.rst similarity index 100% rename from docs/modules/arm_navigation/planar_two_link_ik.rst rename to docs/modules/arm_navigation/planar_two_link_ik_main.rst diff --git a/docs/modules/bipedal/bipedal_main.rst b/docs/modules/bipedal/bipedal_main.rst index bab316b0..fc5b9330 100644 --- a/docs/modules/bipedal/bipedal_main.rst +++ b/docs/modules/bipedal/bipedal_main.rst @@ -3,5 +3,9 @@ Bipedal ================= -.. include:: bipedal_planner/bipedal_planner.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents + + bipedal_planner/bipedal_planner diff --git a/docs/modules/bipedal/bipedal_planner/bipedal_planner.rst b/docs/modules/bipedal/bipedal_planner/bipedal_planner_main.rst similarity index 100% rename from docs/modules/bipedal/bipedal_planner/bipedal_planner.rst rename to docs/modules/bipedal/bipedal_planner/bipedal_planner_main.rst diff --git a/docs/modules/control/control_main.rst b/docs/modules/control/control_main.rst index d6d36a72..cee2aa9e 100644 --- a/docs/modules/control/control_main.rst +++ b/docs/modules/control/control_main.rst @@ -3,7 +3,10 @@ Control ================= -.. include:: inverted_pendulum_control/inverted_pendulum_control.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents -.. include:: move_to_a_pose_control/move_to_a_pose_control.rst + inverted_pendulum_control/inverted_pendulum_control + move_to_a_pose_control/move_to_a_pose_control diff --git a/docs/modules/control/inverted_pendulum_control/inverted_pendulum_control.rst b/docs/modules/control/inverted_pendulum_control/inverted_pendulum_control_main.rst similarity index 98% rename from docs/modules/control/inverted_pendulum_control/inverted_pendulum_control.rst rename to docs/modules/control/inverted_pendulum_control/inverted_pendulum_control_main.rst index 4c1f672b..e41729fd 100644 --- a/docs/modules/control/inverted_pendulum_control/inverted_pendulum_control.rst +++ b/docs/modules/control/inverted_pendulum_control/inverted_pendulum_control_main.rst @@ -9,7 +9,7 @@ The objective of the control system is to balance the inverted pendulum by apply Modeling ~~~~~~~~~~~~ -.. image:: inverted_pendulum_control/inverted-pendulum.png +.. image:: inverted-pendulum.png :align: center - :math:`M`: mass of the cart diff --git a/docs/modules/control/move_to_a_pose_control/move_to_a_pose_control.rst b/docs/modules/control/move_to_a_pose_control/move_to_a_pose_control_main.rst similarity index 100% rename from docs/modules/control/move_to_a_pose_control/move_to_a_pose_control.rst rename to docs/modules/control/move_to_a_pose_control/move_to_a_pose_control_main.rst diff --git a/docs/modules/localization/ensamble_kalman_filter_localization_files/ensamble_kalman_filter_localization.rst b/docs/modules/localization/ensamble_kalman_filter_localization_files/ensamble_kalman_filter_localization_main.rst similarity index 100% rename from docs/modules/localization/ensamble_kalman_filter_localization_files/ensamble_kalman_filter_localization.rst rename to docs/modules/localization/ensamble_kalman_filter_localization_files/ensamble_kalman_filter_localization_main.rst diff --git a/docs/modules/localization/extended_kalman_filter_localization_files/extended_kalman_filter_localization.rst b/docs/modules/localization/extended_kalman_filter_localization_files/extended_kalman_filter_localization_main.rst similarity index 98% rename from docs/modules/localization/extended_kalman_filter_localization_files/extended_kalman_filter_localization.rst rename to docs/modules/localization/extended_kalman_filter_localization_files/extended_kalman_filter_localization_main.rst index a9c29396..0ec920c9 100644 --- a/docs/modules/localization/extended_kalman_filter_localization_files/extended_kalman_filter_localization.rst +++ b/docs/modules/localization/extended_kalman_filter_localization_files/extended_kalman_filter_localization_main.rst @@ -2,7 +2,7 @@ Extended Kalman Filter Localization ----------------------------------- -.. image:: extended_kalman_filter_localization_files/extended_kalman_filter_localization_1_0.png +.. image:: extended_kalman_filter_localization_1_0.png :width: 600px diff --git a/docs/modules/localization/histogram_filter_localization/histogram_filter_localization.rst b/docs/modules/localization/histogram_filter_localization/histogram_filter_localization_main.rst similarity index 94% rename from docs/modules/localization/histogram_filter_localization/histogram_filter_localization.rst rename to docs/modules/localization/histogram_filter_localization/histogram_filter_localization_main.rst index 891de941..fafd5783 100644 --- a/docs/modules/localization/histogram_filter_localization/histogram_filter_localization.rst +++ b/docs/modules/localization/histogram_filter_localization/histogram_filter_localization_main.rst @@ -53,12 +53,12 @@ the estimation error due to the movement. For example, the position probability is peaky with observations: -.. image:: histogram_filter_localization/1.png +.. image:: 1.png :width: 400px But, the probability is getting uncertain without observations: -.. image:: histogram_filter_localization/2.png +.. image:: 2.png :width: 400px @@ -88,12 +88,12 @@ The probability of each grid is updated by this formula: When the `d` is 3.0, the `h(z)` distribution is: -.. image:: histogram_filter_localization/4.png +.. image:: 4.png :width: 400px The observation probability distribution looks a circle when a RF-ID is observed: -.. image:: histogram_filter_localization/3.png +.. image:: 3.png :width: 400px Step4: Estimate position from probability @@ -110,5 +110,5 @@ There are two ways to calculate the final positions: References: ~~~~~~~~~~~ -- `PROBABILISTIC ROBOTICS`_ +- `_PROBABILISTIC ROBOTICS: `_ - `Robust Vehicle Localization in Urban Environments Using Probabilistic Maps `_ diff --git a/docs/modules/localization/localization_main.rst b/docs/modules/localization/localization_main.rst index b1769df1..db6651f6 100644 --- a/docs/modules/localization/localization_main.rst +++ b/docs/modules/localization/localization_main.rst @@ -3,11 +3,14 @@ Localization ============ -.. include:: extended_kalman_filter_localization_files/extended_kalman_filter_localization.rst -.. include:: ensamble_kalman_filter_localization_files/ensamble_kalman_filter_localization.rst -.. include:: unscented_kalman_filter_localization/unscented_kalman_filter_localization.rst -.. include:: histogram_filter_localization/histogram_filter_localization.rst -.. include:: particle_filter_localization/particle_filter_localization.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents + + extended_kalman_filter_localization_files/extended_kalman_filter_localization + ensamble_kalman_filter_localization_files/ensamble_kalman_filter_localization + unscented_kalman_filter_localization/unscented_kalman_filter_localization + histogram_filter_localization/histogram_filter_localization + particle_filter_localization/particle_filter_localization -.. _PROBABILISTIC ROBOTICS: http://www.probabilistic-robotics.org/ diff --git a/docs/modules/localization/particle_filter_localization/particle_filter_localization.rst b/docs/modules/localization/particle_filter_localization/particle_filter_localization_main.rst similarity index 94% rename from docs/modules/localization/particle_filter_localization/particle_filter_localization.rst rename to docs/modules/localization/particle_filter_localization/particle_filter_localization_main.rst index 55b44e16..c8652ce8 100644 --- a/docs/modules/localization/particle_filter_localization/particle_filter_localization.rst +++ b/docs/modules/localization/particle_filter_localization/particle_filter_localization_main.rst @@ -33,5 +33,5 @@ The covariance matrix :math:`\Xi` from particle information is calculated by the References: ~~~~~~~~~~~ -- `PROBABILISTIC ROBOTICS`_ +- `_PROBABILISTIC ROBOTICS: `_ - `Improving the particle filter in high dimensions using conjugate artificial process noise `_ diff --git a/docs/modules/localization/unscented_kalman_filter_localization/unscented_kalman_filter_localization.rst b/docs/modules/localization/unscented_kalman_filter_localization/unscented_kalman_filter_localization_main.rst similarity index 100% rename from docs/modules/localization/unscented_kalman_filter_localization/unscented_kalman_filter_localization.rst rename to docs/modules/localization/unscented_kalman_filter_localization/unscented_kalman_filter_localization_main.rst diff --git a/docs/modules/mapping/circle_fitting/circle_fitting.rst b/docs/modules/mapping/circle_fitting/circle_fitting_main.rst similarity index 100% rename from docs/modules/mapping/circle_fitting/circle_fitting.rst rename to docs/modules/mapping/circle_fitting/circle_fitting_main.rst diff --git a/docs/modules/mapping/gaussian_grid_map/gaussian_grid_map.rst b/docs/modules/mapping/gaussian_grid_map/gaussian_grid_map_main.rst similarity index 100% rename from docs/modules/mapping/gaussian_grid_map/gaussian_grid_map.rst rename to docs/modules/mapping/gaussian_grid_map/gaussian_grid_map_main.rst diff --git a/docs/modules/mapping/k_means_object_clustering/k_means_object_clustering.rst b/docs/modules/mapping/k_means_object_clustering/k_means_object_clustering_main.rst similarity index 100% rename from docs/modules/mapping/k_means_object_clustering/k_means_object_clustering.rst rename to docs/modules/mapping/k_means_object_clustering/k_means_object_clustering_main.rst diff --git a/docs/modules/mapping/lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.rst b/docs/modules/mapping/lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_main.rst similarity index 92% rename from docs/modules/mapping/lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.rst rename to docs/modules/mapping/lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_main.rst index 2e9470ff..1f62179e 100644 --- a/docs/modules/mapping/lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.rst +++ b/docs/modules/mapping/lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_main.rst @@ -16,7 +16,7 @@ a ``numpy array``, and numbers close to 1 means the cell is occupied free (*marked with green*). The grid has the ability to represent unknown (unobserved) areas, which are close to 0.5. -.. figure:: lidar_to_grid_map_tutorial/grid_map_example.png +.. figure:: grid_map_example.png In order to construct the grid map from the measurement we need to discretise the values. But, first let’s need to ``import`` some @@ -68,7 +68,7 @@ From the distances and the angles it is easy to determine the ``x`` and -.. image:: lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_5_0.png +.. image:: lidar_to_grid_map_tutorial_5_0.png The ``lidar_to_grid_map.py`` contains handy functions which can used to @@ -89,7 +89,7 @@ map. Let’s see how this works. -.. image:: lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_7_0.png +.. image:: lidar_to_grid_map_tutorial_7_0.png .. code:: ipython3 @@ -106,7 +106,7 @@ map. Let’s see how this works. -.. image:: lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_8_0.png +.. image:: lidar_to_grid_map_tutorial_8_0.png To fill empty areas, a queue-based algorithm can be used that can be @@ -163,7 +163,7 @@ from a center point (e.g. (10, 20)) with zeros: -.. image:: lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_12_0.png +.. image:: lidar_to_grid_map_tutorial_12_0.png Let’s use this flood fill on real data: @@ -194,5 +194,5 @@ Let’s use this flood fill on real data: -.. image:: lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial_14_1.png +.. image:: lidar_to_grid_map_tutorial_14_1.png diff --git a/docs/modules/mapping/mapping_main.rst b/docs/modules/mapping/mapping_main.rst index 7d2c4cfe..0f7ec549 100644 --- a/docs/modules/mapping/mapping_main.rst +++ b/docs/modules/mapping/mapping_main.rst @@ -2,11 +2,14 @@ Mapping ======= +.. toctree:: + :maxdepth: 2 + :caption: Contents -.. include:: gaussian_grid_map/gaussian_grid_map.rst -.. include:: ray_casting_grid_map/ray_casting_grid_map.rst -.. include:: lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.rst -.. include:: k_means_object_clustering/k_means_object_clustering.rst -.. include:: circle_fitting/circle_fitting.rst -.. include:: rectangle_fitting/rectangle_fitting.rst + gaussian_grid_map/gaussian_grid_map + ray_casting_grid_map/ray_casting_grid_map + lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial + k_means_object_clustering/k_means_object_clustering + circle_fitting/circle_fitting + rectangle_fitting/rectangle_fitting diff --git a/docs/modules/mapping/ray_casting_grid_map/ray_casting_grid_map.rst b/docs/modules/mapping/ray_casting_grid_map/ray_casting_grid_map_main.rst similarity index 100% rename from docs/modules/mapping/ray_casting_grid_map/ray_casting_grid_map.rst rename to docs/modules/mapping/ray_casting_grid_map/ray_casting_grid_map_main.rst diff --git a/docs/modules/mapping/rectangle_fitting/rectangle_fitting.rst b/docs/modules/mapping/rectangle_fitting/rectangle_fitting_main.rst similarity index 100% rename from docs/modules/mapping/rectangle_fitting/rectangle_fitting.rst rename to docs/modules/mapping/rectangle_fitting/rectangle_fitting_main.rst diff --git a/docs/modules/path_planning/bezier_path/bezier_path.rst b/docs/modules/path_planning/bezier_path/bezier_path_main.rst similarity index 85% rename from docs/modules/path_planning/bezier_path/bezier_path.rst rename to docs/modules/path_planning/bezier_path/bezier_path_main.rst index c630d543..fbba6a44 100644 --- a/docs/modules/path_planning/bezier_path/bezier_path.rst +++ b/docs/modules/path_planning/bezier_path/bezier_path_main.rst @@ -5,13 +5,13 @@ A sample code of Bezier path planning. It is based on 4 control points Beizer path. -.. image:: Bezier_path/Figure_1.png +.. image:: Figure_1.png If you change the offset distance from start and end point, You can get different Beizer course: -.. image:: Bezier_path/Figure_2.png +.. image:: Figure_2.png Ref: diff --git a/docs/modules/path_planning/bspline_path/bspline_path.rst b/docs/modules/path_planning/bspline_path/bspline_path_main.rst similarity index 88% rename from docs/modules/path_planning/bspline_path/bspline_path.rst rename to docs/modules/path_planning/bspline_path/bspline_path_main.rst index a8043122..d3523a19 100644 --- a/docs/modules/path_planning/bspline_path/bspline_path.rst +++ b/docs/modules/path_planning/bspline_path/bspline_path_main.rst @@ -1,7 +1,7 @@ B-Spline planning ----------------- -.. image:: bspline_path/Figure_1.png +.. image:: Figure_1.png This is a path planning with B-Spline curse. diff --git a/docs/modules/path_planning/bugplanner/bugplanner.rst b/docs/modules/path_planning/bugplanner/bugplanner_main.rst similarity index 100% rename from docs/modules/path_planning/bugplanner/bugplanner.rst rename to docs/modules/path_planning/bugplanner/bugplanner_main.rst diff --git a/docs/modules/path_planning/clothoid_path/clothoid_path.rst b/docs/modules/path_planning/clothoid_path/clothoid_path_main.rst similarity index 100% rename from docs/modules/path_planning/clothoid_path/clothoid_path.rst rename to docs/modules/path_planning/clothoid_path/clothoid_path_main.rst diff --git a/docs/modules/path_planning/coverage_path/coverage_path.rst b/docs/modules/path_planning/coverage_path/coverage_path_main.rst similarity index 100% rename from docs/modules/path_planning/coverage_path/coverage_path.rst rename to docs/modules/path_planning/coverage_path/coverage_path_main.rst diff --git a/docs/modules/path_planning/cubic_spline/cubic_spline.rst b/docs/modules/path_planning/cubic_spline/cubic_spline_main.rst similarity index 68% rename from docs/modules/path_planning/cubic_spline/cubic_spline.rst rename to docs/modules/path_planning/cubic_spline/cubic_spline_main.rst index b1973856..6de0297a 100644 --- a/docs/modules/path_planning/cubic_spline/cubic_spline.rst +++ b/docs/modules/path_planning/cubic_spline/cubic_spline_main.rst @@ -8,6 +8,6 @@ with cubic spline. Heading angle of each point can be also calculated analytically. -.. image:: cubic_spline/Figure_1.png -.. image:: cubic_spline/Figure_2.png -.. image:: cubic_spline/Figure_3.png +.. image:: Figure_1.png +.. image:: Figure_2.png +.. image:: Figure_3.png diff --git a/docs/modules/path_planning/dubins_path/dubins_path.rst b/docs/modules/path_planning/dubins_path/dubins_path_main.rst similarity index 96% rename from docs/modules/path_planning/dubins_path/dubins_path.rst rename to docs/modules/path_planning/dubins_path/dubins_path_main.rst index b612a82e..0b8c8fb6 100644 --- a/docs/modules/path_planning/dubins_path/dubins_path.rst +++ b/docs/modules/path_planning/dubins_path/dubins_path_main.rst @@ -19,12 +19,12 @@ Possible path will be at least one of these six types: RSR, RSL, LSR, LSL, RLR, For example, one of RSR Dubins paths is: -.. image:: dubins_path/RSR.jpg +.. image:: RSR.jpg :width: 400px one of RLR Dubins paths is: -.. image:: dubins_path/RLR.jpg +.. image:: RLR.jpg :width: 200px Dubins path planner can output three types and distances of each course segment. diff --git a/docs/modules/path_planning/dynamic_window_approach/dynamic_window_approach.rst b/docs/modules/path_planning/dynamic_window_approach/dynamic_window_approach_main.rst similarity index 92% rename from docs/modules/path_planning/dynamic_window_approach/dynamic_window_approach.rst rename to docs/modules/path_planning/dynamic_window_approach/dynamic_window_approach_main.rst index 0ece6e00..d6458385 100644 --- a/docs/modules/path_planning/dynamic_window_approach/dynamic_window_approach.rst +++ b/docs/modules/path_planning/dynamic_window_approach/dynamic_window_approach_main.rst @@ -1,3 +1,5 @@ +.. _dynamic_window_approach: + Dynamic Window Approach ----------------------- diff --git a/docs/modules/path_planning/eta3_spline/eta3_spline.rst b/docs/modules/path_planning/eta3_spline/eta3_spline_main.rst similarity index 100% rename from docs/modules/path_planning/eta3_spline/eta3_spline.rst rename to docs/modules/path_planning/eta3_spline/eta3_spline_main.rst diff --git a/docs/modules/path_planning/frenet_frame_path/frenet_frame_path.rst b/docs/modules/path_planning/frenet_frame_path/frenet_frame_path_main.rst similarity index 100% rename from docs/modules/path_planning/frenet_frame_path/frenet_frame_path.rst rename to docs/modules/path_planning/frenet_frame_path/frenet_frame_path_main.rst diff --git a/docs/modules/path_planning/grid_base_search/grid_base_search.rst b/docs/modules/path_planning/grid_base_search/grid_base_search_main.rst similarity index 100% rename from docs/modules/path_planning/grid_base_search/grid_base_search.rst rename to docs/modules/path_planning/grid_base_search/grid_base_search_main.rst diff --git a/docs/modules/path_planning/hybridastar/hybridastar.rst b/docs/modules/path_planning/hybridastar/hybridastar_main.rst similarity index 100% rename from docs/modules/path_planning/hybridastar/hybridastar.rst rename to docs/modules/path_planning/hybridastar/hybridastar_main.rst diff --git a/docs/modules/path_planning/lqr_path/lqr_path.rst b/docs/modules/path_planning/lqr_path/lqr_path_main.rst similarity index 100% rename from docs/modules/path_planning/lqr_path/lqr_path.rst rename to docs/modules/path_planning/lqr_path/lqr_path_main.rst diff --git a/docs/modules/path_planning/model_predictive_trajectory_generator/model_predictive_trajectory_generator.rst b/docs/modules/path_planning/model_predictive_trajectory_generator/model_predictive_trajectory_generator_main.rst similarity index 90% rename from docs/modules/path_planning/model_predictive_trajectory_generator/model_predictive_trajectory_generator.rst rename to docs/modules/path_planning/model_predictive_trajectory_generator/model_predictive_trajectory_generator_main.rst index 07a7ee9b..0fc99789 100644 --- a/docs/modules/path_planning/model_predictive_trajectory_generator/model_predictive_trajectory_generator.rst +++ b/docs/modules/path_planning/model_predictive_trajectory_generator/model_predictive_trajectory_generator_main.rst @@ -14,7 +14,7 @@ Path optimization sample Lookup table generation sample ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. image:: model_predictive_trajectory_generator/lookup_table.png +.. image:: lookup_table.png Ref: diff --git a/docs/modules/path_planning/path_planning_main.rst b/docs/modules/path_planning/path_planning_main.rst index 5c70592a..a3237f16 100644 --- a/docs/modules/path_planning/path_planning_main.rst +++ b/docs/modules/path_planning/path_planning_main.rst @@ -3,24 +3,28 @@ Path Planning ============= -.. include:: dynamic_window_approach/dynamic_window_approach.rst -.. include:: bugplanner/bugplanner.rst -.. include:: grid_base_search/grid_base_search.rst -.. include:: model_predictive_trajectory_generator/model_predictive_trajectory_generator.rst -.. include:: state_lattice_planner/state_lattice_planner.rst -.. include:: prm_planner/prm_planner.rst -.. include:: visibility_road_map_planner/visibility_road_map_planner.rst -.. include:: vrm_planner/vrm_planner.rst -.. include:: rrt/rrt.rst -.. include:: cubic_spline/cubic_spline.rst -.. include:: bspline_path/bspline_path.rst -.. include:: clothoid_path/clothoid_path.rst -.. include:: eta3_spline/eta3_spline.rst -.. include:: bezier_path/bezier_path.rst -.. include:: quintic_polynomials_planner/quintic_polynomials_planner.rst -.. include:: dubins_path/dubins_path.rst -.. include:: reeds_shepp_path/reeds_shepp_path.rst -.. include:: lqr_path/lqr_path.rst -.. include:: hybridastar/hybridastar.rst -.. include:: frenet_frame_path/frenet_frame_path.rst -.. include:: coverage_path/coverage_path.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents + + dynamic_window_approach/dynamic_window_approach + bugplanner/bugplanner + grid_base_search/grid_base_search + model_predictive_trajectory_generator/model_predictive_trajectory_generator + state_lattice_planner/state_lattice_planner + prm_planner/prm_planner + visibility_road_map_planner/visibility_road_map_planner + vrm_planner/vrm_planner + rrt/rrt + cubic_spline/cubic_spline + bspline_path/bspline_path + clothoid_path/clothoid_path + eta3_spline/eta3_spline + bezier_path/bezier_path + quintic_polynomials_planner/quintic_polynomials_planner + dubins_path/dubins_path + reeds_shepp_path/reeds_shepp_path + lqr_path/lqr_path + hybridastar/hybridastar + frenet_frame_path/frenet_frame_path + coverage_path/coverage_path diff --git a/docs/modules/path_planning/prm_planner/prm_planner.rst b/docs/modules/path_planning/prm_planner/prm_planner_main.rst similarity index 100% rename from docs/modules/path_planning/prm_planner/prm_planner.rst rename to docs/modules/path_planning/prm_planner/prm_planner_main.rst diff --git a/docs/modules/path_planning/quintic_polynomials_planner/quintic_polynomials_planner.rst b/docs/modules/path_planning/quintic_polynomials_planner/quintic_polynomials_planner_main.rst similarity index 100% rename from docs/modules/path_planning/quintic_polynomials_planner/quintic_polynomials_planner.rst rename to docs/modules/path_planning/quintic_polynomials_planner/quintic_polynomials_planner_main.rst diff --git a/docs/modules/path_planning/reeds_shepp_path/reeds_shepp_path.rst b/docs/modules/path_planning/reeds_shepp_path/reeds_shepp_path_main.rst similarity index 100% rename from docs/modules/path_planning/reeds_shepp_path/reeds_shepp_path.rst rename to docs/modules/path_planning/reeds_shepp_path/reeds_shepp_path_main.rst diff --git a/docs/modules/path_planning/rrt/rrt.rst b/docs/modules/path_planning/rrt/rrt_main.rst similarity index 99% rename from docs/modules/path_planning/rrt/rrt.rst rename to docs/modules/path_planning/rrt/rrt_main.rst index 1afa17b1..5a3a30dc 100644 --- a/docs/modules/path_planning/rrt/rrt.rst +++ b/docs/modules/path_planning/rrt/rrt_main.rst @@ -14,7 +14,7 @@ This is a simple path planning code with Rapidly-Exploring Random Trees Black circles are obstacles, green line is a searched tree, red crosses are start and goal positions. -.. include:: rrt/rrt_star.rst +.. include:: rrt_star.rst RRT with dubins path diff --git a/docs/modules/path_planning/rrt/rrt_star.rst b/docs/modules/path_planning/rrt/rrt_star.rst index 546e9bf6..d36eaac7 100644 --- a/docs/modules/path_planning/rrt/rrt_star.rst +++ b/docs/modules/path_planning/rrt/rrt_star.rst @@ -10,7 +10,7 @@ Black circles are obstacles, green line is a searched tree, red crosses are star Simulation ^^^^^^^^^^ -.. image:: rrt/rrt_star/rrt_star_1_0.png +.. image:: rrt_star/rrt_star_1_0.png :width: 600px diff --git a/docs/modules/path_planning/state_lattice_planner/state_lattice_planner.rst b/docs/modules/path_planning/state_lattice_planner/state_lattice_planner_main.rst similarity index 100% rename from docs/modules/path_planning/state_lattice_planner/state_lattice_planner.rst rename to docs/modules/path_planning/state_lattice_planner/state_lattice_planner_main.rst diff --git a/docs/modules/path_planning/visibility_road_map_planner/visibility_road_map_planner.rst b/docs/modules/path_planning/visibility_road_map_planner/visibility_road_map_planner_main.rst similarity index 91% rename from docs/modules/path_planning/visibility_road_map_planner/visibility_road_map_planner.rst rename to docs/modules/path_planning/visibility_road_map_planner/visibility_road_map_planner_main.rst index 97e08338..3c9b7c00 100644 --- a/docs/modules/path_planning/visibility_road_map_planner/visibility_road_map_planner.rst +++ b/docs/modules/path_planning/visibility_road_map_planner/visibility_road_map_planner_main.rst @@ -24,7 +24,7 @@ We assume this planner can be provided these information in the below figure. - 2. Goal point (Blue point) - 3. Obstacle polygons (Black lines) -.. image:: visibility_road_map_planner/step0.png +.. image:: step0.png :width: 400px @@ -33,7 +33,7 @@ Step1: Generate visibility nodes based on polygon obstacles The nodes are generated by expanded these polygons vertexes like the below figure: -.. image:: visibility_road_map_planner/step1.png +.. image:: step1.png :width: 400px Each polygon vertex is expanded outward from the vector of adjacent vertices. @@ -49,7 +49,7 @@ If the arc is collided, the graph is removed. The blue lines are generated visibility graphs in the figure: -.. image:: visibility_road_map_planner/step2.png +.. image:: step2.png :width: 400px @@ -58,7 +58,7 @@ Step3: Search the shortest path in the graphs using Dijkstra algorithm The red line is searched path in the figure: -.. image:: visibility_road_map_planner/step3.png +.. image:: step3.png :width: 400px You can find the details of Dijkstra algorithm in :ref:`dijkstra`. diff --git a/docs/modules/path_planning/vrm_planner/vrm_planner.rst b/docs/modules/path_planning/vrm_planner/vrm_planner_main.rst similarity index 100% rename from docs/modules/path_planning/vrm_planner/vrm_planner.rst rename to docs/modules/path_planning/vrm_planner/vrm_planner_main.rst diff --git a/docs/modules/path_tracking/cgmres_nmpc/cgmres_nmpc.rst b/docs/modules/path_tracking/cgmres_nmpc/cgmres_nmpc_main.rst similarity index 92% rename from docs/modules/path_tracking/cgmres_nmpc/cgmres_nmpc.rst rename to docs/modules/path_tracking/cgmres_nmpc/cgmres_nmpc_main.rst index 5092fa8e..a1980ba1 100644 --- a/docs/modules/path_tracking/cgmres_nmpc/cgmres_nmpc.rst +++ b/docs/modules/path_tracking/cgmres_nmpc/cgmres_nmpc_main.rst @@ -2,16 +2,16 @@ Nonlinear Model Predictive Control with C-GMRES ----------------------------------------------- -.. image:: cgmres_nmpc/cgmres_nmpc_1_0.png +.. image:: cgmres_nmpc_1_0.png :width: 600px -.. image:: cgmres_nmpc/cgmres_nmpc_2_0.png +.. image:: cgmres_nmpc_2_0.png :width: 600px -.. image:: cgmres_nmpc/cgmres_nmpc_3_0.png +.. image:: cgmres_nmpc_3_0.png :width: 600px -.. image:: cgmres_nmpc/cgmres_nmpc_4_0.png +.. image:: cgmres_nmpc_4_0.png :width: 600px .. figure:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/PathTracking/cgmres_nmpc/animation.gif diff --git a/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control.rst b/docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control_main.rst similarity index 100% rename from docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control.rst rename to docs/modules/path_tracking/lqr_speed_and_steering_control/lqr_speed_and_steering_control_main.rst diff --git a/docs/modules/path_tracking/lqr_steering_control/lqr_steering_control.rst b/docs/modules/path_tracking/lqr_steering_control/lqr_steering_control_main.rst similarity index 100% rename from docs/modules/path_tracking/lqr_steering_control/lqr_steering_control.rst rename to docs/modules/path_tracking/lqr_steering_control/lqr_steering_control_main.rst diff --git a/docs/modules/path_tracking/model_predictive_speed_and_steering_control/model_predictive_speed_and_steering_control.rst b/docs/modules/path_tracking/model_predictive_speed_and_steering_control/model_predictive_speed_and_steering_control_main.rst similarity index 100% rename from docs/modules/path_tracking/model_predictive_speed_and_steering_control/model_predictive_speed_and_steering_control.rst rename to docs/modules/path_tracking/model_predictive_speed_and_steering_control/model_predictive_speed_and_steering_control_main.rst diff --git a/docs/modules/path_tracking/path_tracking_main.rst b/docs/modules/path_tracking/path_tracking_main.rst index 2a572ef6..504ba087 100644 --- a/docs/modules/path_tracking/path_tracking_main.rst +++ b/docs/modules/path_tracking/path_tracking_main.rst @@ -3,11 +3,14 @@ Path Tracking ============= -.. include:: pure_pursuit_tracking/pure_pursuit_tracking.rst -.. include:: stanley_control/stanley_control.rst -.. include:: rear_wheel_feedback_control/rear_wheel_feedback_control.rst -.. include:: lqr_steering_control/lqr_steering_control.rst -.. include:: lqr_speed_and_steering_control/lqr_speed_and_steering_control.rst -.. include:: model_predictive_speed_and_steering_control/model_predictive_speed_and_steering_control.rst -.. include:: cgmres_nmpc/cgmres_nmpc.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents + pure_pursuit_tracking/pure_pursuit_tracking + stanley_control/stanley_control + rear_wheel_feedback_control/rear_wheel_feedback_control + lqr_steering_control/lqr_steering_control + lqr_speed_and_steering_control/lqr_speed_and_steering_control + model_predictive_speed_and_steering_control/model_predictive_speed_and_steering_control + cgmres_nmpc/cgmres_nmpc diff --git a/docs/modules/path_tracking/pure_pursuit_tracking/pure_pursuit_tracking.rst b/docs/modules/path_tracking/pure_pursuit_tracking/pure_pursuit_tracking_main.rst similarity index 100% rename from docs/modules/path_tracking/pure_pursuit_tracking/pure_pursuit_tracking.rst rename to docs/modules/path_tracking/pure_pursuit_tracking/pure_pursuit_tracking_main.rst diff --git a/docs/modules/path_tracking/rear_wheel_feedback_control/rear_wheel_feedback_control.rst b/docs/modules/path_tracking/rear_wheel_feedback_control/rear_wheel_feedback_control_main.rst similarity index 100% rename from docs/modules/path_tracking/rear_wheel_feedback_control/rear_wheel_feedback_control.rst rename to docs/modules/path_tracking/rear_wheel_feedback_control/rear_wheel_feedback_control_main.rst diff --git a/docs/modules/path_tracking/stanley_control/stanley_control.rst b/docs/modules/path_tracking/stanley_control/stanley_control_main.rst similarity index 100% rename from docs/modules/path_tracking/stanley_control/stanley_control.rst rename to docs/modules/path_tracking/stanley_control/stanley_control_main.rst diff --git a/docs/modules/slam/FastSLAM1/FastSLAM1.rst b/docs/modules/slam/FastSLAM1/FastSLAM1_main.rst similarity index 98% rename from docs/modules/slam/FastSLAM1/FastSLAM1.rst rename to docs/modules/slam/FastSLAM1/FastSLAM1_main.rst index f1e9dfd8..f09125df 100644 --- a/docs/modules/slam/FastSLAM1/FastSLAM1.rst +++ b/docs/modules/slam/FastSLAM1/FastSLAM1_main.rst @@ -11,7 +11,7 @@ Simulation This is a feature based SLAM example using FastSLAM 1.0. -.. image:: FastSLAM1/FastSLAM1_1_0.png +.. image:: FastSLAM1_1_0.png :width: 600px The blue line is ground truth, the black line is dead reckoning, the red @@ -46,8 +46,8 @@ an array of landmark locations I.e. Each particle maintains a deterministic pose and n-EKFs for each landmark and update it with each measurement. -Algorithm walkthrough -~~~~~~~~~~~~~~~~~~~~~ +Algorithm walk through +~~~~~~~~~~~~~~~~~~~~~~~ The particles are initially drawn from a uniform distribution the represent the initial uncertainty. At each time step we do: @@ -75,7 +75,7 @@ which are the linear and angular velocity repsectively. :math:`\begin{equation*} \begin{bmatrix} x_{t+1} \\ y_{t+1} \\ \theta_{t+1} \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x_{t} \\ y_{t} \\ \theta_{t} \end{bmatrix}+ \begin{bmatrix} \Delta t cos(\theta) & 0\\ \Delta t sin(\theta) & 0\\ 0 & \Delta t \end{bmatrix} \begin{bmatrix} v_{t} + \sigma_v\\ w_{t} + \sigma_w\\ \end{bmatrix} \end{equation*}` -The following snippets playsback the recorded trajectory of each +The following snippets playback the recorded trajectory of each particle. To get the insight of the motion model change the value of :math:`R` and @@ -527,8 +527,8 @@ indices -.. image:: FastSLAM1/FastSLAM1_12_0.png -.. image:: FastSLAM1/FastSLAM1_12_1.png +.. image:: FastSLAM1_12_0.png +.. image:: FastSLAM1_12_1.png References diff --git a/docs/modules/slam/FastSLAM2/FastSLAM2.rst b/docs/modules/slam/FastSLAM2/FastSLAM2_main.rst similarity index 100% rename from docs/modules/slam/FastSLAM2/FastSLAM2.rst rename to docs/modules/slam/FastSLAM2/FastSLAM2_main.rst diff --git a/docs/modules/slam/ekf_slam/ekf_slam.rst b/docs/modules/slam/ekf_slam/ekf_slam_main.rst similarity index 99% rename from docs/modules/slam/ekf_slam/ekf_slam.rst rename to docs/modules/slam/ekf_slam/ekf_slam_main.rst index a79c2737..5a23b4c8 100644 --- a/docs/modules/slam/ekf_slam/ekf_slam.rst +++ b/docs/modules/slam/ekf_slam/ekf_slam_main.rst @@ -581,7 +581,7 @@ reckoning and control functions are passed along here as well. New LM New LM -.. image:: ekf_slam/ekf_slam_1_0.png +.. image:: ekf_slam_1_0.png References: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/modules/slam/graph_slam/graphSLAM_SE2_example.rst b/docs/modules/slam/graph_slam/graphSLAM_SE2_example.rst index ef5d05bf..49132051 100644 --- a/docs/modules/slam/graph_slam/graphSLAM_SE2_example.rst +++ b/docs/modules/slam/graph_slam/graphSLAM_SE2_example.rst @@ -44,7 +44,7 @@ The Dataset -.. image:: graph_slam/graphSLAM_SE2_example_files/graphSLAM_SE2_example_4_0.png +.. image:: graphSLAM_SE2_example_files/graphSLAM_SE2_example_4_0.png Each edge in this dataset is a constraint that compares the measured @@ -122,7 +122,7 @@ dataset and plot them. -.. image:: graph_slam/graphSLAM_SE2_example_files/graphSLAM_SE2_example_8_0.png +.. image:: graphSLAM_SE2_example_files/graphSLAM_SE2_example_8_0.png .. code:: ipython3 @@ -131,7 +131,7 @@ dataset and plot them. -.. image:: graph_slam/graphSLAM_SE2_example_files/graphSLAM_SE2_example_9_0.png +.. image:: graphSLAM_SE2_example_files/graphSLAM_SE2_example_9_0.png Optimization @@ -165,7 +165,7 @@ different data sources into a single optimization problem. 6 215.8405 -0.000000 -.. figure:: graph_slam/graphSLAM_SE2_example_files/Graph_SLAM_optimization.gif +.. figure:: graphSLAM_SE2_example_files/Graph_SLAM_optimization.gif .. code:: ipython3 @@ -173,7 +173,7 @@ different data sources into a single optimization problem. -.. image:: graph_slam/graphSLAM_SE2_example_files/graphSLAM_SE2_example_13_0.png +.. image:: graphSLAM_SE2_example_files/graphSLAM_SE2_example_13_0.png .. code:: ipython3 @@ -195,7 +195,7 @@ different data sources into a single optimization problem. -.. image:: graph_slam/graphSLAM_SE2_example_files/graphSLAM_SE2_example_15_0.png +.. image:: graphSLAM_SE2_example_files/graphSLAM_SE2_example_15_0.png .. code:: ipython3 @@ -204,5 +204,5 @@ different data sources into a single optimization problem. -.. image:: graph_slam/graphSLAM_SE2_example_files/graphSLAM_SE2_example_16_0.png +.. image:: graphSLAM_SE2_example_files/graphSLAM_SE2_example_16_0.png diff --git a/docs/modules/slam/graph_slam/graphSLAM_SE2_example_files/Graph_SLAM_optimization.gif b/docs/modules/slam/graph_slam/graphSLAM_SE2_example_files/Graph_SLAM_optimization.gif new file mode 100644 index 0000000000000000000000000000000000000000..2fabeaafc9cd4ad4b71bbf451637bf2560f1be5e GIT binary patch literal 114966 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≻MieUHv{SR=GG|% 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¨k!z_aNFW=6G#yxJ? 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%0AI;4Y4{-Ta%I zB;|+2w}p04{4z9FJI2rGT#4&K{bhhJ<>AB(2(Ugb1B*p|cL&+)?sY}S4U;alcAu^u n1bp8i9={4d81rZV00i)b-%LrT_UQcoLPCF_P*NiU0I>QW)2;|X literal 0 HcmV?d00001 diff --git a/docs/modules/slam/graph_slam/graphSLAM_doc.rst b/docs/modules/slam/graph_slam/graphSLAM_doc.rst index 4367f770..52976048 100644 --- a/docs/modules/slam/graph_slam/graphSLAM_doc.rst +++ b/docs/modules/slam/graph_slam/graphSLAM_doc.rst @@ -142,7 +142,7 @@ created based on the information of the motion and the observation. -.. image:: graph_slam/graphSLAM_doc_files/graphSLAM_doc_2_0.png +.. image:: graphSLAM_doc_files/graphSLAM_doc_2_0.png .. parsed-literal:: @@ -157,7 +157,7 @@ created based on the information of the motion and the observation. -.. image:: graph_slam/graphSLAM_doc_files/graphSLAM_doc_2_2.png +.. image:: graphSLAM_doc_files/graphSLAM_doc_2_2.png In particular, the tasks are split into 2 parts, graph construction, and @@ -289,7 +289,7 @@ robot with 3DoF, namely, :math:`[x, y, \theta]^T` -.. image:: graph_slam/graphSLAM_doc_files/graphSLAM_doc_4_0.png +.. image:: graphSLAM_doc_files/graphSLAM_doc_4_0.png .. code:: ipython3 @@ -420,7 +420,7 @@ zero since :math:`x_j + d_j cos(\psi_j + \theta_j)` should equal -.. image:: graph_slam/graphSLAM_doc_files/graphSLAM_doc_9_1.png +.. image:: graphSLAM_doc_files/graphSLAM_doc_9_1.png Since the constraints equations derived before are non-linear, @@ -494,9 +494,9 @@ Similarly, :math:`B = \frac{\partial e_{ij}}{\partial \boldsymbol{x}_j}` -.. image:: graph_slam/graphSLAM_doc_files/graphSLAM_doc_11_1.png +.. image:: graphSLAM_doc_files/graphSLAM_doc_11_1.png -.. image:: graph_slam/graphSLAM_doc_files/graphSLAM_doc_11_2.png +.. image:: graphSLAM_doc_files/graphSLAM_doc_11_2.png .. code:: ipython3 diff --git a/docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_11_1.png b/docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_11_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a9859333465a59a0c4034f9d007e8dac510a9240 GIT binary patch literal 3931 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 P05g~xTNqXR=@$PV+Clmn literal 0 HcmV?d00001 diff --git a/docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_2_2.png b/docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2074d3de17307b822b1853288e1e1ae715938693 GIT binary patch literal 7924 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 literal 0 HcmV?d00001 diff --git a/docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_4_0.png b/docs/modules/slam/graph_slam/graphSLAM_doc_files/graphSLAM_doc_4_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8cfb25d1e23ab14a29c3fbf5992236ccb4827c GIT binary patch literal 9308 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%0As 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 literal 0 HcmV?d00001 diff --git a/docs/modules/slam/graph_slam/graphSLAM_formulation.rst b/docs/modules/slam/graph_slam/graphSLAM_formulation.rst index 43f007e7..4978596c 100644 --- a/docs/modules/slam/graph_slam/graphSLAM_formulation.rst +++ b/docs/modules/slam/graph_slam/graphSLAM_formulation.rst @@ -70,7 +70,7 @@ Using Bayes’ rule, we can write this probability as since :math:`p(\mathcal{Z})` is a constant (albeit, an unknown constant) and we assume that :math:`p(\mathbf{p}_1, \ldots, \mathbf{p}_N)` is -uniformly distributed `PROBABILISTIC ROBOTICS`_. Therefore, we +uniformly distributed. Therefore, we can use Eq. :eq:`infomat` and and Eq. :eq:`bayes` to simplify the Graph SLAM optimization as follows: diff --git a/docs/modules/slam/graph_slam/graph_slam.rst b/docs/modules/slam/graph_slam/graph_slam_main.rst similarity index 78% rename from docs/modules/slam/graph_slam/graph_slam.rst rename to docs/modules/slam/graph_slam/graph_slam_main.rst index a1248a01..987eed38 100644 --- a/docs/modules/slam/graph_slam/graph_slam.rst +++ b/docs/modules/slam/graph_slam/graph_slam_main.rst @@ -13,9 +13,9 @@ The black stars are landmarks for graph edge generation. .. image:: https://github.com/AtsushiSakai/PythonRoboticsGifs/raw/master/SLAM/GraphBasedSLAM/animation.gif -.. include:: graph_slam/graphSLAM_doc.rst -.. include:: graph_slam/graphSLAM_formulation.rst -.. include:: graph_slam/graphSLAM_SE2_example.rst +.. include:: graphSLAM_doc.rst +.. include:: graphSLAM_formulation.rst +.. include:: graphSLAM_SE2_example.rst References: ~~~~~~~~~~~ diff --git a/docs/modules/slam/iterative_closest_point_matching/iterative_closest_point_matching.rst b/docs/modules/slam/iterative_closest_point_matching/iterative_closest_point_matching_main.rst similarity index 100% rename from docs/modules/slam/iterative_closest_point_matching/iterative_closest_point_matching.rst rename to docs/modules/slam/iterative_closest_point_matching/iterative_closest_point_matching_main.rst diff --git a/docs/modules/slam/slam_main.rst b/docs/modules/slam/slam_main.rst index f4d10feb..86befa6e 100644 --- a/docs/modules/slam/slam_main.rst +++ b/docs/modules/slam/slam_main.rst @@ -5,9 +5,12 @@ SLAM Simultaneous Localization and Mapping(SLAM) examples -.. include:: iterative_closest_point_matching/iterative_closest_point_matching.rst -.. include:: ekf_slam/ekf_slam.rst -.. include:: FastSLAM1/FastSLAM1.rst -.. include:: FastSLAM2/FastSLAM2.rst -.. include:: graph_slam/graph_slam.rst +.. toctree:: + :maxdepth: 2 + :caption: Contents + iterative_closest_point_matching/iterative_closest_point_matching + ekf_slam/ekf_slam + FastSLAM1/FastSLAM1 + FastSLAM2/FastSLAM2 + graph_slam/graph_slam