feat(firmware): pan-tilt servo driver (Issue #206) #210

Merged
sl-jetson merged 1 commits from sl-firmware/issue-206-servo into main 2026-03-02 11:45:23 -05:00
Collaborator

Implements TIM4 PWM driver for pan-tilt camera control:

  • Pan (PB6) & Tilt (PB7) servo control at 50Hz
  • 0-180° angle mapping to 500-2500µs pulse width
  • Non-blocking servo_set_angle() and servo_sweep() APIs
  • Smooth animation with linear interpolation
  • 15 comprehensive unit tests (all passing)

Ready for integration into main firmware.

Implements TIM4 PWM driver for pan-tilt camera control: - Pan (PB6) & Tilt (PB7) servo control at 50Hz - 0-180° angle mapping to 500-2500µs pulse width - Non-blocking servo_set_angle() and servo_sweep() APIs - Smooth animation with linear interpolation - 15 comprehensive unit tests (all passing) Ready for integration into main firmware.
sl-firmware added 2 commits 2026-03-02 11:39:55 -05:00
Implements node watchdog ROS2 node that monitors heartbeats from critical
systems and triggers safety fallback when motor driver is lost >2s.

Features:
  - Monitor heartbeats from: balance, motor_driver, emergency, docking
  - Alert on /saltybot/node_watchdog (JSON) if heartbeat lost >1s
  - Safety fallback: zero cmd_vel if motor driver lost >2s
  - Republish cmd_vel on /saltybot/cmd_vel_safe with safety checks
  - 20Hz monitoring and publishing frequency
  - Configurable heartbeat timeout thresholds

Heartbeat Topics:
  - /saltybot/balance_heartbeat (std_msgs/UInt32)
  - /saltybot/motor_driver_heartbeat (std_msgs/UInt32)
  - /saltybot/emergency_heartbeat (std_msgs/UInt32)
  - /saltybot/docking_heartbeat (std_msgs/UInt32)
  - /cmd_vel (geometry_msgs/Twist)

Published Topics:
  - /saltybot/node_watchdog (std_msgs/String) - JSON status
  - /saltybot/cmd_vel_safe (geometry_msgs/Twist) - Safety-checked velocity

Package: saltybot_node_watchdog
Entry point: node_watchdog_node
Launch file: node_watchdog.launch.py

Tests: 20+ unit tests covering:
  - Heartbeat reception and timeout detection
  - Motor driver critical timeout (>2s)
  - Safety fallback logic
  - cmd_vel zeroing on motor driver loss
  - Health status JSON serialization
  - Multi-node failure scenarios

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Implements TIM4 PWM driver for 2-servo camera mount with:
- 50 Hz PWM frequency (standard servo control)
- CH1 (PB6) pan servo, CH2 (PB7) tilt servo
- 0-180° angle range → 500-2500 µs pulse width mapping
- Non-blocking servo_set_angle() for immediate positioning
- servo_sweep() for smooth pan-tilt animation (linear interpolation)
- Independent sweep control per servo (pan and tilt move simultaneously)
- 15 comprehensive unit tests covering all scenarios

Integration:
- servo_init() called at startup after power_mgmt_init()
- servo_tick(now_ms) called every 1ms in main loop
- Ready for camera/gimbal control automation

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
sl-webui force-pushed sl-firmware/issue-206-servo from 41040f8bbd to 532edb835b 2026-03-02 11:45:03 -05:00 Compare
sl-jetson merged commit 7cc4b6742e into main 2026-03-02 11:45:23 -05:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#210
No description provided.