[P2] Pan/tilt camera head — Waveshare ST3215 servo control + bracket #384

Closed
opened 2026-03-03 23:11:54 -05:00 by sl-jetson · 0 comments
Collaborator

Hardware

2x Waveshare ST3215 servos ordered (arriving Mar 6-7):

  • 30kg.cm torque, 360deg magnetic encoder
  • Serial bus protocol (SCS/STS), daisy-chain on one UART at 1Mbps
  • Position feedback from magnetic encoder
  • ESP32 servo driver board also ordered

Why

RealSense D435i needs to actively track the target person during follow-me mode. At 20km/h the camera cannot be fixed-forward — it needs pan/tilt to keep the target in frame.

Implementation

  1. ESP32 servo driver firmware (SCS serial bus protocol)
  2. ESP32 <> Jetson Orin communication (UART or USB-serial)
  3. ROS2 pan_tilt_node: subscribes to /saltybot/target_track, computes pan/tilt angles to keep target centered
  4. Smooth trajectory generation (avoid jerky movements)
  5. Position feedback loop using magnetic encoder data
  6. Home position on startup, safe park on shutdown
  7. Mechanical bracket CAD for D435i mount on ST3215 pan/tilt

Serial Protocol

  • SCS/STS bus protocol (Waveshare/Feetech standard)
  • Daisy-chain both servos on single UART
  • 1Mbps baud rate
  • Commands: position, speed, torque enable/disable, read position/load/voltage/temp
  • Python library: waveshare-servo or feetech-servo-sdk

Dependencies

  • #363 (person tracking) — MERGED, provides /saltybot/target_track
  • #383 (VESC integration) — pan/tilt mounts on chassis controlled by VESC

Acceptance Criteria

  • ESP32 firmware for SCS serial bus protocol
  • ROS2 node: /pan_tilt/command (pan_deg, tilt_deg)
  • ROS2 node: /pan_tilt/state (current angles, load, temp)
  • Auto-tracking: subscribes to /saltybot/target_track, centers target in frame
  • Smooth trajectory (max velocity limiting, acceleration ramp)
  • Position feedback validates commanded vs actual
  • Bracket CAD or mounting solution documented
## Hardware 2x Waveshare ST3215 servos ordered (arriving Mar 6-7): - 30kg.cm torque, 360deg magnetic encoder - Serial bus protocol (SCS/STS), daisy-chain on one UART at 1Mbps - Position feedback from magnetic encoder - ESP32 servo driver board also ordered ## Why RealSense D435i needs to actively track the target person during follow-me mode. At 20km/h the camera cannot be fixed-forward — it needs pan/tilt to keep the target in frame. ## Implementation 1. ESP32 servo driver firmware (SCS serial bus protocol) 2. ESP32 <> Jetson Orin communication (UART or USB-serial) 3. ROS2 pan_tilt_node: subscribes to /saltybot/target_track, computes pan/tilt angles to keep target centered 4. Smooth trajectory generation (avoid jerky movements) 5. Position feedback loop using magnetic encoder data 6. Home position on startup, safe park on shutdown 7. Mechanical bracket CAD for D435i mount on ST3215 pan/tilt ## Serial Protocol - SCS/STS bus protocol (Waveshare/Feetech standard) - Daisy-chain both servos on single UART - 1Mbps baud rate - Commands: position, speed, torque enable/disable, read position/load/voltage/temp - Python library: waveshare-servo or feetech-servo-sdk ## Dependencies - #363 (person tracking) — MERGED, provides /saltybot/target_track - #383 (VESC integration) — pan/tilt mounts on chassis controlled by VESC ## Acceptance Criteria - [ ] ESP32 firmware for SCS serial bus protocol - [ ] ROS2 node: /pan_tilt/command (pan_deg, tilt_deg) - [ ] ROS2 node: /pan_tilt/state (current angles, load, temp) - [ ] Auto-tracking: subscribes to /saltybot/target_track, centers target in frame - [ ] Smooth trajectory (max velocity limiting, acceleration ramp) - [ ] Position feedback validates commanded vs actual - [ ] Bracket CAD or mounting solution documented
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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