work_doc/UPBot 通信协议.md

136 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# UPBot 通信协议:
## 一、消息定义
| | 消息头 | 消息体 | 校验 |
| ------------ | ------ | ---------- | ---- |
| 大小(字节) | 3 | N0-255 | 1 |
#### 消息头定义
```c
struct head
{
unsigned char flag;// 头部标记,固定帧头:0X5b
unsigned char msg_id;// 消息ID,表示消息具体作用,决定消息体具体格式
unsigned char length;// 消息体长度
}
```
| | 帧头 | id | 消息体长度 | 消息体 | 校验 |
| ---- | ---- | ---------------- | ---------- | -------- | ---- |
| 内容 | 0x5b | 0x01命令类 | 2字节 | 0-0xffff | |
| | 0x5b | 0x02 (配置类) | | | |
| | | | | | |
#### 二、命令类消息体含义
| 消息体数值 | 含义 |
| ---------- | -------------------- |
| 0x00 | **启动机器人** |
| 0x01 | 启动导航定位 |
| 0x02 | **启动全覆盖客户端** |
| 0x03 | 启动全覆盖服务端 |
| 0x04 | 启动摄像头和超声波 |
| 0x05 | 手持标签划定边界 |
| 0x06 | 手动控制机器人 |
| 0x07 | **返回充电** |
| 0x08 | 停止割草 |
| 0x09 | 暂停割草 |
| 0x10 | **基站初始化** |
启动机器人0x5b,0x01,0x02,0x00,校验和
#### 三、配置类消息体含义
#### 3.1 基站配置类
| 配置类型 | 配置类型标识符 |
| -------- | -------------- |
| 坐标配置 | 0x00 |
| 频率配置 | 0x01 |
| 电源配置 | 0x02 |
###### 坐标配置类的数据格式如下:
**0x5b | 0x02 | xx | 0x00 | base_num(1 byte) | (floatfloat,float) x base_num) | 校验位(1 byte)**
0x5b: 坐标配置类的特定标识符
0x02: 固定值,表示开始
xx: 消息体长度(动态计算)
0x00: 配置类型标识符
base_num: 基站数量,表示后续有多少组坐标数据
float: 每组基站的x, y, z坐标分别为三个浮点数
校验位: 数据校验和
###### 频率配置类数据格式如下:
**0x5b | 0x02 | xx | 0x01 |float 频率 | 校验位(1 byte)**
###### 电源配置类数据格式如下:
**0x5b | 0x02 | xx | 0x02 |电源状态 0x00关闭 0x01开启 | 校验位(1 byte)**
#### 3.2 地图配置类
| 配置类型 | 配置类型标识符 |
| ------------ | -------------- |
| 地图编号配置 | 0x03 |
| 地图校准配置 | 0x04 |
| 虚拟墙配置 | 0x05 |
###### 地图编号配置:
**0x5b | 0x02 | xx | 0x03|消息体内容 | 校验位(1 byte)**
###### 地图校准配置:
**0x5b | 0x02 | xx | 0x04 |校准参数| 校验位(1 byte)**
校准参数X轴偏移量float、Y轴偏移量(float)、旋转角度(float)
###### 虚拟墙配置:用户在地图上设置虚拟墙 ,限制割草机的移动范围,避免进入不想割草的区域。
**0x5b | 0x02 | xx | 0x05 |虚拟墙数量| 虚拟墙数据|校验位(1 byte)**
虚拟墙数据:每个虚拟墙包含起点和终点坐标,表示虚拟墙在地图上的位置和形状。
```python
# 通过socket获得数据
data = socket.get_data()
frame_head = data[0]
# 校验数据头
if(frame_head != 0x5b):
print("frame error")
return
data_id = data[1]
swtich data_id:
case UPBOT_COMMAND:
# 解析命令类的数据,并执行对应的功能
upbot_parse_cmd(data)
case UPBOT_CONFIG:
upbot_prase_config(data)
default:
break;
def upbot_parse_cmd(data):
cmd_type = data[4]
switch_case:
UPBOT_LAUNCH_ROS: # 这个全大写的就是0x00
subprocess.run(ros_core)
...
```