Designed and built a two-axis pan-tilt camera platform with sub-degree positioning accuracy, controlled over ROS 2 via micro-ROS running on an ESP32.
Hardware
Custom 4-layer PCB in KiCad built around the ESP32-PICO-D4. Two NEMA-11 stepper motors with integrated encoders provide closed-loop position control. The PCB integrates:
- DRV8825 stepper drivers with microstepping (1/32)
- ICM-20948 9-axis IMU for feed-forward stabilization
- PCA9685 PWM expander for camera trigger and auxiliary control
- RS-485 transceiver for multi-drop daisy-chaining with other nodes
- 12-48 V input with onboard buck converters for 5V and 3.3V rails
Firmware
Micro-ROS nodes run on FreeRTOS, publishing joint states and accepting position/velocity commands over ROS 2. A custom motion controller handles acceleration profiling, s-curve planning, and encoder-based backlash compensation. The IMU provides real-time orientation feedback for active vibration damping during camera exposure windows.
Integration
The system connects to the broader ROS 2 network as two JointState publishers and a FollowJointTrajectory action server. A launch file auto-discovers the device over serial and bridges DDS to micro-ROS. The platform achieves 0.05° absolute positioning accuracy with 100 Hz control loop updates.