# Driving Board Protobuffers

***This page:** *each driving\_board protobuffer explained.**

<p class="callout success"><span style="white-space: pre-wrap;">The protobuffers for the driving\_board are passed between software, control and embedded. </span></p>

<span style="white-space: pre-wrap;">DrivingBoardDiagnostics.proto </span>

<span style="white-space: pre-wrap;">Embedded → Software / Debugging </span>

<span style="white-space: pre-wrap;">This file contains the full diagnostic state of the driving board and all attached motors. </span>

<span style="white-space: pre-wrap;">DrivingBoardDiagnostics is the main status message used to report the system state and motor-level health information. </span>

##### <span style="white-space: pre-wrap;">DrivingBoardDiagnostics </span>

<span style="white-space: pre-wrap;">This message contains: </span>

- <span style="white-space: pre-wrap;">Overall board state (IDLE, OPERATING, CALIBRATING, ERROR) </span>
- <span style="white-space: pre-wrap;">Motor information for all driving and steering motors </span>

<span style="white-space: pre-wrap;">The board state is used to indicate the current operating mode of the driving board. </span>

**MotorInformation fields:**

<span style="white-space: pre-wrap;">Each motor is reported using the MotorInformation protobuf, which includes: </span>

- <span style="white-space: pre-wrap;">motor state </span>
- <span style="white-space: pre-wrap;">motor ID </span>
- <span style="white-space: pre-wrap;">RPM </span>
- <span style="white-space: pre-wrap;">voltage </span>
- encoder angle

<span style="white-space: pre-wrap;">Motors included The diagnostics message explicitly contains 10 motors: front\_left\_motor middle\_left\_motor back\_left\_motor front\_right\_motor middle\_right\_motor back\_right\_motor steering\_front\_left\_motor steering\_back\_left\_motor steering\_front\_right\_motor steering\_back\_right\_motor </span>

<p class="callout info"><span style="white-space: pre-wrap;">Notes: This structure is currently fixed-size, meaning all motors are explicitly defined instead of using a repeated field. </span></p>

##### <span style="white-space: pre-wrap;">DrivingBoardMotorMessage.proto </span>

<span style="white-space: pre-wrap;">Software → Embedded </span>

<span style="white-space: pre-wrap;">This message is used to send motion commands to the driving board. </span>

<span style="white-space: pre-wrap;">DrivingBoardMotorMessage Contains high-level movement instructions: </span>

- <span style="white-space: pre-wrap;">distance\_to\_go → target travel distance </span>
- <span style="white-space: pre-wrap;">turning\_radius </span>

<span style="white-space: pre-wrap;">Purpose: This message defines a movement request from software. The embedded system uses it as input to compute values on the control code. </span>

##### <span style="white-space: pre-wrap;">DrivingBoardMotorPeriodicProgress.proto </span>

<span style="white-space: pre-wrap;">Embedded → Software </span>

<span style="white-space: pre-wrap;">This message provides runtime feedback during movement execution. DrivingBoardMotorPeriodicProgress </span>

<span style="white-space: pre-wrap;">Contains: </span>

- <span style="white-space: pre-wrap;">distance\_left → remaining distance to target </span>

Purpose This message allows software to track progress of an ongoing movement command in real time. It is typically sent periodically while a movement is being executed.