Implements full boot-time auto-start for the SaltyBot ROS2 stack on
Jetson Orin. Everything comes up automatically after power-on with
correct dependency ordering and restart-on-failure for each service.
New systemd services:
saltybot-ros2.service full_stack.launch.py (perception + SLAM + Nav2)
saltybot-esp32-serial.service ESP32-S3 BALANCE UART bridge (bd-wim1, PR #727)
saltybot-here4.service Here4 DroneCAN GPS bridge (bd-p47c, PR #728)
saltybot-dashboard.service Web dashboard on port 8080
Updated:
saltybot.target now Wants all four new services with
boot-order comments
can-bringup.service bitrate 500 kbps → 1 Mbps (DroneCAN for Here4)
70-canable.rules remove bitrate from udev RUN+=; let service
own the bitrate, add TAG+=systemd for device unit
install_systemd.sh installs all services + udev rules, colcon
build, enables mosquitto, usermod dialout
full_stack.launch.py resolve 8 merge conflict markers (ESP32-S3
rename) and fix missing indent on
enable_mission_logging_arg — file was
un-launchable with SyntaxError
New:
scripts/ros2-launch.sh sources ROS2 Humble + workspace overlay,
then exec ros2 launch — used by all
ROS2 service units via ExecStart=
udev/80-esp32.rules /dev/esp32-balance (CH343) and
/dev/esp32-io (ESP32-S3 native USB CDC)
Resolves bd-1hyn
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds slcan setup script and saltybot_can_bridge ROS2 package implementing
full CAN bus integration between the Orin and the Mamba motor controller /
VESC motor controllers via a CANable 2.0 USB dongle (slcan interface).
- jetson/scripts/setup_can.sh: slcand-based bring-up/tear-down for slcan0
at 500 kbps with error handling (already up, device missing, retry)
- saltybot_can_bridge/mamba_protocol.py: CAN message ID constants and
encode/decode helpers for velocity, mode, e-stop, IMU, battery, VESC state
- saltybot_can_bridge/can_bridge_node.py: ROS2 node subscribing to /cmd_vel
and /estop, publishing /can/imu, /can/battery, /can/vesc/{left,right}/state
and /can/connection_status; background reader thread, watchdog zero-vel,
auto-reconnect every 5 s on CAN error
- config/can_bridge_params.yaml: default params (slcan0, VESC IDs 56/68,
Mamba ID 1, 0.5 s command timeout)
- test/test_can_bridge.py: 30 unit tests covering encode/decode round-trips
and edge cases — all pass without ROS2 or CAN hardware
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- udev: 70-canable.rules — gs_usb VID/PID 1d50:606f, names iface can0 and brings it up at 500 kbps on plug-in
- systemd: can-bringup.service — oneshot service bound to sys-subsystem-net-devices-can0.device
- scripts: can_setup.sh — manual up/down/verify helper; candump verify for VESC IDs 61 (0x3D) and 79 (0x4F)
- install_systemd.sh updated to install can-bringup.service and all udev rules
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>