Skip to content

Commit aeb2e17

Browse files
committed
[skip ci] publish latest
Signed-off-by: fmrico <fmrico@gmail.com>
1 parent bc458ae commit aeb2e17

23 files changed

Lines changed: 839 additions & 66 deletions

File tree

_sources/about/index.rst.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
.. _about:
22

33
About and Contact
4-
#################
4+
*****************
55

66
About
7-
*****
7+
=====
88

99
**EasyNavigation (EasyNav)** is an open-source navigation system for ROS 2, developed by the Intelligent Robotics Lab at Universidad Rey Juan Carlos. Its goal is to provide a lightweight, real-time-capable alternative to Nav2 that is agnostic to the internal representation of the robot's environment.
1010

@@ -71,7 +71,7 @@ Our current team includes:
7171
.. _beltransen: https://github.com/beltransen
7272

7373
Contact
74-
*******
74+
=======
7575

7676
If you are interested in EasyNavigation, ROS 2 navigation, or robotics research in general, please feel free to reach out to the project lead.
7777

_sources/design/index.rst.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.. _design:
22

33
Core Design and Architecture
4-
############################
4+
****************************
55

66
**EasyNav** is designed with three core principles in mind: modularity, real-time performance, and extensibility. Its architecture separates concerns into well-defined components, making it both easy to adapt and efficient to execute.
77

@@ -25,7 +25,7 @@ EasyNav runs within a single process that hosts a ROS 2 **Lifecycle Node** calle
2525

2626

2727
NavState: The Shared Blackboard
28-
-------------------------------
28+
===============================
2929

3030
A key architectural component of EasyNav is the **NavState**, a shared *blackboard* that holds all the internal state information required by the navigation system.
3131

@@ -52,7 +52,7 @@ Future versions of EasyNav may include graphical or CLI-based tools to explore a
5252

5353

5454
Real-Time Execution Model
55-
--------------------------
55+
=========================
5656

5757
Another key feature of EasyNav is its emphasis on **real-time performance**. The navigation system is designed to react with strict timing constraints, minimizing latency from perception to action.
5858

@@ -85,7 +85,7 @@ This dual-cycle model balances **responsiveness** with **computational stability
8585

8686

8787
Plugin Configuration
88-
---------------------
88+
====================
8989

9090
Let us examine the parameter file used in the *Getting Started* section. Each node loads its corresponding plugin by name. The following example shows how plugins are declared for each module:
9191

_sources/getting_started/index.rst.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.. _getting_started:
22

33
Getting Started
4-
###############
4+
***************
55

