sl-perception created pull request seb/saltylab-firmware#732

sl-perception
Fri, 17 Apr 2026 22:21:05 -0400

732#feat: systemd auto-start for ROS2 + dashboard on Orin boot (bd-1hyn)#

Summary

4 new systemd services: saltybot-ros2, saltybot-esp32-serial, saltybot-here4, saltybot-dashboard — full stack comes up on boot with correct dep ordering

ros2-launch.sh wrapper: sources ROS2 Humble + workspace overlay; used by all ROS2 service units

saltybot.target updated with boot-order comments and Wants for all new services

can-bringup.service bitrate updated 500 kbps → 1 Mbps (DroneCAN for Here4, bd-p47c)

70-canable.rules moves bitrate out of udev RUN+= into the service; adds TAG+=systemd

80-esp32.rules creates /dev/esp32-balance (CH343) and /dev/esp32-io (ESP32-S3 CDC) symlinks

install_systemd.sh rewritten: colcon build, installs all units + udev rules, enables mosquitto, usermod dialout

Fixes pre-existing full_stack.launch.py SyntaxError: resolves 8 unresolved merge conflict markers from ESP32-S3 rename PR, and fixes missing indent on enable_mission_logging_arg

Boot dependency chain

network-online.target
  → can-bringup.service          (CANable2 @ 1 Mbps)
      → saltybot-here4.service   (/gps/fix, /here4/*)
  → saltybot-esp32-serial.service (/can/vesc/*, /saltybot/attitude)
  → saltybot-ros2.service        (full_stack.launch.py, enable_bridge:=false)
      → saltybot-dashboard.service (port 8080)

Dependencies

saltybot-esp32-serial requires bd-wim1 (PR #727)

saltybot-here4 requires bd-p47c (PR #728)

Test plan

sudo ./jetson/systemd/install_systemd.sh completes without errors

systemctl status saltybot.target shows active after reboot

journalctl -fu saltybot-ros2 shows ROS2 nodes starting in sequence

journalctl -fu saltybot-here4 shows Here4 DroneCAN node publishing GPS fix

journalctl -fu saltybot-esp32-serial shows ESP32 BALANCE bridge connecting

Dashboard accessible at http://<orin-ip>:8080

systemctl stop saltybot.target cleanly stops all services

Unplug/replug CANable2: can-bringup + saltybot-here4 auto-restart

Resolves bd-1hyn
🤖 Generated with Claude Code