跳到主要内容

基于串口协议开发使用

串口通信协议

文档目的和对象

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

硬件连接

用六角扳手到拧下背部两颗螺丝,左右两侧螺丝,尾部两颗螺丝后,拆除机器狗后背板,拔掉开关线。 主板有两个串口通信接口,按主板丝印线序和上位机线序对接(TX接RX、RX接TX),然后就可以调试了。两个端子对外供电电压分别是5V和3.3V,不可同时使用。

软件接口

采用标准TTL串行通讯。

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

数据帧格式

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

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

指令

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

可以参考 xgolib.py(24 KB) 中 send 和 read 的代码。

写指令,无应答(0x00)

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

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

>例如修改机器狗的前进速度,前进速度地址为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
>例如读取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轴正向。

单腿坐标系

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

舵机编号

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

机器狗内存表

地址功能读写初始值备注模式
0x00工作状态0x00状态信息
0x01电池电量0xff范围为0-100,线性对应电量最低值-最高值
0x03表演模式0x000x00正常控制模式 | 0x01循环做动作
0x04标定模式0x000x01进入标定模式 0x00退出标定模式完成标定
0x05更新固件0x000x01进入更新模式,下位机会发送一条同样的指令作为答复,延时1s后上位机开始传输hex
0x07固件版本返回10字节的字符串
0x09步态0x000x00 TROT | 0x01 WALK | 0x02 HIGH 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为各个动作(见右侧)
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机械臂大臂舵机
0x61IMU状态读写0x000x00关闭 0x01自稳定模式
0x62ROLL角度
0x63PITCH角度
0x64YAW角度
0x71夹爪状态0x800x00-0xFF,0x00对应夹爪完全张开|0xFF对应夹爪完全张开
0x72机械臂稳定模式0x000x00不启用自稳定,0x01启动稳定模式,身体在平移时机械臂末端在空间中的位置不变
0x73夹爪X轴位置0x800x00-0xFF,对应[-80mm,155mm],机械臂坐标系原点位于机械臂大臂舵机转动轴处
0x74夹爪Z轴位置0x800x00-0xFF,对应[-95mm,155mm]

动作内容

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

动作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