66
To get started with **EasyNav**, we will use a simple example: a Turtlebot2 robot navigating in a domestic environment.
77

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
.. _commanding:
2+
3+
4+
Sending Navigation Commands to EasyNav
5+
**************************************
6+
7+
EasyNav is designed to be easy to control from user applications or higher-level decision-making modules.
8+
Instead of relying on ROS 2 Actions, which can be complex and hard to integrate across systems, EasyNav follows a simpler and more transparent communication model using topics and message protocols.
9+
10+
Primary Method: `/easynav_control` Topic
11+
========================================
12+
13+
The main interface to control navigation is the topic `/easynav_control`, which uses the message type `easynav_interfaces/msg/NavigationControl`.
14+
This message encapsulates both commands and feedback for the navigation process.
15+
16+
Here is the full definition of the message:
17+
18+
.. code-block:: cpp
19+
20+
uint8 REQUEST=0
21+
uint8 REJECT=1
22+
uint8 ACCEPT=2
23+
uint8 FEEDBACK=3
24+
uint8 FINISHED=4
25+
uint8 FAILED=5
26+
uint8 CANCEL=6
27+
uint8 CANCELLED=7
28+
uint8 ERROR=8
29+
30+
uint8 type
31+
std_msgs/Header header
32+
int64 seq
33+
string user_id
34+
string nav_current_user_id
35+
nav_msgs/Goals goals
36+
string status_message
37+
geometry_msgs/PoseStamped current_pose
38+
builtin_interfaces/Duration navigation_time
39+
builtin_interfaces/Duration estimated_time_remaining
40+
float32 distance_covered
41+
float32 distance_to_goal
42+
43+
Protocol Description
44+
--------------------
45+
46+
The communication protocol over `/easynav_control` is designed around a type-based message system. Each message indicates a specific type of interaction or feedback:
47+
48+
- **REQUEST (0)**: A new navigation goal is requested. The `goals` field must be filled.
49+
- **REJECT (1)**: The system rejects the navigation goal.
50+
- **ACCEPT (2)**: The system has accepted the navigation goal and has started processing.
51+
- **FEEDBACK (3)**: Periodic updates including the current pose, distance covered, and estimated time remaining.
52+
- **FINISHED (4)**: Navigation completed successfully.
53+
- **FAILED (5)**: Navigation failed (e.g., due to unreachable goal or obstacle).
54+
- **CANCEL (6)**: The user requests to cancel the current navigation.
55+
- **CANCELLED (7)**: Navigation has been cancelled.
56+
- **ERROR (8)**: An error occurred during navigation.
57+
58+
Each message has a sequence number (`seq`), user ID (`user_id`), and optionally contains feedback fields if it is of a type that requires them.
59+
60+
To issue a navigation goal, a client should publish a message like:
61+
62+
.. code-block:: cpp
63+
64+
geometry_msgs::msg::PoseStamped goal_pose;
65+
goal_pose.header = ...
66+
goal_pose.pose.position = ....
67+
goal_pose.pose.orientation = ....
68+
69+
auto command = std::make_unique<easynav_interfaces::msg::NavigationControl>();
70+
command->header = goal_pose.header;
71+
command->seq = 32;
72+
command->user_id = "nav_user_1";
73+
command->type = easynav_interfaces::msg::NavigationControl::REQUEST;
74+
command->goals.header = goal_pose.header;
75+
command->goals.goals.push_back(goal_pose);
76+
77+
The system will then respond with messages of type ACCEPT, FEEDBACK, FINISHED, etc., according to the internal state.
78+
79+
Using `GoalManagerClient`
80+
-------------------------
81+
82+
Instead of manually implementing the communication protocol, developers are encouraged to use the `GoalManagerClient` class. It abstracts the handling of the `/easynav_control` topic and maintains the internal state machine automatically.
83+
84+
- `send_goal(PoseStamped goal)` issues a goal with proper message formatting.
85+
- `cancel()` sends a CANCEL message.
86+
- `get_state()` returns the current state (e.g., `State::NAVIGATING`, `State::NAVIGATION_FINISHED`, etc.).
87+
- After receiving a terminal state (`FINISHED`, `FAILED`, `CANCELLED`, `REJECTED`, or `ERROR`), you **must** call `reset()` to clear the state before issuing a new command.
88+
89+
Secondary Method: `/goal_pose` Topic
90+
====================================
91+
92+
For simplicity, EasyNav also listens to the topic `/goal_pose` of type `geometry_msgs/msg/PoseStamped`.
93+
Publishing a pose here is equivalent to publishing a `REQUEST` command on `/easynav_control`.
94+
95+
This interface is ideal for manual tools (such as RViz2 "2D Goal Pose") or simple applications where feedback tracking is not required.
96+
However, users may still subscribe to `/easynav_control` to monitor navigation status and transitions.
97+
98+
Conclusion
99+
==========
100+
101+
- For complete command and feedback control, use the `/easynav_control` topic with the `GoalManagerClient`.
102+
- For basic use cases, publishing to `/goal_pose` is sufficient.
103+
- After receiving any terminal state (FINISHED, FAILED, etc.), a RESET command is mandatory before a new REQUEST.

_sources/software/index.rst.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
.. _software:
22

33
EasyNav Software
4-
################
4+
****************
55

66
The EasyNav software is developed under the `EasyNavigation GitHub organization <https://github.com/EasyNavigation>`_, and it follows a **highly modular structure**. This modularity is reflected in the separation of functionality across multiple repositories, each dedicated to a specific role or typology:
77

88

99
C++ API
10-
*******
10+
=======
1111

1212
- `EasyNav Core <https://easynavigation.github.io/EasyNavigation/>`_
1313
- `EasyNav Simple Stack <https://easynavigation.github.io/easynav_simple_stack/>`_
@@ -18,12 +18,13 @@ C++ API
1818
.. toctree::
1919
:maxdepth: 1
2020

21+
./commanding.rst
2122
./blackboard.rst
2223
./perceptions.rst
2324

2425

2526
Repositories
26-
************
27+
============
2728

2829
Core
2930
----

_sources/software/perceptions.rst.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
Sensor Input and Perception Handling
5-
####################################
5+
====================================
66

77
In EasyNav, **all sensor input flows through a single component**: the ``SensorsNode``. This node is responsible for:
88

_sources/tutorials/easynav_simple_stack/index.rst.txt

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ It includes the following packages:
1515
- ``easynav_simple_maps_manager``: A manager that fuses a static map with incoming perceptions.
1616
- ``easynav_simple_planner``: A basic A* planner that generates paths over the map.
1717

18-
-------------------------------
18+
1919
The SimpleMap Representation
20-
-------------------------------
20+
============================
2121

