软件库说明文档
XGO串口通信协议
文档目的和对象
本文档适用于任意上位机与XGO系列机器驱动板之间命令/数据交互的通信协议。示用于高阶开发者对XGO进行二次开发。
软件接口
采用标准TTL串行通讯。
波特率 | 115200 |
---|---|
数据位 | 8 |
停止位 | 1 |
奇偶校验位 | 无 |
数据帧格式
数据帧采用固定格式:帧头+帧长度+数据+校验和+帧尾。
帧头 | 固定为0x55 0x00 |
---|---|
帧长度 | 整个数据帧的字节数 |
数据 | 依据指令类型有不同含义,见第二部分 |
校验和 | 长度和数据的所有字节相加,取最低字节,然后取反 |
帧尾 | 固定为0x00 0xAA |
指令
建议上位机每条指令之间的间隔至少为1ms,以防发送指令过快,机器狗来不及处理出现丢包的现象。
可以参考python库中send和read的代码。
写指令,无应答(0x00)
帧头 | 帧长度 | 指令类型 | 首地址 | 数据 | 校验和 | 帧尾 |
---|---|---|---|---|---|---|
0x55 0x00 | 0x00 | data | 0x00 0xAA |
写指令会修改从首地址开始的数据,不会产生应答。
>例如修改机器狗的前进速度,前进速度地址为0x30,以最大速度前进,即速度内容为0xFF,具体指令如下: >0x55 0x00 0x09 0x00 0x30 0xFF 0xC7 0x00 0xAA >其中校验和计算过程如下: >0x09+0x00+0x30+0xFF=0x138,取最低字节0x38,取反得0xC7
读指令,有应答(0x02)
帧头 | 帧长度 | 指令类型 | 首地址 | 读取长度 | 校验和 | 帧尾 |
---|---|---|---|---|---|---|
0x55 0x00 | 0x02 | uint_8 | 0x00 0xAA |
写指令会连续读取从首地址开始的数据,不会产生应答。 返回数据包的格式为:
帧头 | 帧长度 | 指令类型 | 首地址 | 数据 | 校验和 | 帧尾 |
---|---|---|---|---|---|---|
0x55 0x00 | 0x12 | data | 0x00 0xAA |
>例如读取12个舵机的角度,0x50为第一个舵机位置的地址,0x0C意思为连续读取12个,具体指令如下: >0x55 0x00 0x09 0x02 0x50 0x0C 0x98 0x00 0xAA >其中校验和计算过程如下: >0x09+0x02+0x50+0x0C=0x67,取反得0x98 >读取返回数据包: >0x55 0x00 0x14 0x12 0x50 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x89 0x00 0xAA
双轮足内存表 2024-11
地址 | 功能 | 读写 | 初始值 | 备注 |
---|---|---|---|---|
0x01 | 电池电量 | 读 | 0xff | 范围为0-100,线性对应电量最低值-最高值 |
0x02 | 工作状态 | 读 | 0x01 | 0x00 倒地状态 | 0x01 正常状态 |
0x03 | 表演模式 | 写 | 0x00 | 0x00正常控制模式 | 0x01循环做动作 |
0x04 | 标定模式 | 写 | 0x00 | 0x01进入标定模式 0x00退出标定模式完成标定 |
0x05 | 更新固件 | 写 | 0x00 | 0x01进入更新模式,下位机会发送一条内容为0x55的指令作为答复,延时1s后上位机开始传输hex |
0x06 | 设置原点 | 写 | 0x00 | 0x01设置,将当前朝向设置为0度,里程计归零 |
0x07 | 固件版本 | 读 | 返回10字节的字符串,例如"R-1.2.3" L代表lite M代表mini R代表rider | |
0x08 | 数据自动反馈 | 写 | 0x00 | 以50Hz频率向串口发送 电量 关节角 imu6轴数据 里程计 的数据包 |
0x0A | 静态转向环开关 | 写 | 0x01 | 0x00 关 | 0x01 开 默认开启保持朝向,用手转动后会转回原先朝向 |
0x13 | 蓝牙名称 | 写 | 可命名长度为20个字节,只能是英文和数字的组合,命名后蓝牙名称为XGORider_xxxx | |
0x30 | 前后移动速度 | 写 | 0x80 | 范围为0x00-0xff,线性对应反向最大值-正向最大值 |
0x32 | 顺逆时针旋转速度 | 写 | 0x80 | 迎着z轴射来方向顺时针对应最大值方向 |
0x35 | 身体高度 | 写 | 0x80 | |
0x39 | 以一定周期绕x轴旋转身体 | 写 | 0x00 | 0x00停止,0x01-0xff线性对应最小-最大旋转速度 ,该功能与直接设置roll不能同时起作用 |
0x3E | 动作指令 | 写 | 0x00 | 详情见动作指令表 255为恢复默认姿态 1-N为各个动作 |
0x82 | 以一定周期沿Z轴方向平移运动 | 写 | 0x00 | 0x00停止,0x01-0xff对应最小-最大旋转速度,移动幅度为位置限幅的一半 |
0x61 | ROLL平衡模式 | 写 | 0x00 | 0x00关闭 0x01自稳定模式 |
0x62 | ROLL角度 | 读 | float | |
0x63 | PITCH角度 | 读 | float | |
0x64 | YAW角度 | 读 | float | |
0x65 | IMU 6轴数据 | 读 | float*6 一共24字节 | |
0x66 | ROLL角度 | 读 | int16 | |
0x67 | PITCH角度 | 读 | int16 | |
0x68 | YAW角度 | 读 | int16 | |
0x69 | 1号LED的颜色 | 写 | 三个字节,数值范围为0-255,[0,0,0]代表灭,[255,255,255]代表最亮的白光 | |
0x6A | 2号LED的颜色 | 写 | 同上 | |
0x6B | 3号LED的颜色 | 写 | 同上 | |
0x6C | 4号LED的颜色 | 写 | 同上 |
动作ID (十进制) | 动作内容 |
---|---|
1 | 左右摇摆 |
2 | 高低起伏 |
3 | 前进后退 |
4 | 四方蛇形 |
5 | 升降旋转 |
6 | 圆周晃动 |