Skip to content

Commit 9a67427

Browse files
author
Murilo Marinho
committed
[navigation/usage] Add short explanation about costmaps.
1 parent ebb0b92 commit 9a67427

File tree

1 file changed

+36
-15
lines changed

1 file changed

+36
-15
lines changed

docs/source/navigation/usage.rst

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ The installed folder will have the following structure.
119119
The launch file we executed in this example is shown below. A launch file that is general will tend to have a proportional
120120
level of complexity. We are not currently interested in dissecting all elements of this file. Rather, our interest is to
121121
take a look at the relevant files used and what they mean. By understanding these, we would be a step closer to be able to
122-
modify this example for our own purposes.
122+
modify the example or interact with it for your own purposes.
123123

124124
.. dropdown:: Contents of :file:`tb3_simulation_launch.py`
125125

@@ -136,12 +136,6 @@ The highlighted lines point out to these important files.
136136
- :file:`urdf/gz_waffle.sdf.xacro`
137137
- :file:`urdf/turtlebot3_waffle.urdf`
138138

139-
.. rli:: https://raw.githubusercontent.com/ros-navigation/navigation2/refs/heads/jazzy/nav2_bringup/maps/tb3_sandbox.yaml
140-
:language: yaml
141-
:linenos:
142-
143-
144-
145139
.. rli:: https://raw.githubusercontent.com/ros-navigation/navigation2/refs/heads/jazzy/nav2_bringup/worlds/tb3_sandbox.sdf.xacro
146140
:language: xml
147141
:linenos:
@@ -154,8 +148,8 @@ The highlighted lines point out to these important files.
154148
:language: xml
155149
:linenos:
156150

157-
Navigation
158-
----------
151+
Navigation :file:`nav2_params.yaml`
152+
-----------------------------------
159153

160154
.. seealso::
161155

@@ -173,8 +167,8 @@ Once more, there is a trade-off between generality and the complexity of the con
173167
elements of the configuration in the table below.
174168

175169
In ``nav2``, each functionality is divided into a so-called *server*. Each server will have its own set of parameters and
176-
will communicate with other servers. In this topology, ideally one functionality can be modified withouts affecting
177-
other servers.
170+
will communicate with other servers. In this topology, ideally one functionality can be modified without affecting
171+
other servers. These are not all servers available in ``nav2``, but all the servers used in this example.
178172

179173
===================== ================================= =============================================================================
180174
Server TL;DR Link
@@ -192,16 +186,43 @@ Server TL;DR Link
192186
``collision_monitor`` Extra layer of safety `docs <https://docs.nav2.org/configuration/packages/configuring-collision-monitor.html>`_
193187
===================== ================================= =============================================================================
194188

195-
Each server will be attached to one or more ``nav2`` *plugins*. The plugins will define the
189+
Each server can be attached to one or more ``nav2`` *plugins*. The plugins will define important aspects of the
190+
server and plugins will have their own parameters.
196191

197192
.. seealso::
198193
Official documentation: https://docs.nav2.org/plugins/index.html
199194

200-
Our navigator uses Adaptive Monte-Carlo Localiser (`AMCL <https://docs.nav2.org/configuration/packages/configuring-amcl.html>`_).
201-
Planner ``nav2_navfn_planner::NavfnPlanner`` https://docs.nav2.org/configuration/packages/configuring-navfn.html
202-
Controller Model Predictive Path Integral Controller ``nav2_mppi_controller::MPPIController`` https://docs.nav2.org/configuration/packages/configuring-mppic.html
195+
In ``nav2``, mainly, there will be a *global* planner (in this case ``nav2_navfn_planner::NavfnPlanner``) and a *local*
196+
controller (in this case ``nav2_mppi_controller::MPPIController``). In general terms, the global planner can find solutions
197+
when the goal is far and create a trajectory. The controller will be responsible for dealing with following the trajectory
198+
in the short term. This split is common in robotics.
199+
200+
map :file:`nav2_params.yaml`
201+
-----------------------------------
203202

203+
.. rli:: https://raw.githubusercontent.com/ros-navigation/navigation2/refs/heads/jazzy/nav2_bringup/maps/tb3_sandbox.yaml
204+
:language: yaml
205+
:linenos:
204206

207+
A costmap in ``nav2`` is a 2D grid in which each cell is assigned a value, similarly to an image. Using the image analogy,
208+
each *costmap* (image) will be made of *costs* (pixels). The value in each pixel will define how *costly* it is to move
209+
through that pixel.
210+
211+
Suppose that we have the small costmap below, for illustrative purposes. Suppose that we use ``F`` for free space, U
212+
for unknown, and O for occupied. We can see this as a top-view image of the path that the robot can traverse. The planner
213+
and controller will use this information.
214+
215+
+--+------+------+--+--+
216+
|O |O |O |O |U |
217+
+--+------+------+--+--+
218+
|O |``F`` |``F`` |O |U |
219+
+--+------+------+--+--+
220+
|O |O |``F`` |O |U |
221+
+--+------+------+--+--+
222+
|O |``F`` |``F`` |O |U |
223+
+--+------+------+--+--+
224+
|O |O |O |O |U |
225+
+--+------+------+--+--+
205226

206227
Navigation with SLAM
207228
++++++++++++++++++++

0 commit comments

Comments
 (0)