2222
At the heart of this stack is the ``SimpleMap`` data structure. It represents the environment as a 2D occupancy grid
2323
where each cell can be either 0 (free), 1 (occupied), or -1 (unknown). ``SimpleMap`` supports:
@@ -30,9 +30,9 @@ where each cell can be either 0 (free), 1 (occupied), or -1 (unknown). ``SimpleM
3030
``SimpleMap`` is used for both static maps (loaded from file) and dynamic maps (updated from perceptions).
3131

3232

33-
-----
33+
3434
HowTo
35-
-----
35+
=====
3636

3737
.. toctree::
3838
:maxdepth: 1
@@ -41,13 +41,12 @@ HowTo
4141

4242

4343

44-
---------------
4544
Stack Reference
46-
---------------
45+
===============
46+
4747

48-
-------------------------------
4948
easynav_simple_maps_manager
50-
-------------------------------
49+
---------------------------
5150

5251
This component manages and fuses the static map and incoming perceptions into a dynamic map.
5352

@@ -83,9 +82,8 @@ Publishes:
8382
| map.dynamic | SimpleMap | Write |
8483
+------------------+--------------------------+------------+
8584

86-
-------------------------------
8785
easynav_simple_localizer
88-
-------------------------------
86+
------------------------
8987

9088
A basic AMCL-style localizer using particles and static maps.
9189

@@ -123,9 +121,8 @@ A basic AMCL-style localizer using particles and static maps.
123121
| robot_pose | nav_msgs/msg/Odometry | Write |
124122
+------------------+--------------------------+------------+
125123

126-
-------------------------------
127124
easynav_simple_planner
128-
-------------------------------
125+
----------------------
129126

130127
An A* planner over ``SimpleMap`` representations.
131128

@@ -155,9 +152,9 @@ An A* planner over ``SimpleMap`` representations.
155152
| path | nav_msgs/msg/Path | Write |
156153
+------------------+------------------------------+------------+
157154

158-
-------------------------------
155+
159156
easynav_simple_controller
160-
-------------------------------
157+
-------------------------
161158

162159
A PID-based controller that tracks a path in real time.
163160

@@ -191,9 +188,9 @@ A PID-based controller that tracks a path in real time.
191188
| cmd_vel | geometry_msgs/msg/TwistStamped | Write |
192189
+------------------+--------------------------------+------------+
193190

194-
-------------------------------
191+
195192
Example Configuration
196-
-------------------------------
193+
---------------------
197194

198195
.. code-block:: yaml
199196

_sources/tutorials/easynav_simple_stack/mapping.rst.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ It can directly consume this output. EasyNav also exposes the following service:
3939
4040
to save the current map (by default to `/tmp/default.map`).
4141

42-
Step-by-Step Instructions
43-
-------------------------
42+
Step-by-Step Instructions:
43+
4444

4545
1. **Launch the simulator (with or without GUI)**
4646

about/index.html

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<script src="../_static/js/theme.js"></script>
2121
<link rel="index" title="Index" href="../genindex.html" />
2222
<link rel="search" title="Search" href="../search.html" />
23-
<link rel="prev" title="EasyNav Software" href="../software/index.html" />
23+
<link rel="prev" title="Mapping with SLAM Toolbox and EasyNav" href="../tutorials/easynav_simple_stack/mapping.html" />
2424

2525
<link rel="stylesheet" href="../_static/tcs_theme.css" type="text/css" />
2626

