本页目录

基于串口协议开发使用

XGO串口通信协议

文档目的和对象

本文档适用于任意上位机与XGO系列机器驱动板之间命令/数据交互的通信协议。示用于高阶开发者对XGO进行二次开发。

软件接口

采用标准TTL串行通讯。

波特率115200
数据位8
停止位1
奇偶校验位

数据帧格式

数据帧采用固定格式:帧头+帧长度+数据+校验和+帧尾。

帧头固定为0x55 0x00
帧长度整个数据帧的字节数
数据依据指令类型有不同含义,见第二部分
校验和长度和数据的所有字节相加,取最低字节,然后取反
帧尾固定为0x00 0xAA

指令

建议上位机每条指令之间的间隔至少为1ms,以防发送指令过快,机器狗来不及处理出现丢包的现象。

可以参考python库中send和read的代码。

写指令,无应答(0x00)

帧头帧长度指令类型首地址数据校验和帧尾
0x55 0x000x00data0x00 0xAA

写指令会修改从首地址开始的数据,不会产生应答。

:::color1

例如修改机器狗的前进速度,前进速度地址为0x30,以最大速度前进,即速度内容为0xFF,具体指令如下:
0x55 0x00 0x09 0x00 0x30 0xFF 0xC7 0x00 0xAA
其中校验和计算过程如下:
0x09+0x00+0x30+0xFF=0x138,取最低字节0x38,取反得0xC7

:::

读指令,有应答(0x02)

帧头帧长度指令类型首地址读取长度校验和帧尾
0x55 0x000x02uint_80x00 0xAA

写指令会连续读取从首地址开始的数据,不会产生应答。
返回数据包的格式为:

帧头帧长度指令类型首地址数据校验和帧尾
0x55 0x000x12data0x00 0xAA

:::color1

例如读取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

:::

整机坐标系

在初始站姿情况下,原点位于机身正下方,机器狗前进方向为X轴正向,左为Y轴正向,上为Z轴正向。

1686266681231-636e9d02-dd8c-4e4b-8977-ad169feecf20.png

单腿坐标系

单腿坐标系用于描述足端的位置,四条腿对应四个独立的单腿坐标系,大腿关节为原点,机器狗前进方向为x轴正向,左为Y轴正向,下为Z轴正向。

1686266595243-2e0bd853-c943-4f73-8d18-942ed3a4858d.png

舵机编号

肩(3)臂(2)肘(1)
左前腿(1)131211
右前腿(2)232221
右后腿(3)333231
左后腿(4)434241

机器狗内存表 2023-12-12

