feat: ROS2 launch orchestrator for full SaltyBot bringup (Issue #577) #582

Merged
sl-jetson merged 2 commits from sl-jetson/issue-577-bringup-launch into main 2026-03-14 13:32:11 -04:00
Collaborator

Summary

Implements Issue #577 — unified ROS2 launch orchestrator for full SaltyBot bringup.

New files

  • jetson/ros2_ws/src/saltybot_bringup/launch/saltybot_bringup.launch.py — main orchestrator
  • jetson/ros2_ws/src/saltybot_bringup/saltybot_bringup/launch_profiles.py — profile dataclasses
  • jetson/ros2_ws/src/saltybot_bringup/test/test_launch_orchestrator.py — 53 unit tests (all pass)

Launch orchestrator features

  • 4 startup groups with timer-based health gates:
    • Group A (t=0): STM32 bridge, sensors, motor daemon, sensor health
    • Group B (t=8s, full/debug): UWB, person/object detection, depth costmap, lidar avoidance, gimbal, audio
    • Group C (t=16s, full/debug): SLAM, follower, Nav2+docking (t=22s)
    • Group D (t=26s full / t=30s debug): social, CSI cameras, rosbridge
  • 3 profiles: minimal (drivers only), full (complete stack), debug (full + RViz + bag + verbose)
  • Estop on shutdown: RegisterEventHandler(OnShutdown) publishes /saltybot/estop
  • Debug extras (t=3s): bag recorder + RViz2 node
  • Profile arg: profile:=minimal|full|debug (default: full)

Tests — 53 passing

  • Profile names and factory validation
  • Minimal/Full/Debug flag correctness
  • Profile hierarchy: minimal ⊂ full ⊂ debug
  • Timing gate ordering and values
  • Safety parameter bounds
  • to_dict serialization
  • Hardware port defaults
## Summary Implements Issue #577 — unified ROS2 launch orchestrator for full SaltyBot bringup. ### New files - `jetson/ros2_ws/src/saltybot_bringup/launch/saltybot_bringup.launch.py` — main orchestrator - `jetson/ros2_ws/src/saltybot_bringup/saltybot_bringup/launch_profiles.py` — profile dataclasses - `jetson/ros2_ws/src/saltybot_bringup/test/test_launch_orchestrator.py` — 53 unit tests (all pass) ### Launch orchestrator features - **4 startup groups** with timer-based health gates: - Group A (t=0): STM32 bridge, sensors, motor daemon, sensor health - Group B (t=8s, full/debug): UWB, person/object detection, depth costmap, lidar avoidance, gimbal, audio - Group C (t=16s, full/debug): SLAM, follower, Nav2+docking (t=22s) - Group D (t=26s full / t=30s debug): social, CSI cameras, rosbridge - **3 profiles**: minimal (drivers only), full (complete stack), debug (full + RViz + bag + verbose) - **Estop on shutdown**: RegisterEventHandler(OnShutdown) publishes /saltybot/estop - **Debug extras** (t=3s): bag recorder + RViz2 node - Profile arg: `profile:=minimal|full|debug` (default: full) ### Tests — 53 passing - Profile names and factory validation - Minimal/Full/Debug flag correctness - Profile hierarchy: minimal ⊂ full ⊂ debug - Timing gate ordering and values - Safety parameter bounds - to_dict serialization - Hardware port defaults
sl-jetson added 2 commits 2026-03-14 11:58:14 -04:00
Adds saltybot_bringup.launch.py with ordered startup groups (drivers→
perception→navigation→UI), timer-based health gates, configurable
profiles (minimal/full/debug), and estop on Ctrl-C shutdown.

Also adds launch_profiles.py dataclass module and 53-test coverage for
profile hierarchy, timing gates, safety bounds, and to_dict serialization.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson merged commit e9429e6177 into main 2026-03-14 13:32:11 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#582
No description provided.