You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _sources/design/index.rst.txt
+69-60Lines changed: 69 additions & 60 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@ Core Design and Architecture
5
5
6
6
**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.
7
7
8
-
.. image:: ../images/easynav_simple_design.png
8
+
.. image:: ../images/easynav_simple_design_v2.png
9
9
:align:center
10
10
:alt:EasyNav architecture diagram
11
11
@@ -23,71 +23,22 @@ EasyNav runs within a single process that hosts a ROS 2 **Lifecycle Node** calle
23
23
24
24
- **Controller Node**: Generates velocity commands to follow the planned path. Its functionality is encapsulated in a plugin, which outputs either ``Twist`` or ``TwistStamped`` messages depending on configuration.
25
25
26
+
An EasyNav application is built by combining multiple plugins from the different EasyNav components. Typical configurations may include combinations such as the following:
26
27
27
-
NavState: The Shared Blackboard
28
-
===============================
29
-
30
-
A key architectural component of EasyNav is the **NavState**, a shared *blackboard* that holds all the internal state information required by the navigation system.
31
-
32
-
Each module in EasyNav—such as the Localizer, Planner, or Controller—reads its inputs from the NavState and writes its outputs back to it. This central structure replaces the need for internal ROS 2 communications between modules.
33
-
34
-
The motivation behind using a shared blackboard is to:
35
-
36
-
- **Avoid ROS 2 topic-based communication internally**, reducing unnecessary overhead and complexity.
37
-
- **Improve real-time determinism**, as data access becomes local and predictable.
38
-
- **Simplify integration and debugging**, by consolidating all system-relevant information in a single place.
39
-
40
-
The NavState contains data such as:
41
-
42
-
- the robot's estimated pose,
43
-
- the current navigation goal,
44
-
- planned paths,
45
-
- velocity commands,
46
-
- perception data,
47
-
- and diagnostic or meta-state information.
48
-
49
-
By inspecting the NavState at runtime, developers gain full visibility into the internal state of EasyNav at any given moment. This approach not only improves transparency, but also enables advanced tooling for monitoring, introspection, and explainability.
50
-
51
-
Future versions of EasyNav may include graphical or CLI-based tools to explore and trace the NavState over time.
52
-
53
-
54
-
Real-Time Execution Model
55
-
=========================
56
-
57
-
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.
58
-
59
-
To achieve this, EasyNav separates execution into two distinct control loops:
60
-
61
-
- **Real-Time Cycle**
62
-
This loop is optimized for minimal end-to-end latency. Its goal is to process new sensor data and update the robot’s motion commands as quickly as possible. It includes:
63
-
64
-
- perception input processing,
65
-
- pose prediction via odometry,
66
-
- and velocity command generation (e.g., ``Twist`` or ``TwistStamped``).
67
-
68
-
- **Non-Real-Time Cycle**
69
-
This loop handles operations where occasional execution delays are tolerable. Tasks in this loop include:
70
-
71
-
- map updates,
72
-
- localization corrections based on perception (e.g., particle filter resampling),
73
-
- and path planning.
74
-
75
-
.. image:: ../images/easynav_design.png
28
+
.. image:: ../images/plugin_combinations.png
76
29
:align:center
77
-
:alt:EasyNav architecture diagram with the Real-Time and Non-Real-Time cycles.
78
-
79
-
80
-
Each EasyNav module is configured with a frequency for both real-time and non-real-time cycles. These are specified in the parameters as `rt_freq` and `freq`, respectively.
30
+
:alt:Plugin combinations
81
31
82
-
Additionally, when new perception data is received, the real-time cycle is **triggered immediately**, allowing the system to respond as fast as possible and minimize perception-to-action latency.
32
+
This figure illustrates several possible plugin compositions. The key aspect is ensuring that the selected plugins are compatible with one another. For example, if a maps manager based on costmaps is chosen, the remaining plugins must either support this representation or operate independently of it. In practice, the localizer and planner are usually tightly coupled to the representation defined by the maps manager, whereas the controller tends to be more independent, since it typically relies on route formats that are relatively standardized.
83
33
84
-
This dual-cycle model balances **responsiveness** with **computational stability**, ensuring critical actions happen with deterministic timing while less urgent tasks are scheduled opportunistically.
34
+
It is also possible to use *Dummy* plugins. Each component provides one in case you want to build an application that does not require that specific functionality. For example, a person-following application may not need either a map or a localizer, while an outdoor navigation application may rely on GPS for localization and simply plan a straight-line path to the target.
85
35
86
36
87
-
Plugin Configuration
88
-
====================
37
+
.. image:: ../images/plugin_combinations_2.png
38
+
:align:center
39
+
:alt:Alternative plugin combinations
89
40
90
-
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:
41
+
These plugin combinations are defined in the single EasyNav configuration file, where the plugins for each component and their execution frequencies are specified.
91
42
92
43
.. code-block:: yaml
93
44
@@ -158,7 +109,7 @@ Let us examine the parameter file used in the *Getting Started* section. Each no
158
109
use_sim_time: true
159
110
position_tolerance: 0.1
160
111
angle_tolerance: 0.05
161
-
112
+
162
113
Each node declares one or more plugin types (e.g., `simple`) that can be dynamically selected. The plugin name (e.g., `easynav_simple_controller/SimpleController`) must match the name registered in the plugin system.
163
114
164
115
This design allows for easy experimentation with different algorithms or system behaviors simply by modifying configuration files—without changing any source code.
@@ -226,3 +177,61 @@ Below is an example configuration using dummy plugins for all components, effect
226
177
angle_tolerance: 0.05
227
178
228
179
This configuration is especially useful for testing system integration, message flow, and user interfaces without requiring sensor data or a simulated robot. You can later replace dummy plugins with functional ones as needed.
180
+
181
+
182
+
NavState: The Shared Blackboard
183
+
===============================
184
+
185
+
A key architectural component of EasyNav is the **NavState**, a shared *blackboard* that holds all the internal state information required by the navigation system.
186
+
187
+
Each module in EasyNav—such as the Localizer, Planner, or Controller—reads its inputs from the NavState and writes its outputs back to it. This central structure replaces the need for internal ROS 2 communications between modules.
188
+
189
+
The motivation behind using a shared blackboard is to:
190
+
191
+
- **Avoid ROS 2 topic-based communication internally**, reducing unnecessary overhead and complexity.
192
+
- **Improve real-time determinism**, as data access becomes local and predictable.
193
+
- **Simplify integration and debugging**, by consolidating all system-relevant information in a single place.
194
+
195
+
The NavState contains data such as:
196
+
197
+
- the robot's estimated pose,
198
+
- the current navigation goal,
199
+
- planned paths,
200
+
- velocity commands,
201
+
- perception data,
202
+
- and diagnostic or meta-state information.
203
+
204
+
By inspecting the NavState at runtime, developers gain full visibility into the internal state of EasyNav at any given moment. This approach not only improves transparency, but also enables advanced tooling for monitoring, introspection, and explainability.
205
+
206
+
Future versions of EasyNav may include graphical or CLI-based tools to explore and trace the NavState over time.
207
+
208
+
209
+
Real-Time Execution Model
210
+
=========================
211
+
212
+
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.
213
+
214
+
To achieve this, EasyNav separates execution into two distinct control loops:
215
+
216
+
- **Real-Time Cycle**
217
+
This loop is optimized for minimal end-to-end latency. Its goal is to process new sensor data and update the robot’s motion commands as quickly as possible. It includes:
218
+
219
+
- perception input processing,
220
+
- pose prediction via odometry,
221
+
- and velocity command generation (e.g., ``Twist`` or ``TwistStamped``).
222
+
223
+
- **Non-Real-Time Cycle**
224
+
This loop handles operations where occasional execution delays are tolerable. Tasks in this loop include:
225
+
226
+
- map updates,
227
+
- localization corrections based on perception (e.g., particle filter resampling),
228
+
- and path planning.
229
+
230
+
Each EasyNav module is configured with a frequency for both real-time and non-real-time cycles. These are specified in the parameters as `rt_freq` and `freq`, respectively.
231
+
232
+
Additionally, when new perception data is received, the real-time cycle is **triggered immediately**, allowing the system to respond as fast as possible and minimize perception-to-action latency.
233
+
234
+
This dual-cycle model balances **responsiveness** with **computational stability**, ensuring critical actions happen with deterministic timing while less urgent tasks are scheduled opportunistically.
- The `EasyNavigation` repository contains the core framework of EasyNav.
40
38
- The `easynav_simple_stack` repository provides a collection of plugins for a basic navigation stack. This stack is characterized by its use of a 2D occupancy grid, where each cell can be either free (`0`) or occupied (`1`).
41
39
- The `easynav_playground_kobuki` repository includes everything needed to simulate a Turtlebot2 robot, also known as Kobuki.
42
40
- The `easynav_indoor_testcase` repository provides you with maps and param files for some test cases.
0 commit comments