Initial message format description

This commit is contained in:
Pascal Serrarens 2024-04-18 12:30:27 +02:00
parent 09366aa962
commit 4be5c628b2

78
MessageFormat.md Normal file
View File

@ -0,0 +1,78 @@
Message Format
==============
## Data type
The datatype consists of 4-bit (nibble) 2 parts: the most significant nibble is the syntax, while the least significant nibble is the sematics.
| 7 . 6 | 5 . 4| 3. 2. 1. 0 |
|-|-|-|
| angular | linear | semantics |
When the Data type is 0x00, this indicates that a second byte will follow which defines further syntax options. Currently, this has not been defined yet, but can be used to define high-resolution angles using 2 bytes per dimension.
### Syntax
The syntax defines the format of the data sent and makes it possible to parse or skip parts of the message. Every value can consist of two parts: the angular and linear part, each represented by 2 bits.
| Angular part | |
|-|-|
| 00 (0x0) | No angle |
| 01 (0x4) | 1-byte, 1D angle |
| 10 (0x8) | 2-byte, 2D angle |
| 11 (0xC) | 3-byte, 3D angle |
| Linear part | |
|-|-|
| 00 (0x0) | No magnitude |
| 01 (0x1) | 1 byte magnitude |
| 10 (0x2) | 2 byte magnitude |
| 11 (0x3) | 4 byte magnitude |
Note that these values do not actually say how the angular and linear values are encoded. A 4-byte magnitude may be a 32-bit unsigned int or a single precision float for example. This depends on the semantics.
When the angular and linear parts are combined, the size of the message can be determined. A few examples:
| Data type | Size | Description |
|-|-|-|
| 0001 (0x1) | 1 byte | A single byte of linear data, like an intensity value |
| 0100 (0x4) | 1 byte | An angle, like an angle between 0 and 360 degrees |
| 0101 (0x5) | 2 bytes | An angle with a distance, like a polar coordinate |
| 1101 (0xD) | 4 bytes | For example a quaternion, where the x,y,z = angular and w = linear part |
| 0002 (0x2) | 2 bytes | A 16-bit value, like a single short int |
| 1011 (0xB) | 6 bytes | 2D angles and a 32-bit distance, for example a spherical coordinate |
### Semantics
The semantics defines how the data should be interpreted. The following are defined:
| Semantics | |
|-|-|
| 0b0001 (0x1) | Position |
| 0b0010 (0x2) | Linear velocity |
| 0b0011 (0x3) | Linear acceleration |
| 0b0101 (0x5) | Orientation or rotation |
| ob0110 (0x6) | Angular velocity |
| 0b0111 (0x7) | Angular acceleration |
| 0b1000 (0x8) | Direction |
## Currently implemented data types
| Data type | Message |
|-|-|
| 0x62 | Polar velocity with 2-byte distance |
## Typical data types
| Data type | Interpretation |
| 0x48 | A direction in 2D space, represented by an angle. |
| 0x88 | A direction in 3D space, represented by 2 angles. |
| 0x83 | A position in 3D space, using Spherical coordinates |
| 0xD4 | An orientation represented by a quaternion |
| 0xE5 | Angular verlocity, represented in Angle-axis format |
| 0xF5 | Angular verlocity, represented in Angle-axis format using a float for the magnitude |
Note that a 2D or 3D vector is not directly supported. In alignment to the coordinate sytem of Roboid controle, these need to be converted to Polar or Spherical coordinates before they can be sent.