地址功能读写初始值备注模式
0x00工作状态0x00状态信息
0x01电池电量0xff范围为0-100,线性对应电量最低值-最高值
0x03表演模式0x000x00正常控制模式0x01循环做动作
0x04标定模式0x000x01进入标定模式 0x00退出标定模式完成标定
0x05更新固件0x000x01进入更新模式,下位机会发送一条同样的指令作为答复,延时1s后上位机开始传输hex
0x06设置原点0x01设置,将当前朝向设置为0度
0x07固件版本返回10字节的字符串
0x09步态0x000x00 TROT0x01 WALK
0x20卸载舵机读写0x000x00舵机处于正常工作状态,0x01卸载所有舵机,0x11-0x14依次卸载1-4号腿,0x21-0x24依次恢复1-4号腿调试模式
0x21重置舵机零位0x000x00舵机处于正常工作状态0x01所有舵机记录当前位置为零位 该寄存器设定为0x01后,会自动跳变为0x00
0x30前后移动速度读写0x80范围为0x00-0xff,线性对应反向最大值-正向最大值,正方向按机器人坐标系,下同(注③)整机模式
0x31左右移动速度读写0x80
0x32顺逆时针旋转速度读写0x80迎着z轴射来方向顺时针对应最大值方向
0x33身体沿x方向平移距离读写0x80足端与地面接触点不变而身体扭动,下同
0x34身体沿y方向平移距离读写0x80
0x35身体高度读写0x80
0x36身体绕x轴旋转角度读写0x80迎着坐标轴射来方向顺时针对应最大值方向,下同
0x37身体绕y轴旋转角度读写0x80
0x38身体绕z轴旋转角度读写0x80
0x39以一定周期绕x轴旋转身体读写0x000x00停止,0x01-0xff线性对应最小-最大旋转速度 ,该功能与直接设置位置寄存器不能同时起作用
0x3A以一定周期绕y轴旋转身体读写0x00
0x3B以一定周期绕z轴旋转身体读写0x00
0x3C原地踏步读写0x000x00停止,0x01-0xff线性对应最小-最大踏步高度
0x3D运动模式读写0x000x00常速运动0x01慢速运动0x02高速运动
0x3E动作指令0x00详情见动作指令表 255为恢复默认姿态 1-N为各个动作(见右侧)
0x3F旋转到指定角度参考0x06,输入类型为short(int16)
0x80以一定周期沿X轴方向平移运动读写0x000x00停止,0x01-0xff对应最小-最大旋转速度,移动幅度为位置限幅的一半
0x81以一定周期沿Y轴方向平移运动读写0x00
0x82以一定周期沿Z轴方向平移运动读写0x00
0x40左前腿x方向足端位置读写0x80范围为0x00-0xff,线性对应反向最大值-正向最大值,正方向按机器人坐标系,下同单腿模式
0x41左前腿y方向足端位置读写0x80
0x42左前腿z方向足端位置读写0x80
0x43右前腿x方向足端位置读写0x80
0x44右前腿y方向足端位置读写0x80
0x45右前腿z方向足端位置读写0x80
0x46右后腿x方向足端位置读写0x80
0x47右后腿y方向足端位置读写0x80
0x48右后腿z方向足端位置读写0x80
0x49左后腿x方向足端位置读写0x80
0x4A左后腿y方向足端位置读写0x80
0x4B左后腿z方向足端位置读写0x80
0x50ID为11舵机位置读写0x80范围为0x00-0xff,线性对应反向最大值-正向最大值,下同舵机模式
0x51ID为12舵机位置读写0x80
0x52ID为13舵机位置读写0x80
0x53ID为21舵机位置读写0x80
0x54ID为22舵机位置读写0x80
0x55ID为23舵机位置读写0x80
0x56ID为31舵机位置读写0x80
0x57ID为32舵机位置读写0x80
0x58ID为33舵机位置读写0x80
0x59ID为41舵机位置读写0x80
0x5AID为42舵机位置读写0x80
0x5BID为43舵机位置读写0x80
0x5C设置舵机速度读写0x80范围为0x00-0xff,线性对应最小值-最大值(仅在该模式下有效)
0x5DID为52舵机位置读写0x80机械臂小臂舵机
0x5EID为53舵机位置读写0x80机械臂大臂舵机
0x60陀螺仪YAW漂移校准0x00先平稳放置,然后写入0x01,背部指示灯停止闪烁后完成校准(大约五秒),单独使用,不要在程序运行过程中使用
0x61IMU状态读写0x000x00关闭 0x01自稳定模式
0x62ROLL角度 float类型
0x63PITCH角度 float类型
0x64YAW角度 float类型
0x66ROLL角度 short类型
0x67PITCH角度 short类型
0x68YAW角度 short类型
0x71夹爪状态0x800x00-0xFF,0x00对应夹爪完全张开0xFF对应夹爪完全张开
0x72机械臂稳定模式0x000x00不启用自稳定,0x01启动稳定模式,身体在平移时机械臂末端在空间中的位置不变
0x73夹爪X轴位置0x800x00-0xFF,对应[-80mm,155mm],机械臂坐标系原点位于机械臂大臂舵机转动轴处
0x74夹爪Z轴位置0x800x00-0xFF,对应[-95mm,155mm]
0x75机械臂大小臂舵机速度0x00范围为0x00-0xff,线性对应最小值-最大值
夹爪速度始终最快
0x76机械臂极坐标角度0x80范围为0x00-0xff,线性对应70°~270°
身体背部为0°,正前方为180°
0x77机械臂极坐标半径0x80范围为0x00-0xff,线性对应80mm~140mm
210-270°区间,因为会和屏幕干涉,有控制盲区无法到达较小的半径。
如果想要抓取地下的物体,采用舵机控制指令,直接设定舵机角度更加方便。
0x902Pin接口 5V输出0x00开机时输出低电平 0输出低电平1输出高电平

