RoboidControl-cpp/MessageFormat.md
2024-04-18 12:30:27 +02:00

2.9 KiB

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.