6.5组会
parent
c5274cbf11
commit
0813f45a15
24
4.17组会.md
24
4.17组会.md
|
@ -90,3 +90,27 @@ SUBSYSTEM=="usb" ATTRS{idVendor}=="YOUR_VENDOR_ID", ATTRS{idProduct}=="YOUR_PROD
|
||||||
<img src="./image/3.png" alt="3" style="zoom:50%;" />
|
<img src="./image/3.png" alt="3" style="zoom:50%;" />
|
||||||
|
|
||||||
<img src="./image/4.png" alt="4" style="zoom:50%;" />
|
<img src="./image/4.png" alt="4" style="zoom:50%;" />
|
||||||
|
|
||||||
|
### 6.4 组会
|
||||||
|
|
||||||
|
##### 这周完成了:
|
||||||
|
|
||||||
|
1. 完成了UPbot的通信协议设计
|
||||||
|
|
||||||
|
2. 沟通研一完成了APP具体功能的实现
|
||||||
|
|
||||||
|
<img src="./image/6" style="zoom:33%;" />
|
||||||
|
|
||||||
|
<img src="./image/7.jpg" style="zoom:33%;" />
|
||||||
|
|
||||||
|
<img src="./image/8.jpg" style="zoom:33%;" />
|
||||||
|
|
||||||
|
3. 制作初始化定位的视频渲染
|
||||||
|
|
||||||
|
4. 实际草坪的数据采集
|
||||||
|
|
||||||
|
5. 单独测试APP功能实现(不通过协议,简单通过发送指令例如1等实现程序启动)
|
||||||
|
|
||||||
|
##### 下周工作:
|
||||||
|
|
||||||
|
根据协议解析客户端的数据,在服务端实现割草机的相关功能
|
|
@ -0,0 +1,135 @@
|
||||||
|
# UPBot 通信协议:
|
||||||
|
|
||||||
|
## 一、消息定义
|
||||||
|
|
||||||
|
| | 消息头 | 消息体 | 校验 |
|
||||||
|
| ------------ | ------ | ---------- | ---- |
|
||||||
|
| 大小(字节) | 3 | N(0-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) | (float,float,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)
|
||||||
|
...
|
||||||
|
|
||||||
|
```
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 331 KiB |
Binary file not shown.
After Width: | Height: | Size: 206 KiB |
Loading…
Reference in New Issue