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>
55 lines
1.8 KiB
Desktop File
55 lines
1.8 KiB
Desktop File
[Unit]
|
|
Description=SaltyBot ESP32-S3 BALANCE UART Serial Bridge (bd-wim1)
|
|
Documentation=https://gitea.vayrette.com/seb/saltylab-firmware/issues/bd-wim1
|
|
# Requires package: saltybot_esp32_serial (merged in bd-wim1 → PR #727)
|
|
#
|
|
# Publishes:
|
|
# /saltybot/attitude String JSON (pitch, motor_cmd, vbat_mv, state)
|
|
# /saltybot/balance_state String
|
|
# /can/battery BatteryState
|
|
# /can/vesc/left/state Float32MultiArray [erpm, voltage_v, current_a, temp_c]
|
|
# /can/vesc/right/state Float32MultiArray
|
|
# /can/connection_status String
|
|
#
|
|
# Subscribes:
|
|
# /cmd_vel Twist → DRIVE command to ESP32 BALANCE
|
|
# /estop Bool → ESTOP command
|
|
# /saltybot/arm Bool → ARM command
|
|
# /saltybot/pid_update String → PID gains update
|
|
After=network-online.target
|
|
# Wait for /dev/esp32-balance (created by 80-esp32.rules udev rule).
|
|
# TAG+="systemd" in the udev rule makes systemd track dev-esp32\x2dbalance.device.
|
|
# If device is not present at boot the node's auto-reconnect loop handles it.
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=orin
|
|
Group=dialout
|
|
|
|
# ROS2 Humble environment + workspace overlay
|
|
Environment="ROS_DOMAIN_ID=42"
|
|
Environment="ROS_DISTRO=humble"
|
|
Environment="SALTYBOT_WS=/opt/saltybot/jetson/ros2_ws/install"
|
|
|
|
ExecStart=/opt/saltybot/scripts/ros2-launch.sh \
|
|
saltybot_esp32_serial esp32_balance.launch.py
|
|
|
|
# The node auto-reconnects on serial disconnect (2 s retry).
|
|
# Restart=on-failure covers node crash; RestartSec gives the device time to re-enumerate.
|
|
Restart=on-failure
|
|
RestartSec=5s
|
|
StartLimitInterval=60s
|
|
StartLimitBurst=5
|
|
|
|
TimeoutStartSec=30s
|
|
TimeoutStopSec=10s
|
|
|
|
# Logging
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
SyslogIdentifier=saltybot-esp32-serial
|
|
|
|
[Install]
|
|
WantedBy=saltybot.target
|