@@ -59,11 +59,60 @@
5959
</ul>
6060
</li>
6161
<li class="toctree-l1"><a class="reference internal" href="../software/index.html">EasyNav Software</a><ul>
62-
<li class="toctree-l2"><a class="reference internal" href="../software/index.html#core">Core</a></li>
63-
<li class="toctree-l2"><a class="reference internal" href="../software/index.html#plugins">Plugins</a></li>
64-
<li class="toctree-l2"><a class="reference internal" href="../software/index.html#stacks">Stacks</a></li>
65-
<li class="toctree-l2"><a class="reference internal" href="../software/index.html#test-cases">Test Cases</a></li>
66-
<li class="toctree-l2"><a class="reference internal" href="../software/index.html#playgrounds">Playgrounds</a></li>
62+
<li class="toctree-l2"><a class="reference internal" href="../software/index.html#c-api">C++ API</a><ul>
63+
<li class="toctree-l3"><a class="reference internal" href="../software/commanding.html">Sending Navigation Commands to EasyNav</a><ul>
64+
<li class="toctree-l4"><a class="reference internal" href="../software/commanding.html#primary-method-easynav-control-topic">Primary Method: <cite>/easynav_control</cite> Topic</a></li>
65+
<li class="toctree-l4"><a class="reference internal" href="../software/commanding.html#secondary-method-goal-pose-topic">Secondary Method: <cite>/goal_pose</cite> Topic</a></li>
66+
<li class="toctree-l4"><a class="reference internal" href="../software/commanding.html#conclusion">Conclusion</a></li>
67+
</ul>
68+
</li>
69+
<li class="toctree-l3"><a class="reference internal" href="../software/blackboard.html">How to use the NavState BlackBoard</a><ul>
70+
<li class="toctree-l4"><a class="reference internal" href="../software/blackboard.html#overview">Overview</a></li>
71+
<li class="toctree-l4"><a class="reference internal" href="../software/blackboard.html#basic-api">Basic API</a></li>
72+
<li class="toctree-l4"><a class="reference internal" href="../software/blackboard.html#examples-from-plugins">Examples from Plugins</a></li>
73+
<li class="toctree-l4"><a class="reference internal" href="../software/blackboard.html#advanced-features">Advanced Features</a></li>
74+
<li class="toctree-l4"><a class="reference internal" href="../software/blackboard.html#best-practices">Best Practices</a></li>
75+
<li class="toctree-l4"><a class="reference internal" href="../software/blackboard.html#conclusion">Conclusion</a></li>
76+
</ul>
77+
</li>
78+
<li class="toctree-l3"><a class="reference internal" href="../software/perceptions.html">Sensor Input and Perception Handling</a><ul>
79+
<li class="toctree-l4"><a class="reference internal" href="../software/perceptions.html#sensor-configuration">Sensor Configuration</a></li>
80+
<li class="toctree-l4"><a class="reference internal" href="../software/perceptions.html#processing-point-perceptions">Processing Point Perceptions</a></li>
81+
<li class="toctree-l4"><a class="reference internal" href="../software/perceptions.html#operation-summary">Operation Summary</a></li>
82+
<li class="toctree-l4"><a class="reference internal" href="../software/perceptions.html#example-updating-a-map">Example: Updating a Map</a></li>
83+
<li class="toctree-l4"><a class="reference internal" href="../software/perceptions.html#fused-visualization">Fused Visualization</a></li>
84+
<li class="toctree-l4"><a class="reference internal" href="../software/perceptions.html#extending-to-other-modalities">Extending to Other Modalities</a></li>
85+
</ul>
86+
</li>
87+
</ul>
88+
</li>
89+
<li class="toctree-l2"><a class="reference internal" href="../software/index.html#repositories">Repositories</a><ul>
90+
<li class="toctree-l3"><a class="reference internal" href="../software/index.html#core">Core</a></li>
91+
<li class="toctree-l3"><a class="reference internal" href="../software/index.html#plugins">Plugins</a></li>
92+
<li class="toctree-l3"><a class="reference internal" href="../software/index.html#stacks">Stacks</a></li>
93+
<li class="toctree-l3"><a class="reference internal" href="../software/index.html#test-cases">Test Cases</a></li>
94+
<li class="toctree-l3"><a class="reference internal" href="../software/index.html#playgrounds">Playgrounds</a></li>
95+
</ul>
96+
</li>
97+
</ul>
98+
</li>
99+
<li class="toctree-l1"><a class="reference internal" href="../tutorials/index.html">EasyNav Stack Tutorials</a><ul>
100+
<li class="toctree-l2"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html">EasyNav Simple Stack Tutorials</a><ul>
101+
<li class="toctree-l3"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#the-simplemap-representation">The SimpleMap Representation</a></li>
102+
<li class="toctree-l3"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#howto">HowTo</a><ul>
103+
<li class="toctree-l4"><a class="reference internal" href="../tutorials/easynav_simple_stack/mapping.html">Mapping with SLAM Toolbox and EasyNav</a></li>
104+
</ul>
105+
</li>
106+
<li class="toctree-l3"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#stack-reference">Stack Reference</a><ul>
107+
<li class="toctree-l4"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#easynav-simple-maps-manager">easynav_simple_maps_manager</a></li>
108+
<li class="toctree-l4"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#easynav-simple-localizer">easynav_simple_localizer</a></li>
109+
<li class="toctree-l4"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#easynav-simple-planner">easynav_simple_planner</a></li>
110+
<li class="toctree-l4"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#easynav-simple-controller">easynav_simple_controller</a></li>
111+
<li class="toctree-l4"><a class="reference internal" href="../tutorials/easynav_simple_stack/index.html#example-configuration">Example Configuration</a></li>
112+
</ul>
113+
</li>
114+
</ul>
115+
</li>
67116
</ul>
68117
</li>
69118
<li class="toctree-l1 current"><a class="current reference internal" href="#">About and Contact</a><ul>

0 commit comments

Comments
 (0)