[P1] FSESC 4.20 Plus VESC integration — balance mode + UART motor control #383

Closed
opened 2026-03-03 23:11:34 -05:00 by sl-jetson · 1 comment
Collaborator

Hardware

FSESC 4.20 Plus (VESC-based dual ESC) ordered from Amazon.ca, arriving soon.

Architecture Change

VESC firmware has built-in BALANCE APP that reads IMU over I2C and runs PID internally at 1kHz. This could eliminate the drone FC entirely.

New proposed architecture: Jetson > UART > VESC (balance + motors)

Implementation

  1. Wire MPU6050 breakout to VESC I2C bus for balance mode
  2. Configure VESC Balance App parameters (PID gains, tilt angles, startup)
  3. ROS2 VESC driver node using pyvesc Python library
  4. UART protocol: duty cycle, RPM, current control commands
  5. Telemetry: voltage, current, RPM, temperature, fault codes
  6. Replace hoverboard ESC protocol in follow-me controller (#366)
  7. If VESC balance works end-to-end, close #362 and #356 as wont-fix

Resources

  • pyvesc: Python VESC communication library
  • vesc_driver ROS2 package exists
  • VESC Tool for configuration
  • VESC protocol docs: github.com/vedderb/bldc

Dependencies

  • #366 (follow-me controller) needs redesign for VESC UART protocol
  • #362/#356 (UART fix) may become moot if FC is eliminated

Acceptance Criteria

  • VESC connected via UART to Jetson Orin
  • MPU6050 on VESC I2C, balance mode tested
  • ROS2 node publishing /vesc/state (voltage, current, RPM, temp)
  • ROS2 node subscribing /cmd_vel > VESC duty/RPM commands
  • Balance app tuned for SaltyBot weight/geometry
  • Hoverboard ESC removed from codebase
## Hardware FSESC 4.20 Plus (VESC-based dual ESC) ordered from Amazon.ca, arriving soon. ## Architecture Change VESC firmware has built-in BALANCE APP that reads IMU over I2C and runs PID internally at 1kHz. This could **eliminate the drone FC entirely**. New proposed architecture: **Jetson > UART > VESC (balance + motors)** ## Implementation 1. Wire MPU6050 breakout to VESC I2C bus for balance mode 2. Configure VESC Balance App parameters (PID gains, tilt angles, startup) 3. ROS2 VESC driver node using pyvesc Python library 4. UART protocol: duty cycle, RPM, current control commands 5. Telemetry: voltage, current, RPM, temperature, fault codes 6. Replace hoverboard ESC protocol in follow-me controller (#366) 7. If VESC balance works end-to-end, close #362 and #356 as wont-fix ## Resources - pyvesc: Python VESC communication library - vesc_driver ROS2 package exists - VESC Tool for configuration - VESC protocol docs: github.com/vedderb/bldc ## Dependencies - #366 (follow-me controller) needs redesign for VESC UART protocol - #362/#356 (UART fix) may become moot if FC is eliminated ## Acceptance Criteria - [ ] VESC connected via UART to Jetson Orin - [ ] MPU6050 on VESC I2C, balance mode tested - [ ] ROS2 node publishing /vesc/state (voltage, current, RPM, temp) - [ ] ROS2 node subscribing /cmd_vel > VESC duty/RPM commands - [ ] Balance app tuned for SaltyBot weight/geometry - [ ] Hoverboard ESC removed from codebase
Owner

Update: Do NOT rip out the hoverboard ESC driver. Instead:

  1. Implement the ESC abstraction layer from #388 first
  2. Add VESC as a second backend behind that interface
  3. Keep hoverboard as the default backend — it works and is tested
  4. The architecture should make it trivial to add more backends (ODrive, PWM/DShot, etc.)

The "Hoverboard ESC removed from codebase" acceptance criterion is removed. Both ESCs must coexist.

**Update:** Do NOT rip out the hoverboard ESC driver. Instead: 1. Implement the ESC abstraction layer from #388 first 2. Add VESC as a second backend behind that interface 3. Keep hoverboard as the default backend — it works and is tested 4. The architecture should make it trivial to add more backends (ODrive, PWM/DShot, etc.) The "Hoverboard ESC removed from codebase" acceptance criterion is removed. Both ESCs must coexist.
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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