Skip to content

Commit 7bd90be

Browse files
committed
feat(demos/ota): drop areas from manifest - components are the boundary
Areas were doing zero work in this manifest: every area held one or two components, every component lived in exactly one area, and the operator viewing the tree just saw the same things twice. For a single-robot demo the meaningful boundaries are: - Components = OTA / hardware units (lidar, nav2 stack, gateway, ...). "What can I swap?" - Apps = the ROS 2 nodes that live on a component. - Functions = capability groupings (Autonomous Navigation, Perception) that pull apps from across components. SOVD allows Areas, but they only earn their slot when there's a real zone partition - powertrain / body / chassis on a vehicle ECU mesh, or multi-robot tenancy. Adding them here was decorative. The Entity Browser Functions section already covers the cross-cutting view (Perception spans LiDAR Sensor + TurtleBot3 Base components). With areas gone the tree shows the operator three things, each with a job: what to update, which node to look at, and which capability is at risk.
1 parent dab79c9 commit 7bd90be

1 file changed

Lines changed: 18 additions & 43 deletions

File tree

demos/ota_nav2_sensor_fix/manifest.yaml

Lines changed: 18 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,24 @@
22
#
33
# SOVD manifest for the OTA over SOVD nav2 sensor-fix demo.
44
#
5-
# The demo runs in hybrid discovery mode: this manifest defines areas /
6-
# components / apps / functions, runtime discovery fills in topic
7-
# bindings, and OTA-installed nodes (e.g. obstacle_classifier_v2 after
8-
# trigger-install.sh) appear automatically without needing a manifest
9-
# entry.
5+
# Hybrid discovery: the manifest defines components + apps + functions,
6+
# runtime discovery fills in topics/services/params, and OTA-installed
7+
# nodes (obstacle_classifier_v2 after trigger-install.sh) appear
8+
# automatically without needing a manifest entry.
109
#
11-
# The point of the manifest is to make the Functions tree meaningful:
12-
# without it the gateway either auto-synthesizes one Function per
13-
# namespace (mostly single-host noise on this stack, where everything
14-
# lives at root) or leaves it empty. Here we group nodes by capability
15-
# so an operator viewing the tree sees Navigation / Localization /
16-
# Perception / Diagnostics / Visualization, not opaque hashes.
10+
# 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.
15+
# - 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.
18+
#
19+
# 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.
1723

1824
manifest_version: "1.0"
1925

@@ -31,74 +37,43 @@ config:
3137
inherit_runtime_resources: true
3238

3339
# =============================================================================
34-
# AREAS
35-
# =============================================================================
36-
areas:
37-
- id: robot
38-
name: "Robot"
39-
description: "TurtleBot3 platform, sensors, and TF infrastructure"
40-
namespace: /
41-
42-
- id: navigation
43-
name: "Navigation"
44-
description: "Nav2 motion / planning / control stack"
45-
namespace: /
46-
47-
- id: diagnostics
48-
name: "Diagnostics"
49-
description: "ros2_medkit gateway, fault manager, OTA"
50-
namespace: /
51-
52-
- id: visualization
53-
name: "Visualization"
54-
description: "Foxglove bridge and simulator-ROS bridge"
55-
namespace: /
56-
57-
# =============================================================================
58-
# COMPONENTS - logical groupings the apps live on
40+
# COMPONENTS - OTA / hardware boundaries; the apps live on these
5941
# =============================================================================
6042
components:
6143
- id: lidar-sensor
6244
name: "LiDAR Sensor"
6345
type: "sensor"
6446
description: "2D LiDAR (broken_lidar / fixed_lidar after OTA swap)"
65-
area: robot
6647

6748
- id: robot-base
6849
name: "TurtleBot3 Base"
6950
type: "platform"
7051
description: "Robot platform - URDF publisher and gz bridge"
71-
area: robot
7252

7353
- id: nav2-motion
7454
name: "Nav2 Motion"
7555
type: "controller"
7656
description: "BT navigator, planner, controller, behaviors, costmaps"
77-
area: navigation
7857

7958
- id: nav2-localization
8059
name: "Nav2 Localization"
8160
type: "controller"
8261
description: "AMCL + map server + localization lifecycle manager"
83-
area: navigation
8462

8563
- id: medkit-gateway-unit
8664
name: "ros2_medkit Gateway"
8765
type: "controller"
8866
description: "SOVD HTTP gateway with the OTA update plugin loaded"
89-
area: diagnostics
9067

9168
- id: fault-manager-unit
9269
name: "Fault Manager"
9370
type: "controller"
9471
description: "Fault aggregation backend behind /faults"
95-
area: diagnostics
9672

9773
- id: foxglove-unit
9874
name: "Foxglove Bridge"
9975
type: "controller"
10076
description: "WebSocket bridge for Foxglove Studio panels"
101-
area: visualization
10277

10378
# =============================================================================
10479
# APPS - one per ROS 2 node we care about (skip nav2-internal _rclcpp_node

0 commit comments

Comments
 (0)