Aug 2024 — Aug 2025Shared embedded platform for the team

RM2025-Core Embedded Platform

Embedded Team Lead · Core Maintainer

Maintained the shared embedded platform used by seven robots, standardizing drivers, communication, control, and math interfaces while helping a team of about ten engineers work within clear boundaries.

Platform scope
7 RoboMaster robots
Collaboration
~10-person embedded team
Maintenance evidence
141 unique commits; 114 in develop
Knowledge transfer
~10 training sessions on drivers, RTOS, and debugging
RM2025-Core Embedded Platform · The platform supported the full 2025 fleet. Repository history contains 141 unique commits by wilsonooo09, 114 of which are in current develop; these numbers indicate maintenance scale, not sole authorship or quality.
The platform supported the full 2025 fleet. Repository history contains 141 unique commits by wilsonooo09, 114 of which are in current develop; these numbers indicate maintenance scale, not sole authorship or quality.

Background

Maintained the shared embedded platform used by seven robots, standardizing drivers, communication, control, and math interfaces while helping a team of about ten engineers work within clear boundaries.

The platform supported the full 2025 fleet. Repository history contains 141 unique commits by wilsonooo09, 114 of which are in current develop; these numbers indicate maintenance scale, not sole authorship or quality.

The 141 / 114 figures come from local author and branch-history counts. They indicate maintenance scale only; the platform was collaborative work.

My contribution

  • Maintained shared driver, communication, control, and math infrastructure with consistent interfaces.
  • Split team work, reviewed pull requests, and handled fleet-wide regressions and urgent field fixes.
  • Delivered about ten training sessions covering STM32, FreeRTOS, communication, control, and debugging.
  • Improved observability with SystemView, Tracealyzer, error counters, and per-channel timeout states.
Technical environment
STM32 · FreeRTOS · FDCAN / UART / SPI · DMA Receive-to-Idle · PID / Filters · SystemView / Tracealyzer · Git Review

Implementation

Drivers

GPIO, PWM, CAN, UART, SPI, timers, and DMA isolate board- and HAL-specific differences.

Communication

Motor, referee, VTM, vision, and inter-board protocols share parsing, validation, timeout, and status interfaces.

Control & Math

PID, filters, ramps, kinematics, and common math utilities avoid repeated implementations across robots.

Application boundary

The shared library exposes reviewed capabilities while robot-specific task states remain in each application.

How information enters the system
New / old VTM serial bytesTwo headers and field layouts
DMA Receive-to-IdleBuffer handling by actual receive length
Header / CmdID / lengthCRC8 + CRC16
Protocol-specific decodeBit-field and structure alignment
Per-channel validityRemote / keyboard / VTM time out separately; stale input is cleared

Technical decisions

Shared interfaces before robot-specific exceptions

Context
Seven robots had different hardware and tasks; adding every exception to drivers would turn each change into a fleet-wide regression risk.
Choice
Exposed device capability, validity, and timeout through stable interfaces and kept robot policy in application code.
Delivered result
The same drivers remained reusable and reviews could focus on actual boundary changes.

Observability as a shared capability

Context
Many field failures occurred only under load or disconnection, where breakpoints were insufficient.
Choice
Added communication counters, per-input validity, timeouts, and RTOS trace tooling.
Delivered result
Failures could be localized to protocol, transport, or application state instead of being labeled generic serial instability.

Debugging process

Supporting old and new VTM serial protocols

A new referee system introduced a new video-transmission module. The shared driver had to support both serial protocols without regressing existing robots.

Symptoms

  • Some new-protocol frames failed validation and keyboard/mouse or remote-control input dropped intermittently.
  • Old-protocol regression exposed length, bit-field, and buffer differences.
  • After disconnect, the application could still read the last valid keyboard state.

Investigation

  • Instrumented receive paths by header, CmdID, length, CRC8, and CRC16.
  • Checked structure bit-fields and alignment against actual DMA Receive-to-Idle lengths.
  • Reviewed the fix sequence to locate buffer-clear timing and old-protocol regressions.

Root cause

The protocols differed in headers, command IDs, lengths, and field layout. Early handling mixed validity with buffer lifetime, allowing invalid frames or stale disconnected input to reach applications.

Fixes

  • Separated parsing by protocol header, CmdID, and length with complete CRC8/CRC16 validation.
  • Corrected bit-fields, structure alignment, buffer sizes, and DMA buffer-clear timing.
  • Added receive, UART-error, and CRC-error counters.
  • Tracked remote, keyboard/mouse, and VTM state with independent timeout/valid flags and cleared unavailable input.

Validation & evidence

  • Regressed input, disconnect, reconnect, and malformed frames on both old and new modules.
  • Observed state continuity and counters on real robot tasks until the compatibility driver was stable.
Lesson

Protocol compatibility is more than another parser branch: frame validation, buffer lifetime, and disconnect semantics must form one coherent interface.

Validation & evidence

  1. The shared platform went through cross-robot integration and hardware regression across seven distinct robots during the season.
  2. Both VTM generations passed input, disconnect, and recovery regression; no packet-loss metric was saved, so none is claimed.
  3. Commit counts are maintenance-scale evidence only and do not erase team contribution.

The 141 / 114 figures come from local author and branch-history counts. They indicate maintenance scale only; the platform was collaborative work.

Development & field media