work_doc/UPBot 通信协议.md

3.7 KiB
Raw Permalink Blame History

UPBot 通信协议:

一、消息定义

消息头 消息体 校验
大小(字节) 3 N0-255 1

消息头定义

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)

虚拟墙数据:每个虚拟墙包含起点和终点坐标,表示虚拟墙在地图上的位置和形状。

# 通过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)
            ...