88# automatically without needing a manifest entry.
99#
1010# Hierarchy used for this demo:
11- # - Components are the OTA / hardware boundaries: a LiDAR sensor, the
12- # Nav2 motion stack, the diagnostics services, etc. This is what
13- # "you can swap" looks like.
14- # - Apps are the ROS 2 nodes that live on a component.
11+ # - One Component: the robot itself. SOVD lets a manifest declare
12+ # multiple components (e.g. one per ECU on a vehicle), but here
13+ # everything runs on a single host so a flat single-component model
14+ # is honest and avoids fake "lidar-sensor / nav2-motion / ..."
15+ # subdivisions that don't correspond to anything you can actually
16+ # swap independently in this demo.
17+ # - Apps are the ROS 2 nodes - one entry per node we want the operator
18+ # to see. They all live on the single robot component.
1519# - Functions are capability groupings - "Autonomous Navigation",
16- # "Perception" - that pull apps from across components when the
17- # capability is delivered by more than one node .
20+ # "Perception" etc. - that pull apps together by what they deliver,
21+ # orthogonally to where they run .
1822#
1923# Areas are intentionally left out. SOVD allows them, but they only add
20- # value when there's a meaningful spatial / zone partition (powertrain /
21- # body / chassis on a vehicle ECU mesh). On a single robot they just
22- # regroup the same components a second time and clutter the tree .
24+ # value when there's a meaningful zone partition (powertrain / body /
25+ # chassis on a vehicle ECU mesh, or multi-robot tenancy ). For a single
26+ # robot they just regroup the same component a second time.
2327
2428manifest_version : " 1.0"
2529
@@ -37,43 +41,14 @@ config:
3741 inherit_runtime_resources : true
3842
3943# =============================================================================
40- # COMPONENTS - OTA / hardware boundaries; the apps live on these
44+ # COMPONENTS - one per OTA boundary. For this demo there's a single host
45+ # so a single component owns every app.
4146# =============================================================================
4247components :
43- - id : lidar-sensor
44- name : " LiDAR Sensor"
45- type : " sensor"
46- description : " 2D LiDAR (broken_lidar / fixed_lidar after OTA swap)"
47-
48- - id : robot-base
49- name : " TurtleBot3 Base"
48+ - id : turtlebot3
49+ name : " TurtleBot3 Robot"
5050 type : " platform"
51- description : " Robot platform - URDF publisher and gz bridge"
52-
53- - id : nav2-motion
54- name : " Nav2 Motion"
55- type : " controller"
56- description : " BT navigator, planner, controller, behaviors, costmaps"
57-
58- - id : nav2-localization
59- name : " Nav2 Localization"
60- type : " controller"
61- description : " AMCL + map server + localization lifecycle manager"
62-
63- - id : medkit-gateway-unit
64- name : " ros2_medkit Gateway"
65- type : " controller"
66- description : " SOVD HTTP gateway with the OTA update plugin loaded"
67-
68- - id : fault-manager-unit
69- name : " Fault Manager"
70- type : " controller"
71- description : " Fault aggregation backend behind /faults"
72-
73- - id : foxglove-unit
74- name : " Foxglove Bridge"
75- type : " controller"
76- description : " WebSocket bridge for Foxglove Studio panels"
51+ description : " TurtleBot3 burger running headless Gazebo, Nav2, the ros2_medkit gateway, and the OTA-managed sensor stack."
7752
7853# =============================================================================
7954# APPS - one per ROS 2 node we care about (skip nav2-internal _rclcpp_node
@@ -84,159 +59,159 @@ apps:
8459 - id : scan-sensor
8560 name : " Scan Sensor"
8661 category : " sensor"
87- is_located_on : lidar-sensor
62+ is_located_on : turtlebot3
8863 description : " LaserScan publisher (broken_lidar pre-OTA, fixed_lidar post-OTA)"
8964 ros_binding : { node_name: scan_sensor_node, namespace: / }
9065
9166 - id : ros-gz-bridge
9267 name : " ROS-Gazebo Bridge"
9368 category : " simulation"
94- is_located_on : lidar-sensor
69+ is_located_on : turtlebot3
9570 description : " Bridges /scan_sim and /clock from gz-sim"
9671 ros_binding : { node_name: ros_gz_bridge, namespace: / }
9772
9873 # ── Robot platform ────────────────────────────────────────────────
9974 - id : robot-state-publisher
10075 name : " Robot State Publisher"
10176 category : " platform"
102- is_located_on : robot-base
77+ is_located_on : turtlebot3
10378 description : " Publishes the robot URDF TF tree"
10479 ros_binding : { node_name: robot_state_publisher, namespace: / }
10580
10681 # ── Nav2 motion ───────────────────────────────────────────────────
10782 - id : bt-navigator
10883 name : " BT Navigator"
10984 category : " navigation"
110- is_located_on : nav2-motion
85+ is_located_on : turtlebot3
11186 description : " Behavior Tree navigator - hosts navigate_to_pose action"
11287 ros_binding : { node_name: bt_navigator, namespace: / }
11388
11489 - id : planner-server
11590 name : " Planner Server"
11691 category : " navigation"
117- is_located_on : nav2-motion
92+ is_located_on : turtlebot3
11893 description : " Global path planner"
11994 ros_binding : { node_name: planner_server, namespace: / }
12095
12196 - id : controller-server
12297 name : " Controller Server"
12398 category : " navigation"
124- is_located_on : nav2-motion
99+ is_located_on : turtlebot3
125100 description : " Local path follower"
126101 ros_binding : { node_name: controller_server, namespace: / }
127102
128103 - id : smoother-server
129104 name : " Smoother Server"
130105 category : " navigation"
131- is_located_on : nav2-motion
106+ is_located_on : turtlebot3
132107 description : " Path smoothing"
133108 ros_binding : { node_name: smoother_server, namespace: / }
134109
135110 - id : route-server
136111 name : " Route Server"
137112 category : " navigation"
138- is_located_on : nav2-motion
113+ is_located_on : turtlebot3
139114 description : " Route planning"
140115 ros_binding : { node_name: route_server, namespace: / }
141116
142117 - id : behavior-server
143118 name : " Behavior Server"
144119 category : " navigation"
145- is_located_on : nav2-motion
120+ is_located_on : turtlebot3
146121 description : " Recovery behaviors"
147122 ros_binding : { node_name: behavior_server, namespace: / }
148123
149124 - id : waypoint-follower
150125 name : " Waypoint Follower"
151126 category : " navigation"
152- is_located_on : nav2-motion
127+ is_located_on : turtlebot3
153128 description : " Sequenced waypoint navigation"
154129 ros_binding : { node_name: waypoint_follower, namespace: / }
155130
156131 - id : velocity-smoother
157132 name : " Velocity Smoother"
158133 category : " navigation"
159- is_located_on : nav2-motion
134+ is_located_on : turtlebot3
160135 description : " /cmd_vel smoothing"
161136 ros_binding : { node_name: velocity_smoother, namespace: / }
162137
163138 - id : collision-monitor
164139 name : " Collision Monitor"
165140 category : " navigation"
166- is_located_on : nav2-motion
141+ is_located_on : turtlebot3
167142 description : " Emergency stop on imminent collision"
168143 ros_binding : { node_name: collision_monitor, namespace: / }
169144
170145 - id : docking-server
171146 name : " Docking Server"
172147 category : " navigation"
173- is_located_on : nav2-motion
148+ is_located_on : turtlebot3
174149 description : " Approach + dock action"
175150 ros_binding : { node_name: docking_server, namespace: / }
176151
177152 - id : global-costmap
178153 name : " Global Costmap"
179154 category : " navigation"
180- is_located_on : nav2-motion
155+ is_located_on : turtlebot3
181156 description : " Static + obstacle costmap for planning"
182157 ros_binding : { node_name: global_costmap, namespace: /global_costmap }
183158
184159 - id : local-costmap
185160 name : " Local Costmap"
186161 category : " navigation"
187- is_located_on : nav2-motion
162+ is_located_on : turtlebot3
188163 description : " Local rolling costmap for control"
189164 ros_binding : { node_name: local_costmap, namespace: /local_costmap }
190165
191166 - id : lifecycle-manager-navigation
192167 name : " Lifecycle Manager (Navigation)"
193168 category : " navigation"
194- is_located_on : nav2-motion
169+ is_located_on : turtlebot3
195170 description : " Nav2 motion lifecycle orchestration"
196171 ros_binding : { node_name: lifecycle_manager_navigation, namespace: / }
197172
198173 # ── Nav2 localization ─────────────────────────────────────────────
199174 - id : amcl
200175 name : " AMCL"
201176 category : " localization"
202- is_located_on : nav2-localization
177+ is_located_on : turtlebot3
203178 description : " Adaptive Monte Carlo Localization"
204179 ros_binding : { node_name: amcl, namespace: / }
205180
206181 - id : map-server
207182 name : " Map Server"
208183 category : " localization"
209- is_located_on : nav2-localization
184+ is_located_on : turtlebot3
210185 description : " Static map publisher"
211186 ros_binding : { node_name: map_server, namespace: / }
212187
213188 - id : lifecycle-manager-localization
214189 name : " Lifecycle Manager (Localization)"
215190 category : " localization"
216- is_located_on : nav2-localization
191+ is_located_on : turtlebot3
217192 description : " Localization lifecycle orchestration"
218193 ros_binding : { node_name: lifecycle_manager_localization, namespace: / }
219194
220195 # ── Diagnostics ───────────────────────────────────────────────────
221196 - id : medkit-gateway
222197 name : " ros2_medkit Gateway"
223198 category : " gateway"
224- is_located_on : medkit-gateway-unit
199+ is_located_on : turtlebot3
225200 description : " SOVD REST gateway, hosts the OTA plugin"
226201 ros_binding : { node_name: ros2_medkit_gateway, namespace: / }
227202
228203 - id : medkit-fault-manager
229204 name : " Fault Manager"
230205 category : " diagnostics"
231- is_located_on : fault-manager-unit
206+ is_located_on : turtlebot3
232207 description : " Fault aggregation + storage"
233208 ros_binding : { node_name: fault_manager, namespace: / }
234209
235210 # ── Visualization ─────────────────────────────────────────────────
236211 - id : foxglove-bridge
237212 name : " Foxglove Bridge"
238213 category : " visualization"
239- is_located_on : foxglove-unit
214+ is_located_on : turtlebot3
240215 description : " WebSocket bridge on :8765"
241216 ros_binding : { node_name: foxglove_bridge, namespace: / }
242217
0 commit comments