通信协议简介
本通信协议用于Sunray系统中智能体(无人机、无人车等)与地面主机(Sunray地面站软件及其他软件)之间相互通信的消息定义。
- 确保无人机/车的机载电脑与地面电脑处于同一个局域网(有多种构建局域网的方式,如wifi、mesh自组网模块)
- sunray_communication_bridge功能包和Sunray地面站软件是共同配合使用的
- 下行链路(无人机->地面):sunray_communication_bridge功能包接收Sunray中其他节点发布的ROS话题,提取话话题中的数值,并按照特定的通信协议封装为UDP消息,发布出去,地面站软件收到会解码,并显示出来;
- 上行链路(地面->无人机):地面站软件根据用户的输入or操作,按照特定的通信协议封装为TCP消息,发送给无人机端,无人机端的sunray_communication_bridge功能包收到后解码出来,并编码为对应的ROS话题发布出去,从而其他节点可以收到
- 对于集群来说,无人机/车间的通信只通过不同机载电脑上的sunray_communication_bridge功能包进行通信。
Sunray地面站通信逻辑
常见消息流向
- 无人机/无人车(机载电脑)➡️ Sunray Station地面站(一般为UDP单播)
- 无人机/无人车(机载电脑)➡️ 无人机/无人车(机载电脑)(一般为UDP组播)
- Sunray Station地面站➡️ 无人机/无人车(机载电脑)(一般为TCP点对点传输)
通信协议模版
| HEAD |
LENGTH |
SEQ |
ROBOT_ID |
TIMESTAMP |
PAYLOAD |
CHECK |
| 消息帧头 |
消息长度 |
消息编号 |
机器人编号 |
时间戳 |
数据帧 |
校验和 |
| 2字节 |
4字节 |
1字节 |
1字节 |
8个字节 |
自定义 |
2字节 |
| uint16_t |
uint32_t |
uint8_t |
uint8_t |
uint64_t |
自定义 |
uint16_t |
消息帧头(HEAD)
- 消息帧头作用:用于区分通信方式、区分回复or请求
- 消息帧头定义
- TCP通信帧头:0XAC43
- UDP通信(请求):0XAD21
- UDP通信(回复):0XFD32
- UDP通信(无需回复):0XAB65
- TCP和UDP通信共用(无需回复):0XCC90
消息长度(LENGTH)
- 消息长度作用:确认整个通信消息及数据帧(PAYLOAD)的大小,方便处理数据;
- 消息长度定义:整条数据的长度=消息帧头(2字节)+数据帧长度(4字节)+消息编号(1字节)+机器人编号(1字节)+时间戳(8字节)+数据帧(待定)+检验和(2个字节)=18字节+数据帧长度
消息编号(SEQ)
机器人编号(ROBOT_ID)
- 机器人编号作用:有多台入网设备时用于区分设备;
- 机器人编号定义:
- 从1开始计数到255为止
- 如果是无人机,则同uav_id
- 如果是无人车,则等于ugv_id+100
数据帧(PAYLOAD)
- 数据帧作用:传递置顶信息
- 数据帧定义:见数据帧具体定义
校验和(CHECK)
- 校验和作用:用于确认数据帧的完整和正确;
- 校验和定义:除去校验和之外的所有数据一个字节一个字节累加取结果最后两个字节数据