feat: outdoor adaptive speed controller — walk/jog/ride profiles up to 8 m/s #76

Merged
seb merged 1 commits from sl-controls/outdoor-speed into main 2026-03-01 01:11:10 -05:00
Collaborator

Adds saltybot_speed_controller ROS2 package for outdoor follow-me at EUC speeds (up to 8 m/s). Sits between person_follower and cmd_vel_bridge, replacing indoor 0.5 m/s cap with adaptive speed profiles.

Profiles: walk 1.5 m/s (accel 0.6 m/s²), jog 3.0 m/s (accel 0.5 m/s²), ride 8.0 m/s (accel 0.3 m/s² — balance-safe at EUC speed).

Safety: hysteresis-based switching (5 up / 15 down ticks), trapezoidal ramp with correct accel/decel semantics, emergency decel at 2.0 m/s² on sudden target stop, GPS runaway protection (GPS > commanded × 1.5 AND > 50% profile max).

Tests: 52/52 passing (no ROS2 runtime required).

Note: ride profile requires cmd_vel_bridge re-launch with max_linear_vel:=8.0.

Adds `saltybot_speed_controller` ROS2 package for outdoor follow-me at EUC speeds (up to 8 m/s). Sits between `person_follower` and `cmd_vel_bridge`, replacing indoor 0.5 m/s cap with adaptive speed profiles. **Profiles:** walk 1.5 m/s (accel 0.6 m/s²), jog 3.0 m/s (accel 0.5 m/s²), ride 8.0 m/s (accel 0.3 m/s² — balance-safe at EUC speed). **Safety:** hysteresis-based switching (5 up / 15 down ticks), trapezoidal ramp with correct accel/decel semantics, emergency decel at 2.0 m/s² on sudden target stop, GPS runaway protection (GPS > commanded × 1.5 AND > 50% profile max). **Tests:** 52/52 passing (no ROS2 runtime required). Note: ride profile requires `cmd_vel_bridge` re-launch with `max_linear_vel:=8.0`.
sl-webui added 1 commit 2026-03-01 01:09:51 -05:00
Adds saltybot_speed_controller ROS2 package — sits between person_follower
(/cmd_vel_raw) and cmd_vel_bridge (/cmd_vel), providing adaptive speed profiles
tuned for balance stability during outdoor follow-me up to 8 m/s (EUC ride mode).

Key features:
- walk/jog/ride profiles (1.5/3.0/8.0 m/s) selected via UWB target velocity
- Hysteresis-based switching (5 ticks up, 15 ticks down) prevents oscillation
- Trapezoidal accel/decel ramps per profile; ride accel 0.3 m/s² (balance-safe)
- Emergency decel (2.0 m/s²) triggered by sudden target stop or hard decel
- GPS runaway protection: if GPS > commanded×1.5 AND > 50% profile_max → brake
- 52/52 unit tests (no ROS2 runtime required)

Topics: /cmd_vel_raw → [speed_controller] → /cmd_vel, /speed_controller/profile
Launch: ros2 launch saltybot_speed_controller outdoor_speed.launch.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
seb merged commit 4be93669a1 into main 2026-03-01 01:11:10 -05:00
seb deleted branch sl-controls/outdoor-speed 2026-03-01 01:11:11 -05: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#76
No description provided.