该协议为易行机器人底层通信协议。是用地址作为标识分段方式,不同地址表示不同数 据的协议。方式为主机往从机发送主动询问。为一问一答式通信。 协议由一个协议帧和多个数据帧组成
- 本协议中使用低字节在前的小端储存模式。
- 本协议中浮点型数据根据IEEE-754标准定义储存,大小为4个字节。
- 本协议是基于UDP层的协议。端口为9331。
协议帧
| | | | |
CRC高八位 | CRC低八位 | CMD命令字 | 序号SN | 数据帧 |
CRC高八位:8位数据
CRC第八位:8位数据
CRC高八位和第八位组成一个CRC16X25。CRC是对除前两个CRC以外。后面所有的数据求CRC16X25
CRC在线校验工具
CMD命令字:8位数据
读数据:0×01
写数据:0×02
读回复:0×03
写回复:0×04
SN序号:8位数据
当发送序号是01,回复数据也是01。发送是什么回复就是什么。用于数据同步
数据帧
当发送读命令的时候。数据帧中只有地址和长度,当读取00地址,长度为4的数据。数据帧则为00 00 04 00
当发送写命令的时候,数据帧中包涵数据不定长度。当写00地址。长度为4的数据,值为1。
- 协议帧为7a dc 02 01 数据帧为00 00 04 00 01 00 00 00
- 整包数据为7a dc 02 01 00 00 04 00 01 00 00 00
协议测试
f7 8f 01 01 40 00 01 00 (读取地址为0×40,长度为1的数据)
数据类型有uint8 uint16 uint32 int8 int16 int32 string float
len为类型的字节长度
- uint8 假如读一个数据,len=1,假如读二个数据,len=2 len为字节长度
- uint16 假如读一个数据,len=2,假如读二个数据,len=4 len为字节长度
- uint32 假如读一个数据,len=4,假如读二个数据,len=8 len为字节长度
- int8 假如读一个数据,len=1,假如读二个数据,len=2 len为字节长度
- int16 假如读一个数据,len=2,假如读二个数据,len=4 len为字节长度
- int32 假如读一个数据,len=4,假如读二个数据,len=8 len为字节长度
- float 假如读一个数据,len=4,假如读二个数据,len=8 len为字节长度
- string 长度可变,一般读20个长度即可
协议内容
此表格仅部分对接内容,详细更多信息联系深圳易行机器人
| | | |
发送相关 | - | - | - |
地址 | 字节 | 类型 | 描述 |
0×24c | 4 | 整型 | 全局ID |
0×24c | 4 | 整型 | 全局ID |
0×250 | 1 | 整型 | 设置运行 |
0×251 | 1 | 整型 | 节点序号 |
0×253 | 1 | 整型 | 路线类型 |
0×256 | 1 | 整型 | 节点属性 |
0×257 | 1 | 整型 | 动作编号 |
0×260 | 4 | 浮点型 | x坐标 |
0×264 | 4 | 浮点型 | y坐标 |
0×268 | 4 | 浮点型 | Theta坐标 |
0×26c | 4 | 浮点型 | 高度值 |
0×290 | 16 | Ascii码 | 设置事件 |
实时获取 | - | - | - |
0×100 | 4 | 浮点型 | 当前x坐标 |
0×104 | 4 | 浮点型 | 当前y坐标 |
0×108 | 4 | 浮点型 | 当前theta角度 |
0×38 | 4 | 浮点型 | 控制器输入电压 |
0×3f | 1 | 整型 | 电量百分比 |
0×3c | 1 | 整型 | 模式。1是手动模式,2是自动模式 |
0×244 | 4 | 整型 | Agv下一个节点ID |
0×248 | 4 | 整型 | Agv当前全局ID |
0×20 | 4 | 浮点型 | 当前速度 |
0×24 | 4 | 浮点型 | 当前摆角 |
0×28 | 4 | 浮点型 | 当前高度 |
0×2b0 | 16 | Ascii码 | 当前事件 |
0×320 | 16 | Ascii码 | 当前地图 |
0×211 | 1 | 整型 | 当前运行状态 |
初始定位 | - | - | - |
0xe0 | 1 | 整型 | 是否启动初始定位 |
0xf0 | 4 | 浮点型 | 初始位置X |
0xf4 | 4 | 浮点型 | 初始位置Y |
0xf8 | 4 | 浮点型 | 初始theta |
搜索节点 | - | - | - |
0×3d4 | 4 | 整型 | 设置终点 |
0×3e0 | 16 | Ascii码 | 动作字 |
0×250 | 1 | 整型 | 设置3启动搜索 |
偏移AGV | - | - | - |
0×5e0 | 4 | 浮点型 | 偏移坐标X |
0×5e4 | 4 | 浮点型 | 偏移坐标Y |
0×5e8 | 4 | 浮点型 | 偏移坐标Theta |
0×5f1 | 1 | 整型 | 设置1相对运行.设置2绝对运行 |
释放AGV事件 | - | - | - |
0×230 | 1 | 整型 | 释放标志 |
0×390 | 16 | Ascii码 | 需要释放的事件 |
0×2b0 | 16 | Ascii码 | AGV当前执行的事件 |
样例:
以下单位都为米/秒。高度单位为米
路线发送
0x24c 设置该点ID
0x260 设置单个节点的一个坐标的位置[x,y,theta]。
0x257 设置是否进行动作。[2静止升降,5静止动作,6无动作]
0x256 设置该点是起点还是终点。(已弃用,设置为0则可)
0x253 设置该点是直线还是曲线。 [0直线,1圆弧(弃用),2直线圆弧(仅用叉车),3曲率渐变线(仅用AMR)]
0x290 设置每个点的动作名称,UPFOKR DOWNDORK 分别对应上升和下降。无动作则设置""
0x251 设置该点对应整条路线的第几个点。从0开始
设置好以上属性后
以上发送一次为往路线中压入一个节点。循环压入10不同的节点后
0x250 设置1,则agv开始运行。
AGV自搜索式路线发送
需要把工程上传到agv控制器后,才可以通过控制器自搜索路线
如何上传工程
0x3d0 设置起点[可忽略](该点设置为-1,让AGV自身寻找最近的坐标点作为起点)
0x3d4 设置终点
0x3e0 动作任务字(设置该路线需要执行什么样的动作)
上述设置完成后
0x250 设置3,则AGV开始自身搜索路线运行
设置初始位置
0xf0 设置坐标x,y,theta值后
0xe0 设置为1.则开始初始定位
设置切换地图
0x330 设置切换地图的ascii名称。
设置完毕后
0x340 设置为0。
地图切换成功后内部程序会把0x340设置为1。当监控0x340为1时。证明地图切 换成功
设置AGV往前走1米
0x5e0 设置坐标(1,0,0)
0x5f1 设置为1.则开始往前走一米
释放AGV事件
0x390 设置为跟AGV当前事件[0x2b0]一样
0x230 然后设置1,释放当前事件