5V供电(开关),注释:低电平是关,高电平是开
0x91数字IO输出0x00开机时输出低电平 0输出低电平1输出高电平

电磁阀(开关) ,注释:低电平是关,高电平是开
0x92模拟读取0x00返回单字节数据,范围0-255
0x93数字读取0x00返回单字节数据,范围0-1
0x691号LED的颜色写入三个字节数据,数值范围为0-255,代表RGB的亮度,[0,0,0]代表灭,[255,255,255]代表最亮的白光
0x6A2号LED的颜色
0x6B3号LED的颜色

机器狗动作内容

动作执行过程中可以被其他指令打断,并且动作执行完成之后不会向上位机发送任何信息,如果希望动作完成之后自动正常执行下一条命令,可以在发送动作指令之后手动给一定的延时

动作ID(十进制)动作内容执行时间(秒)
1趴下3
2站起3
3匍匐前进5
4转圈5
6蹲起4
7转动Roll4
8转动Pitch4
9转动Yaw4
10三轴转动7
11撒尿7
12坐下5
13招手7
14伸懒腰10
15波浪6
16左右摇摆6
17求食4
18找食物6
19握手10
20鸡头9
21俯卧撑8
22张望7
23跳舞6
24调皮7
128上抓10
129中抓10
130下抓10
255恢复默认姿态1
144爬楼梯12

双轮足内存表 2024-11

地址功能读写初始值备注
0x01电池电量0xff范围为0-100,线性对应电量最低值-最高值
0x02工作状态0x010x00 倒地状态
0x03表演模式0x000x00正常控制模式
0x04标定模式0x000x01进入标定模式 0x00退出标定模式完成标定
0x05更新固件0x000x01进入更新模式,下位机会发送一条内容为0x55的指令作为答复,延时1s后上位机开始传输hex
0x06设置原点0x000x01设置,将当前朝向设置为0度,里程计归零
0x07固件版本返回10字节的字符串,例如"R-1.2.3" L代表lite M代表mini R代表rider
0x08数据自动反馈0x00以50Hz频率向串口发送 电量 关节角 imu6轴数据 里程计 的数据包
0x0A静态转向环开关0x010x00 关
0x13蓝牙名称可命名长度为20个字节,只能是英文和数字的组合,命名后蓝牙名称为XGORider_xxxx
0x30前后移动速度0x80范围为0x00-0xff,线性对应反向最大值-正向最大值
0x32顺逆时针旋转速度0x80迎着z轴射来方向顺时针对应最大值方向
0x35身体高度0x80
0x39以一定周期绕x轴旋转身体0x000x00停止,0x01-0xff线性对应最小-最大旋转速度 ,该功能与直接设置roll不能同时起作用
0x3E动作指令0x00详情见动作指令表 255为恢复默认姿态 1-N为各个动作
0x82以一定周期沿Z轴方向平移运动0x000x00停止,0x01-0xff对应最小-最大旋转速度,移动幅度为位置限幅的一半
0x61ROLL平衡模式0x000x00关闭 0x01自稳定模式
0x62ROLL角度float
0x63PITCH角度float
0x64YAW角度float
0x65IMU 6轴数据float*6 一共24字节
0x66ROLL角度int16
0x67PITCH角度int16
0x68YAW角度int16
0x691号LED的颜色三个字节,数值范围为0-255,[0,0,0]代表灭,[255,255,255]代表最亮的白光
0x6A2号LED的颜色同上
0x6B3号LED的颜色同上
0x6C4号LED的颜色同上
动作ID (十进制)动作内容
1左右摇摆
2高低起伏
3前进后退
4四方蛇形
5升降旋转
6圆周晃动