BMS Packet (Single-Direction, Firmware → ROS driver)
This packet is generated by the firmware to report data acquired from the robot's BMS(Battery Management System) module. It is periodically transmitted to the ROS driver at fixed 500 ms intervals through UDP port number 49167.
Field Layout
| Byte Offset |
Field Name |
Type |
Size (Bytes) |
Description |
| 0 - 11 |
Header |
Timestamp Header |
12 |
Please refer to Timestamp Header. |
| 12 - 15 |
Data Valid Bits |
32-bit unsigned integer |
4 |
Please refer to Data Valid Bit definitions. |
| 16 - 17 |
Version |
16-bit unsigned integer |
2 |
Firmware version of the BMS module. |
| 18 - 19 |
Number Of Cells |
16-bit unsigned integer |
2 |
Number of cell in series. |
| 20 - 21 |
Temperature |
16-bit unsigned integer |
2 |
Temperature of the battery. Unit: 0.1 K. |
| 22 - 23 |
Total Voltage |
16-bit unsigned integer |
2 |
Total voltage of each cell. Unit: mV. |
| 24 - 25 |
Current |
16-bit signed integer |
2 |
Current value. Unit: mA. |
| 26 - 27 |
Relative State Of Charge |
16-bit unsigned integer |
2 |
Remaining capacity percentage of the battery. Unit: % |
| 28 - 29 |
Remaining Capacity |
16-bit unsigned integer |
2 |
Remaining capacity of the battery. Unit: mAh. |
| 30 - 31 |
Full Charge Capacity |
16-bit unsigned integer |
2 |
Full charge capacity of the battery. Unit: mAh. |
| 32 - 33 |
Charging Current |
16-bit unsigned integer |
2 |
Required charge current. |
| 34 - 35 |
Charging Voltage |
16-bit unsigned integer |
2 |
Required charge voltage |
| 36 - 37 |
Battery Status |
16-bit unsigned integer |
2 |
Flag state of the Battery. Please refer to Battery Status. |
| 38 - 39 |
Control Flag Status |
16-bit unsigned integer |
2 |
Flag status of control. Please refer to Control Flag Status. (This field has no effect on robot operation. It is used solely to indicate the extended configuration status of the BMS module.) |
| 40 - 41 |
Relative State Of Health |
16-bit unsigned integer |
2 |
Indicates the remaining lifetime of the battery. Unit: %. |
| 42 - 55 |
Voltage of Cells[7] |
16-bit unsigned integer array |
2 x 7 |
Voltage of cell 1 - 7. Currently, a total of 7 cells are used. |
| 56 - 57 |
Write Lock Flag Status |
16-bit unsigned integer |
2 |
Indicates the write-lock status. Set to 1 when the write lock is released. (This field has no effect on robot operation.) |
| 58 - 59 |
Operation Status |
16-bit unsigned integer |
2 |
Indicates the current mode. Please refer to Operation Status. |
| 60 - 61 |
Total Cell Voltage |
16-bit unsigned integer |
2 |
Total cell voltage |
| 62 - 63 |
Pack Voltage |
16-bit unsigned integer |
2 |
Pack voltage. |
| 64 - 65 |
Pack Status |
16-bit unsigned integer |
2 |
Please refer to Pack Status. |
| 66 - 67 |
Cell Balancing Status |
16-bit unsigned integer |
2 |
Indicates the enable status of cell balancing for each cell. Please refer to Cell Balancing Status. |
| 68 - 69 |
Fault Status |
16-bit unsigned integer |
2 |
Upper byte: Indicates the number of fault events that have occurred. Lower byte: Each bit represents a fault condition flag. Please refer to Fault Condition Flag. |
| 70 - 71 |
Checksum Of Firmware |
16-bit unsigned integer |
2 |
Checksum of the firmware code. |
| 72 - 73 |
Checksum Of Constants |
16-bit unsigned integer |
2 |
Checksum of fixed constant value in BMS's flash. |
Data Valid Bits
The Data Valid Bits field specifies the validity of each data item in the BMS packet. A bit set to 1 indicates that the corresponding data was successfully read, while a bit set to 0 indicates a read failure. When a data item cannot be read successfully, the firmware shall set the corresponding field value to 0.
| Bit |
Name |
| 0 |
Version |
| 1 |
Number Of Cells |
| 2 |
Temperature |
| 3 |
Total Voltage |
| 4 |
Current |
| 5 |
Relative State Of Charge |
| 6 |
Remaining Capacity |
| 7 |
Full Charge Capacity |
| 8 |
Charging Current |
| 9 |
Charging Voltage |
| 10 |
Battery Status |
| 11 |
Control Flag Status |
| 12 |
Relative State Of Health |
| 13 |
Cell1 Voltage |
| 14 |
Cell2 Voltage |
| 15 |
Cell3 Voltage |
| 16 |
Cell4 Voltage |
| 17 |
Cell5 Voltage |
| 18 |
Cell6 Voltage |
| 19 |
Cell7 Voltage |
| 20 |
Write Lock Flag Status |
| 21 |
Operation Status |
| 22 |
Total Cell Voltage |
| 23 |
Pack Voltage |
| 24 |
Pack Status |
| 25 |
Cell Balancing Status |
| 26 |
Fault Status |
| 27 |
Checksum Of Firmware |
| 28 |
Checksum Of Constants |
| 29 - 31 |
Reserved. Set to 0. |
Battery Status
| Bit |
Name |
Description |
| 0 |
FULLY_DISCHARGED |
Set to 1 when the battery is fully discharged. |
| 1 |
FULLY_CHARGED |
Set to 1 when the battery is fully charged. |
| 2 |
DISCHARGING |
Set to 1 when the battery is in discharging state. |
| 3 |
SHORT_CURRENT_ALARM |
Set to 1 when a short-circuit condition is detected. |
| 4 |
OVER_CHARGE_CURRENT_ALARM |
Set to 1 when an over-charge current condition is detected. |
| 5 |
OVER_DISCHARGE_CURRENT_ALARM |
Set to 1 when an over-discharge current condition is detected. |
| 6 |
OVER_TEMP_ALARM |
Set to 1 when an over-temperature condition is detected. |
| 7 - 15 |
Reserved |
Set to 0. |
Control Flag Status
This data is intended only for debugging by firmware engineers.
| Bit |
Name |
Description |
| 0 |
2ND_THERM |
|
| 1 |
CELL_BALANC |
|
| 2 |
INIT_CALIB_1P |
|
| 3 |
INITCAP |
|
| 4 |
F_SYS_CON_EN |
|
| 5 - 15 |
Reserved |
Set to 0. |
Operation Status
| Mode Number |
Mode Name |
| 0x0000 |
Init |
| 0x0001 |
WakeUp |
| 0x0002 |
Discharging |
| 0x0003 |
Charging |
| 0x0004 |
Reserved |
| 0x0005 |
Charge Terminate |
| 0x0006 |
Charge Wait |
| 0x0007 - 0x000F |
Reserved |
| 0x0010 |
Charge Over Heat |
| 0x0011 |
Discharge Over Heat |
| 0x0012 |
Over Charge Current |
| 0x0013 |
Over Discharge Current |
| 0x0014 |
Short Current |
| 0x0015 |
Over Voltage |
| 0x0016 |
2nd Thermal Over Heat |
| 0x0017 - 0x001D |
Reserved |
| 0x001E |
Power Down |
| 0x001F |
Reserved |
| 0x0020 |
Initial calibration |
| 0x0021 - 0x0098 |
Reserved |
| 0x0099 |
Fixed Constant Data Error |
| 0x0100 - |
Reserved |
Pack Status
| Bit |
Name |
Description |
| 0 |
DFET |
Condition of D-FET. (0=OFF, 1=ON) |
| 1 |
CFET |
Condition of C-FET. (0=OFF, 1=ON) |
| 2 |
SYS |
Current SYS-connect status(0=Disconnect, 1=Connect) |
| 3 |
CP |
Indicates whether the Capacity Correction condition is activate. While charging, if SOC(Relative State Of Charge) value exceeds the configured threshold, then this bit is cleared. |
| 4 - 15 |
Reserved |
Set to 0. |
Cell Balancing Status
| Bit |
Description |
| 0 |
Cell balancing in CELL 1 (0=OFF, 1=ON) |
| 1 |
Cell balancing in CELL 2 (0=OFF, 1=ON) |
| 2 |
Cell balancing in CELL 3 (0=OFF, 1=ON) |
| 3 |
Cell balancing in CELL 4 (0=OFF, 1=ON) |
| 4 |
Cell balancing in CELL 5 (0=OFF, 1=ON) |
| 5 |
Cell balancing in CELL 6 (0=OFF, 1=ON) |
| 6 |
Cell balancing in CELL 7 (0=OFF, 1=ON) |
| 7 - 15 |
Reserved |
Fault Condition Flag
| Bit |
Description |
| 0 |
Over Voltage |
| 1 |
Charge wait |
| 2 |
Charge Over Current |
| 3 |
Discharge Over Current |
| 4 |
Short Current |
| 5 |
Charge Over/Under Temperature. |
| 6 |
Discharge Over/Under Temperature. |
| 7 |
Reserved |
Usage
The configuration of the BMS module is performed by the firmware after the robot is powered on. Therefore, modifying BMS module settings through the ROS driver is not supported.
The primary purpose of the BMS packet is to monitor the current battery state of charge and charging status. The following data items transmitted in the BMS packet shall be used for this purpose:
- Temperature
- Total Voltage
- Current
- Relative State of Charge (SOC)
- Remaining Capacity
- Relative State of Health (SOH)
- Operation Status
In particular, when a wired charger is used, the charging status cannot be determined from the ChargerManager packet. In such cases, the ROS driver shall determine the charging status using the data provided in the BMS packet. (Please refer to Usage of the ChargerManager packet)
Other than the fields explicitly listed for monitoring battery state and charging status, the majority of additional values contained in the BMS packet are provided solely for firmware engineer debugging. These fields are not intended for use in system-level functionality or external integration, and their contents may change without notice in future firmware revisions.