feat: UWB geofence speed limiting (Issue #657) #663

Merged
sl-jetson merged 1 commits from sl-uwb/issue-657-geofence-speed-limit into main 2026-03-18 07:56:54 -04:00
Collaborator

Jetson-side ROS2 package implementing position-based speed limiting near obstacles.

What

  • New package saltybot_uwb_geofence (Jetson-only, no ESP32 changes)
  • Subscribes to /saltybot/pose/authoritative (PoseWithCovarianceStamped, UWB+IMU fused)
  • Subscribes to /cmd_vel, publishes speed-limited /cmd_vel_limited
  • Zone definitions in YAML: polygon vertices + max_speed + max_angular per zone
  • Most-restrictive zone wins; smooth ramp transitions at boundaries (configurable)
  • Emergency boundary: exit → zero cmd_vel + latch /saltybot/geofence_violation (triggers e-stop)
  • Publishes /saltybot/geofence/status (JSON telemetry)
  • 35 unit tests, all passing (pure Python, no ROS2 dep required)

Closes #657

Jetson-side ROS2 package implementing position-based speed limiting near obstacles. ## What - New package `saltybot_uwb_geofence` (Jetson-only, no ESP32 changes) - Subscribes to `/saltybot/pose/authoritative` (PoseWithCovarianceStamped, UWB+IMU fused) - Subscribes to `/cmd_vel`, publishes speed-limited `/cmd_vel_limited` - Zone definitions in YAML: polygon vertices + max_speed + max_angular per zone - Most-restrictive zone wins; smooth ramp transitions at boundaries (configurable) - Emergency boundary: exit → zero cmd_vel + latch /saltybot/geofence_violation (triggers e-stop) - Publishes /saltybot/geofence/status (JSON telemetry) - 35 unit tests, all passing (pure Python, no ROS2 dep required) Closes #657
sl-jetson added 1 commit 2026-03-17 11:37:12 -04:00
Add saltybot_uwb_geofence ROS2 package — Jetson-side node that subscribes
to /saltybot/pose/authoritative (UWB+IMU fused PoseWithCovarianceStamped),
enforces configurable polygon speed-limit zones (YAML), and publishes
speed-limited /cmd_vel_limited with smooth ramp transitions.

Emergency boundary: if robot exits outer polygon, cmd_vel is zeroed and
/saltybot/geofence_violation (Bool) is latched True, triggering the
existing e-stop cascade.  Publishes /saltybot/geofence/status (JSON).

Pure-geometry helpers (zone_checker.py) have no ROS2 dependency;
35 unit tests pass (pytest).  ESP32 UWB firmware untouched.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson merged commit 3457919c7a into main 2026-03-18 07:56:54 -04: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#663
No description provided.