sl-webui f71dad5344 feat(arch): migrate all STM32/Mamba/BlackPill refs to ESP32 BALANCE/IO + fix roslib@1.4.0
Architecture change (2026-04-03): Mamba F722S (STM32F722) and BlackPill
replaced by ESP32 BALANCE (PID loop) and ESP32 IO (motors/sensors/comms).

- Update CLAUDE.md, docs, chassis BOM/ASSEMBLY, pinout, power-budget,
  wiring-diagram, TEAM.md, AUTONOMOUS_ARMING.md, docker-compose
- Update all ROS2 package comments, config labels, launch args
  (stm32_port→esp32_port, /dev/stm32-bridge→/dev/esp32-bridge)
- Update WebUI: stm32Mode→esp32Mode, stm32Version→esp32Version,
  "STM32 State/Mode" labels → "ESP32 State/Mode" (ControlMode, SettingsPanel)
- Add TODO(esp32-migration) markers on stm32_protocol.py and mamba_protocol.py
  binary frame layouts — pending ESP32 protocol spec from max
- Fix roslib CDN 1.3.0→1.4.0 in all 11 HTML panels (fixes ROS2 Humble
  rosbridge "Received a message without an op" incompatibility)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 08:25:24 -04:00

182 lines
7.2 KiB
YAML

# Consolidated SaltyBot parameters (Issue #447)
# Master configuration for full stack bringup
# ────────────────────────────────────────────────────────────────────────────
# HARDWARE — ESP32 BALANCE Bridge & Motor Control
# ────────────────────────────────────────────────────────────────────────────
saltybot_bridge_node:
ros__parameters:
serial_port: "/dev/esp32-bridge"
baud_rate: 921600
timeout: 0.05
reconnect_delay: 2.0
heartbeat_period: 0.2
saltybot_cmd_vel_bridge:
ros__parameters:
speed_scale: 1000.0 # m/s → ESC units
steer_scale: -500.0 # rad/s → ESC units
deadman_timeout: 0.5 # seconds
max_linear_vel: 0.5 # m/s (can be overridden at launch)
ramp_rate: 0.2 # m/s²
# ────────────────────────────────────────────────────────────────────────────
# PERCEPTION — Sensors & Detection
# ────────────────────────────────────────────────────────────────────────────
rplidar_node:
ros__parameters:
serial_port: "/dev/rplidar"
serial_baudrate: 115200
frame_id: "laser"
angle_compensate: true
realsense_node:
ros__parameters:
camera_name: "camera"
depth_module:
profile: "640x480x30"
rgb_camera:
profile: "640x480x30"
yolov8_detector:
ros__parameters:
confidence_threshold: 0.5
nms_threshold: 0.4
input_shape: [640, 640]
model_path: "/opt/models/yolov8n_coco.engine"
enable_tracking: true
# ────────────────────────────────────────────────────────────────────────────
# CONTROL — Navigation & Following
# ────────────────────────────────────────────────────────────────────────────
person_follower:
ros__parameters:
follow_distance: 1.5 # meters (can be overridden at launch)
max_linear_vel: 0.5 # m/s (can be overridden at launch)
max_angular_vel: 1.0 # rad/s
proportional_gain: 0.3
derivative_gain: 0.1
update_rate: 10 # Hz
slam_node:
ros__parameters:
rtabmap:
subscribe_depth: true
subscribe_scan: true
map_frame_id: "map"
odom_frame_id: "odom"
base_frame_id: "base_link"
approx_sync: true
queue_size: 10
nav2:
ros__parameters:
planner_server:
ros__parameters:
expected_planner_frequency: 10.0
planner_plugins: ["GridBased"]
controller_server:
ros__parameters:
expected_controller_frequency: 20.0
controller_plugins: ["FollowPath"]
# ────────────────────────────────────────────────────────────────────────────
# SOCIAL — Communication & Expression
# ────────────────────────────────────────────────────────────────────────────
tts_service:
ros__parameters:
voice_model_path: "/opt/models/en_US-cmu_arctic-medium.onnx"
audio_device: "alsa_output.usb-Jabra.0.analog-stereo"
speed: 1.0
pitch: 1.0
volume: 0.8
gesture_recognition:
ros__parameters:
model_complexity: 0 # 0=lite, 1=full, 2=heavy
process_fps: 10.0
min_confidence: 0.60
pose_enabled: true
hands_enabled: true
face_tracking:
ros__parameters:
kp_pan: 1.5
ki_pan: 0.1
kd_pan: 0.05
kp_tilt: 1.2
ki_tilt: 0.1
kd_tilt: 0.04
pan_limit_deg: 90.0
tilt_limit_deg: 30.0
# ────────────────────────────────────────────────────────────────────────────
# MONITORING — Diagnostics & Logging
# ────────────────────────────────────────────────────────────────────────────
rosbridge_server:
ros__parameters:
address: "0.0.0.0"
port: 9090
max_message_size: 1000000000
health_monitor:
ros__parameters:
heartbeat_timeout: 5.0
expected_nodes:
- "robot_state_publisher"
- "saltybot_bridge"
- "cmd_vel_bridge"
- "rplidar_node"
- "realsense_node"
- "person_detector"
- "slam_node"
- "nav2"
- "person_follower"
- "rosbridge_server"
# ────────────────────────────────────────────────────────────────────────────
# HARDWARE CONFIGURATION — Mechanical Parameters
# ────────────────────────────────────────────────────────────────────────────
robot_description:
ros__parameters:
# Chassis dimensions
wheel_diameter: 0.165 # meters
track_width: 0.365 # meters (center-to-center)
wheelbase: 0.270 # meters
# Motor specs
motor_max_rpm: 300
motor_gearbox_ratio: 10.0
# Weight & CoG
total_weight: 8.0 # kg
cog_x: 0.0 # offset from base_link
cog_z: 0.12 # height above ground
# ────────────────────────────────────────────────────────────────────────────
# LAUNCH PROFILES (configured via full_stack.launch.py)
# ────────────────────────────────────────────────────────────────────────────
#
# full (default)
# - All sensors, perception, control, social components
# - SLAM + Nav2 for indoor navigation
# - Person detection + follower
# - CSI cameras + rosbridge
#
# minimal
# - Hardware only: bridge + basic sensors (RPLIDAR + RealSense)
# - No SLAM, no Nav2, no person detection, no follower
# - No CSI cameras, no rosbridge
#
# headless
# - Sensors + control: no CSI cameras
# - RPLIDAR + RealSense + UWB
# - Limited person detection (no CSI fusion)
# - No follower, no rosbridge