Communication protocol
A TCP communication is established between the ground and drone nodes. This link is bidirectional and is used to retrieve information, send control and configuration instructions.
In the communication link, the ground node works as the server while the drone node works as the client.
Each message between both nodes has the 5 mandatory fields shown in the following Table.
| Field | Bytes | Description | Values |
|---|---|---|---|
source_id |
1 | Identifier for the message sender | 0x01: ground node, 0x02: drone node |
destination_id |
1 | Identifier for the message received | 0x01: ground node, 0x02: drone node |
message_type |
1 | Distinguish between messages with acknowledgment from the receiver, and no acknowledgment | 0x01: short msg with no ack, 0x02: long msg with no ack, 0x03: short msg with ack |
cmd |
1 | Identifier for the command | 0x01-0x09 when message_type=0x01. Otherwise, 0x01 |
length |
1 | Counts either the number of bytes or the number of keys in a dictionary in the optional data field. If no data is provided is 0 |
0 - 255 |
The list of available commands are shown in the following Table.
| cmd | message_type | Command name | Description |
|---|---|---|---|
0x01 |
0x01 |
FOLLOWGIMBAL |
Asks the msg receiver to send its GPS coordinates to use them for steering the sender's gimbal towards the receiver |
0x02 |
0x01 |
GETGPS |
Asks the msg receiver to send its GPS coordinates to use them for visualization or other purposes different from steering sender's gimbal |
0x03 |
0x01 |
SETGIMBAL |
Sets the msg receiver's yaw, pitch and roll angles for its connected gimbal |
0x04 |
0x01 |
STARTDRONERFSOC |
Unidirectional command sent always from the ground node to the drone node. Starts a measurement in the drone RFSoC |
0x05 |
0x01 |
STOPDRONERFSOC |
Unidirectional command sent always from the ground node to the drone node. Stops a measurement in the drone RFSoC |
0x06 |
0x01 |
FINISHDRONERFSOC |
Unidirectional command sent always from the ground node to the drone node. Finishes a measurement in the drone RFSoC |
0x07 |
0x01 |
CLOSEDGUI |
Unidirectional command sent always from the ground node to the drone node. Tells the drone node that it can stop the execution of its running script |
0x08 |
0x01 |
SETREMOTEFMFLAG |
Unidirectional command sent always from the ground node to the drone node. Activates the drone_fm_flag flag used to initiate the steering of the drone's gimbal towards the ground node. Sends a data field with the sub-fields shown in next Table |
0x09 |
0x01 |
SETREMOTESTOPFM |
Unidirectional command sent always from the ground node to the drone node. Deactivates the drone_fm_flag flag |
0x01 |
0x02 |
SETIRF |
Unidirectional command sent always from the ground node to the drone node. Sends a data field containing a measured Power Angular Profile. More info in next Table |
0x01 |
0x03 |
ANS to GETGPS |
Answer to a GETGPS command. The answer contains a data field with the sub-fields shown in next Table |
The data field of the messages sent is used under specific commands. The length of the data field depends specifically on the command. The information sent in the data field for the different commands is shown in the following Table:
| Data field | Command name | Available options |
|---|---|---|
FMODE |
FOLLOWGIMBAL |
0x00: steer azimuth and elevation axis of ground node's gimbal. 0x01: steer elevation axis of ground node's gimbal, 0x02: steer azimuth axis of ground node's gimbal |
YAW |
SETGIMBAL |
Sets the yaw at which to set the other (remote) gimbal |
PITCH |
SETGIMBAL |
Sets the pitch at which to set the other (remote) gimbal |
ROLL |
SETGIMBAL |
Sets the roll at which to set the other (remote) gimbal |
carrier_freq |
STARTDRONERFSOC |
Sets the operating frequency on drone's RFSoC |
rx_gain_ctrl_bb1 |
STARTDRONERFSOC |
Sets the first baseband (BB) gain for the Sivers receiver |
rx_gain_ctrl_bb2 |
`STARTDRONERFSOC |
Sets the second BB gain for the Sivers receiver |
rx_gain_ctrl_bb3 |
STARTDRONERFSOC |
Sets the third BB gain for the Sivers receiver |
rx_gain_ctrl_bfrf |
STARTDRONERFSOC |
Sets the gain for the I, Q signals before the RF mixer |
X |
SETREMOTEFMFLAG |
If the ground node's mobility has been set as static, this parameter sets the geocentric X coordinate corresponding to EPSG 4978. The actual value is set by the user in the GUI by setting the latitude, longitude and altitude coordinates of the ground node |
Y |
SETREMOTEFMFLAG |
If the ground node's mobility has been set as static, this parameter sets the geocentric Y coordinate corresponding to EPSG 4978. The actual value is set by the user in the GUI by setting the latitude, longitude and altitude coordinates of the ground node |
Z |
SETREMOTEFMFLAG |
If the ground node's mobility has been set as static, this parameter sets the geocentric Z coordinate corresponding to EPSG 4978. The actual value is set by the user in the GUI by setting the latitude, longitude and altitude coordinates of the ground node |
FMODE |
SETREMOTEFMFLAG |
0x00: steer azimuth and elevation axis of drone node's gimbal. 0x01: steer elevation axis of drone node's gimbal. 0x02: steer azimuth axis of drone node's gimbal |
MOBILITY |
SETREMOTEFMFLAG |
0x00: ground node is moving, 0x01 ground node is static |
Maximum MTU on Raspbian