串口通信
通信与报文命令
注意:使用通信协议直接通信,需要在basic中烧录transponder,在atom中烧录最新版的atomMain
1.USB通信设置Communication Settings
请确保您的通信设置如下
- 总线接口: USB Type-C连接
- 波特率: 115200
- 数据位: 8
- 奇偶校验:无
- 停止位: 1
2.命令帧说明及单一指令解析
主机Basic向从机发送数据,从机接收到数据后进行解析,如包含返回值的指令,从机会在500ms内返回给主机。
3.命令帧发送与接收格式
所有命令为十六进制,发送与接收格式一致。
每个通信命令必须包含以下5个部分,其中3、4可为空。
- 1 命令针头: 0xFE 0xFE
- 固定
- 必含
- 2 有效命令长度: 0x02 ~ 0x10
- 以下所有命令的长度
- 必含
- 3 命令序号: 00 ~ 8F
- 现已开发了多种命令
- 可为空
- 4 命令内容: 若干
- 可为空
- 5 命令结束: 0XFA
- 固定
- 必含
4.指令解析
主机Basic向从机发送数据,从机接收到数据后进行解析,如包含返回值的指令,从机会在500ms内返回给主机。
类型 | 数据描述 | 数据长度 | 说明 |
---|---|---|---|
命令帧 | 头字节0 | 1 | 帧头识别,0XFE |
头字节1 | 1 | 帧头识别,0XFE | |
数据长度字节 | 1 | 不同指令对应不同长度数据 | |
命令字节 | 1 | 视不同命令而定 | |
数据帧 | 数据 | 0-16 | 命令附带数据,视不同命令而定 |
结束帧 | 结束字节 | 1 | 停止位,0XFA |
5.单一指令解析
1、Atom打开通讯
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X10 |
Data[4] | 结束帧 | 0XFA |
串口发送示例:FE FE 02 10 FA
无返回值
2、Atom关闭通讯
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X11 |
Data[4] | 结束帧 | 0XFA |
串口发送示例:FE FE 02 11 FA
无返回值
3、发送单独角度(以六轴机械臂为例)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X06 |
Data[3] | 指令帧 | 0X21 |
Data[4] | 舵机序号 | joint_no |
Data[5] | 角度值高位 | angle_high |
Data[6] | 角度值低位 | angle_low |
Data[7] | 指定速度 | sp |
Data[8] | 结束帧 | 0XFA |
使1号舵机以20%速度移动到零位
串口发送示例:FE FE 06 21 01 00 00 14 FA
joint_no取值范围: 0~6
angle_high:数据类型byte
计算方式:角度值乘以100 先转换成int形式 再取十六进制的高字节
angle_low:数据类型byte
计算方式:角度值乘以100 先转换成int形式 再取十六进制的低字节
无返回值
附录:
在ATOM库和运动学库中添加了相应的坐标变换程序,具体实现方式如下所述:
改变末端坐标系
通过setEndType和getEndType函数可以设置末端坐标系,EndType::FLANGE为将末端设置为法兰,EndType::TOOL为将末端设置为工具末端。
通过setToolReference和getToolReference函数可以设置读取工具的坐标信息。设置时是以法兰坐标系为相对坐标系,工具末端信息是相对于法兰坐标系的。
将EndType设置为FLANGE后,GetCoords和WriteCoords方法均以法兰位置计算。
将EndType设置为TOOL后,GetCoords和WriteCoords方法均以工具末端位置计算。
改变基坐标系
通过setReferenceFrame函数可以设置基坐标系,RFType::BASE为将机器人基座作为基坐标,RFType::WORLD为将世界坐标系作为基坐标。getReferenceFrame函数为读取当前基坐标系种类。
通过setWorldReference和getWorldReference函数可以设置读取基坐标系信息。设置时是以世界坐标系为相对坐标系,输入机器人的基座相对于世界坐标系的位置信息。
当基坐标系为基座时,GetCoords和WriteCoords方法均以基座为参考坐标系。
当基坐标系为世界坐标系时,GetCoords和WriteCoords方法均以世界坐标系作为参考坐标系。
通信相关更改(暂时)
现增加末端坐标系的设置与读取,世界坐标系的设置与读取,当前参考坐标系的设置与读取,末端类型的设置与读取,移动方式的设置与读取,机械臂信息的发送接收。
这些通信暂时设置为0x80至0x8A
在ParameterList.h文件中新增roboticMessages空间用于添加机械臂通信信息,现只暂时增加“没有逆解”的提示,后续可陆续增加。
MOVEL功能简单设计思想如下:
求出初始点位和目标点位之间的欧式距离,以欧式距离为基准,每隔10mm插入一个插值点,如果插值点没有逆解,搜索位置不变三个方向姿态正负PI/30的临近空间内是否有逆解,主要是避免奇异值以及一些恰好不能求出解的特殊位置。
MOVEL和JOG的点位发送间隔时间改为动态时间,根据两点之间最大关节移动距离计算移动时间,再讲该移动时间减去特定时长作为时间间隔。