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
@@ -31,7 +31,7 @@ See this paper for more details:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Guide
|
||||
:caption: Contents
|
||||
|
||||
getting_started
|
||||
modules/introduction
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
Appendix
|
||||
==============
|
||||
|
||||
.. include:: Kalmanfilter_basics.rst
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Contents
|
||||
|
||||
.. include:: Kalmanfilter_basics_2.rst
|
||||
Kalmanfilter_basics
|
||||
Kalmanfilter_basics_2
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -3,5 +3,9 @@
|
||||
Bipedal
|
||||
=================
|
||||
|
||||
.. include:: bipedal_planner/bipedal_planner.rst
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Contents
|
||||
|
||||
bipedal_planner/bipedal_planner
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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: <http://www.probabilistic-robotics.org>`_
|
||||
- `Robust Vehicle Localization in Urban Environments Using Probabilistic Maps <http://driving.stanford.edu/papers/ICRA2010.pdf>`_
|
||||
@@ -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/
|
||||
|
||||
|
||||
@@ -33,5 +33,5 @@ The covariance matrix :math:`\Xi` from particle information is calculated by the
|
||||
References:
|
||||
~~~~~~~~~~~
|
||||
|
||||
- `PROBABILISTIC ROBOTICS`_
|
||||
- `_PROBABILISTIC ROBOTICS: <http://www.probabilistic-robotics.org>`_
|
||||
- `Improving the particle filter in high dimensions using conjugate artificial process noise <https://arxiv.org/pdf/1801.07000.pdf>`_
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -1,3 +1,5 @@
|
||||
.. _dynamic_window_approach:
|
||||
|
||||
Dynamic Window Approach
|
||||
-----------------------
|
||||
|
||||
@@ -14,7 +14,7 @@ Path optimization sample
|
||||
Lookup table generation sample
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. image:: model_predictive_trajectory_generator/lookup_table.png
|
||||
.. image:: lookup_table.png
|
||||
|
||||
Ref:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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`.
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -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
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 112 KiB |
@@ -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
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
@@ -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:
|
||||
|
||||
|
||||
@@ -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:
|
||||
~~~~~~~~~~~
|
||||
@@ -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
|
||||
|
||||