6 通信与报文命令
注意:使用通信协议直接通信,需要在basic中烧录transponder,在atom中烧录最新版的atomMain
6.1USB通信设置Communication Settings
请确保您的通信设置如下
- 总线接口: USB Type-C连接
- 波特率: 115200
- 数据位: 8
- 奇偶校验:无
- 停止位: 1
6.2命令帧说明及单一指令解析
主机Basic向从机发送数据,从机接收到数据后进行解析,如包含返回值的指令,从机会在500ms内返回给主机。
6.3命令帧发送与接收格式
所有命令为十六进制,发送与接收格式一致。
每个通信命令必须包含以下5个部分,其中3、4可为空。
- 1 命令针头: 0xFE 0xFE
- 固定
- 必含
- 2 有效命令长度: 0x02 ~ 0x10
- 以下所有命令的长度
- 必含
- 3 命令序号: 00 ~ 8F
- 现已开发了多种命令
- 可为空
- 4 命令内容: 若干
- 可为空
- 5 命令结束: 0XFA
- 固定
- 必含
6.4指令解析
主机Basic向从机发送数据,从机接收到数据后进行解析,如包含返回值的指令,从机会在500ms内返回给主机。
类型 | 数据描述 | 数据长度 | 说明 |
---|---|---|---|
命令帧 | 头字节0 | 1 | 帧头识别,0XFE |
头字节1 | 1 | 帧头识别,0XFE | |
数据长度字节 | 1 | 不同指令对应不同长度数据 | |
命令字节 | 1 | 视不同命令而定 | |
数据帧 | 数据 | 0-16 | 命令附带数据,视不同命令而定 |
结束帧 | 结束字节 | 1 | 停止位,0XFA |
6.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、Atom状态查询
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X12 |
Data[4] | 结束帧 | 0XFA |
串口发送示例:FE FE 02 12 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回帧头 | 0XFE |
Data[1] | 返回帧头 | 0XFE |
Data[2] | 返回长度帧 | 0X03 |
Data[3] | 返回指令帧 | 0X12 |
Data[4] | 上电/断电 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
假设Atom处于上电状态
串口返回示例:FE FE 03 12 01 FA
4、读取角度(读取走位信息)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X20 |
Data[4] | 结束帧 | 0XFA |
串口发送示例:FE FE 02 20 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回帧头 | 0XFE |
Data[1] | 返回帧头 | 0XFE |
Data[2] | 返回长度帧 | 0X0E |
Data[3] | 返回指令帧 | 0X20 |
Data[4] | 1号舵机角度高位 | Angle1_high |
Data[5] | 1号舵机角度低位 | Angle1_low |
Data[6] | 2号舵机角度高位 | Angle2_high |
Data[7] | 2号舵机角度低位 | Angle2_low |
Data[8] | 3号舵机角度高位 | Angle3_high |
Data[9] | 3号舵机角度低位 | Angle3_low |
Data[10] | 4号舵机角度高位 | Angle4_high |
Data[11] | 4号舵机角度低位 | Angle4_low |
Data[12] | 5号舵机角度高位 | Angle5_high |
Data[13] | 5号舵机角度低位 | Angle5_low |
Data[14] | 6号舵机角度高位 | Angle6_high |
Data[15] | 6号舵机角度低位 | Angle6_low |
Data[16] | 结束帧 | 0XFA |
串口返回示例:FE FE 0E 20 00 8C 00 3D FF E6 FF 3F 00 AF FF 51 FA
如何得出1号关节角度
temp = angle1_low+angle1_high*256
Angle1=(temp \ 33000 ?(temp – 65536) : temp)/100
计算方式:角度值低位 + 角度高位值乘以256 先判断是否大于33000 如果大于33000就再减去65536 最后除以100 如果小于33000就直接除以100
(其余同理)
5、发送单独角度
数据域 | 说明 | 数据 |
---|---|---|
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~5
angle_high:数据类型byte
计算方式:角度值乘以100 先转换成int形式 再取十六进制的高字节
angle_low:数据类型byte
计算方式:角度值乘以100 先转换成int形式 再取十六进制的低字节
无返回值
6、发送全部角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0F |
Data[3] | 指令帧 | 0X22 |
Data[4] | 1号舵机角度值高字节 | Angle1_high |
Data[5] | 1号舵机角度值低字节 | Angle1_low |
Data[6] | 2号舵机角度值高字节 | Angle2_ high |
Data[7] | 2号舵机角度值低字节 | Angle2_ low |
Data[8] | 3号舵机角度值高字节 | Angle3_ high |
Data[9] | 3号舵机角度值低字节 | Angle3_ low |
Data[10] | 4号舵机角度值高字节 | Angle4_ high |
Data[11] | 4号舵机角度值低字节 | Angle4_ low |
Data[12] | 5号舵机角度值高字节 | Angle5_ high |
Data[13] | 5号舵机角度值低字节 | Angle5_ low |
Data[14] | 6号舵机角度值高字节 | Angle6_ high |
Data[15] | 6号舵机角度值低字节 | Angle6_ low |
Data[16] | 指定速度 | Sp |
Data[17] | 结束帧 | 0XFA |
发送全部角度均为零/让机械恢复到零位,以30%速度移动
串口发送示例:FE FE 0F 22 00 00 00 00 00 00 00 00 00 00 00 00 1E FA
angle1_high:数据类型byte
计算方式:1号舵机角度值乘以100 先转换成int形式 再取十六进制的高字节
angle1_low:数据类型byte
计算方式:1号舵机角度值乘以100 先转换成int形式 再取十六进制的低字节
(其余同理)
无返回值
7、读取全部坐标
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X23 |
Data[4] | 结束帧 | 0XFA |
串口发送示例:FE FE 02 23 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回帧头 | 0XFE |
Data[1] | 返回帧头 | 0XFE |
Data[2] | 返回长度帧 | 0X0E |
Data[3] | 返回指令帧 | 0X23 |
Data[4] | 指定x坐标高位 | x_high |
Data[5] | 指定x坐标低位 | x_low |
Data[6] | 指定y坐标高位 | y_ high |
Data[7] | 指定y坐标低位 | y_ low |
Data[8] | 指定z坐标高位 | z_ high |
Data[9] | 指定z坐标低位 | z_low |
Data[10] | 指定rx坐标高位 | rx_high |
Data[11] | 指定rx坐标低位 | rx_low |
Data[12] | 指定ry坐标高位 | ry_high |
Data[13] | 指定ry坐标低位 | ry_low |
Data[14] | 指定rz坐标高位 | rz_high |
Data[15] | 指定rz坐标低位 | rz_low |
Data[16] | 结束帧 | 0XFA |
串口返回示例:FE FE 0E 23 01 BC FD A0 10 15 DC 66 FF 54 DE 21 FA
如何得出x坐标
temp = x_low + x_high*256
x坐标=(temp \ 33000 ?(temp – 65536) : temp)/10
计算方式:x坐标值低位 +x坐标值高位乘以256 先判断是否大于33000 如果大于33000就再减去65536 最后除以100 如果小于33000就直接除以10
(y坐标z坐标同理)
如何得出rx坐标
temp = rx_low + rx_high*256
x坐标=(temp \ 33000 ?(temp – 65536) : temp)/100
计算方式:x坐标值低位 +x坐标值高位乘以256 先判断是否大于33000 如果大于33000就再减去65536 最后除以100 如果小于33000就直接除以100
(ry坐标rz坐标同理)
8、发送单独坐标参数
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X06 |
Data[3] | 指令帧 | 0X24 |
Data[4] | axis | x/y/z/rx/ry/rz |
Data[5] | 指定xyz/rxryrz参数高位 | xyz/ rxryrz_high |
Data[6] | 指定xyz/rxryrz参数低位 | xyz/rxryrz_low |
Data[7] | 指定速度 | Sp |
Data[8] | 结束帧 | 0XFA |
设定X坐标为14,目标速度为20%
串口发送示例:FE FE 06 24 00 00 8C 14 FA
指定坐标axis:数据类型byte
取值范围:0~5
xyz_high:数据类型byte
计算方式:x/y/z坐标值乘以10 再取十六进制的高字节
xyz_low:数据类型byte
计算方式:x/y/z坐标值乘以10 再取十六进制的低字节
rxryrz_high:数据类型byte
计算方式:rx/ry/rz乘以100 再取十六进制的高字节
rxryrz_low:数据类型byte
计算方式:rx/ry/rz乘以100 再取十六进制的低字节
无返回值
9、发送全部坐标参数
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X10 |
Data[3] | 指令帧 | 0X25 |
Data[4] | 指定x坐标高位 | x_high |
Data[5] | 指定x坐标低位 | x_low |
Data[6] | 指定y坐标高位 | y_ high |
Data[7] | 指定y坐标低位 | y_ low |
Data[8] | 指定z坐标高位 | z_ high |
Data[9] | 指定z坐标低位 | z_low |
Data[10] | 指定rx坐标高位 | rx_high |
Data[11] | 指定rx坐标低位 | rx_low |
Data[12] | 指定ry坐标高位 | ry_high |
Data[13] | 指定ry坐标低位 | ry_low |
Data[14] | 指定rz坐标高位 | rz_high |
Data[15] | 指定rz坐标低位 | rz_low |
Data[16] | 指定速度 | Sp |
Data[17] | 模式 | 0X01 |
Data[18] | 结束帧 | 0XFA |
设定机械臂末端目标点位(-14,-27,275,-89.5,0.7,-90.7),目标速度50%
串口发送示例:FE FE 10 25 FF 74 FE EE 0A C1 DD 05 00 48 DC 95 32 01 FA
x_high:数据类型byte
计算方式:x坐标乘以10 再取十六进制的高字节
x_low:数据类型byte
计算方式:x坐标乘以10 再取十六进制的低字节
(y轴坐标z轴坐标同理)
rx_high:数据类型byte
计算方式:rx坐标值乘以100 再取十六进制的高字节
rx_low:数据类型byte
计算方式:rx坐标值乘以100 再取十六进制的低字节
(ry轴坐标rz轴坐标同理)
无返回值
10、是否达到点位(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0E/0X0F |
Data[3] | 指令帧 | 0X2A |
Data[4] | 坐标x高位 | x_high |
Data[5] | 坐标x低位 | x_low |
Data[6] | 坐标y高位 | y_high |
Data[7] | 坐标y低位 | y_low |
Data[8] | 坐标z高位 | z_high |
Data[9] | 坐标z低位 | z_low |
Data[10] | 坐标rx高位 | rx_high |
Data[11] | 坐标rx低位 | rx_low |
Data[12] | 坐标ry高位 | ry_high |
Data[13] | 坐标ry低位 | ry_low |
Data[14] | 坐标rz高位 | rz_high |
Data[15] | 坐标rz低位 | rz_low |
Data[16] | Is_linear | type |
Data[17] | 结束帧 | 0XFA |
判断机械臂是否到达指定点位
串口发送示例: FE FE 0E 2A FF 74 FE EE 0A C1 DD 05 00 48 DC 95 FA
x_high:数据类型byte
计算方式:x坐标乘以10 先转换为int类型 再取十六进制高字节
x_low:数据类型byte
计算方式:x坐标乘以10 先转换为int类型 再取十六进制低字节
(y轴坐标z轴坐标同理)
rx_high:数据类型byte
计算方式:rx坐标乘以100 先转换为int类型 再取十六进制高字节
rx_low:数据类型byte
计算方式:rx坐标乘以100 先转换为int类型 再取十六进制低字节
(ry轴坐标rz轴坐标同理)
Type:数据类型byte(暂未使用)
11、机械臂运动检测(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X2B |
Data[4] | 结束帧 | 0XFA |
12、jog-关节方向运动
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X30 |
Data[4] | 关节舵机序号 | Joint |
Data[5] | 关节舵机方向 | direction |
Data[6] | 指定速度 | sp |
Data[7] | 结束帧 | 0XFA |
设定1号舵机顺时针方向以20%速度转动
串口发送示例: FE FE 05 30 01 01 14 FA
关节序号取值范围: 1~6
di:数据类型byte 取值范围 0和1
sp:数据类型byte 取值范围0-100%
无返回值
13、jog-坐标方向运动(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X32 |
Data[4] | 指定坐标 | axis |
Data[5] | 关节舵机方向 | direction |
Data[6] | 指定速度 | sp |
Data[7] | 结束帧 | 0XFA |
14、jog-停止
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X34 |
Data[4] | 结束帧 | 0XFA |
jog停止运动
串口发送示例: FE FE 02 34 FA
无返回值
15、发送电位值
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X3A |
Data[4] | 关节舵机序号 | Joint |
Data[5] | 电位值高位 | Encoder_high |
Data[6] | 电位值低位 | Encoder_low |
Data[7] | 结束帧 | 0XFA |
示例,设定5号关节到2048电位。
串口发送示例: FE FE 05 3A 05 08 00 FA
关节序号取值范围:0~5
Joint:数据类型byte
Encoder_high:数据类型byte
计算方式:取电位值(十六进制)的高位
Encoder_low:数据类型byte
计算方式:取电位值值(十六进制)的低位
无返回值
16、获取电位值
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X3B |
Data[4] | 关节序号 | joint |
Data[5] | 结束帧 | 0XFA |
获取2号舵机电位值
串口发送示例: FE FE 01 3B 01 FA
关节序号取值范围:0~5
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X04 |
Data[3] | 返回指令帧 | 0X3B |
Data[4] | 舵机电位值高位 | Encoder_high |
Data[5] | 舵机电位值低位 | Encoders_low |
Data[6] | 结束帧 | 0XFA |
串口返回示例: FE FE 04 3B 08 07 FA
如何计算电位值
电位值 = 电位值低位 + 电位值高位 * 256
17、发送六个舵机的电位值
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0F |
Data[3] | 指令帧 | 0X3C |
Data[4] | 1号舵机电位值高字节 | encoder_1_high |
Data[5] | 1号舵机电位值低字节 | encoder_1_low |
Data[6] | 2号舵机电位值高字节 | encoder_2_high |
Data[7] | 2号舵机电位值低字节 | encoder_2_low |
Data[8] | 3号舵机电位值高字节 | encoder_3_high |
Data[9] | 3号舵机电位值低字节 | encoder_3_low |
Data[10] | 4号舵机电位值高字节 | encoder_4_high |
Data[11] | 4号舵机电位值低字节 | encoder_4_low |
Data[12] | 5号舵机电位值高字节 | encoder_5_high |
Data[13] | 5号舵机电位值低字节 | encoder_5_low |
Data[14] | 6号舵机电位值高字节 | encoder_6_high |
Data[15] | 6号舵机电位值低字节 | encoder_6_low |
Data[16] | 指定速度 | Sp |
Data[17] | 结束帧 | 0XFA |
发送所有电机的电位值均为2048,速度为20%
串口发送示例:FE FE 0F 3C 08 00 08 00 08 00 08 00 08 00 08 00 14 FA
(参考上方发送单独电位值)
encoder_1_high:数据类型byte
计算方式: 1号舵机电位值先转换为int类型 再取十六进制高字节
encoder_1_low:数据类型byte
计算方式: 1号舵机电位值先转换为int类型 再取十六进制低字节
(其余同理)
Sp:数据类型byte 取值范围:0~100%
无返回值
18、读取速度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X40 |
Data[4] | 结束帧 | 0XFA |
串口发送示例: FE FE 02 40 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X03 |
Data[3] | 返回指令帧 | 0X40 |
Data[4] | 指定速度 | Sp |
Data[5] | 结束帧 | 0XFA |
假设当前速度为50%
串口返回示例:FE FE 03 40 32 FA
19、设置速度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X41 |
Data[4] | 指定速度 | sp |
Data[5] | 结束帧 | 0XFA |
设定当前速度为50%
串口发送示例:FE FE 03 41 32 FA
无返回值
20、读取FeedOverride(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X42 |
Data[4] | 结束帧 | 0XFA |
21、读取加速度(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X44 |
Data[4] | 结束帧 | 0XFA |
22、读取关节最小角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X4A |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 结束帧 | 0XFA |
读取2号关节最小角度
串口发送示例: FE FE 03 4A 01 FA
joint_no取值范围:0~5
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X04 |
Data[3] | 返回指令帧 | 0X4A |
Data[4] | 舵机角度值高位 | Angle_high |
Data[5] | 舵机角度值低位 | Angle_low |
Data[6] | 结束帧 | 0XFA |
串口返回示例: FE FE 04 4A F9 F2 FA
如何得出关节最小角度
temp = angle1_low+angle1_high*256
Angle1=(temp \ 33000 ?(temp – 65536) : temp)/10
计算方式:角度值低位 + 角度高位值乘以256 先判断是否大于33000 如果大于33000就再减去65536 最后除以10 如果小于33000就直接除以10
23、读取关节最大角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X4B |
Data[4] | 关节舵机序号 | joint_number |
Data[5] | 结束帧 | 0XFA |
读取2号关节的最大角度
串口发送示例: FE FE 03 4B 01 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X04 |
Data[3] | 返回指令帧 | 0X4B |
Data[4] | 舵机角度值高位 | Angle_high |
Data[5] | 舵机角度值低位 | Angle_low |
Data[6] | 结束帧 | 0XFA |
串口返回示例: FE FE 04 4B 06 0E FA
joint_no取值范围:0~5
如何得出关节最大角度
temp = angle1_low+angle1_high*256
Angle1=(temp \ 33000 ?(temp – 65536) : temp)/10
计算方式:角度值低位 + 角度高位值乘以256 先判断是否大于33000 如果大于33000就再减去65536 最后除以10 如果小于33000就直接除以10
24、查看连接
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X50 |
Data[4] | 结束帧 | 0XFA |
串口发送示例:FE FE 03 50 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X50 |
Data[4] | 连接/未连接 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
连接正常
串口返回示例:FE FE 03 50 01 FA
25、查看舵机是否全部上电(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X51 |
Data[4] | 结束帧 | 0XFA |
串口发送示例:FE FE 02 51 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X51 |
Data[4] | 上电/未上电 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
并没有全部舵机上电 串口返回示例:FE FE 03 51 01 FA
26、读取伺服参数
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0X53 |
Data[4] | 关节舵机序号 | joint_no |
Data[5] | 数据地址 | data_id |
Data[6] | 结束帧 | 0XFA |
读取1号舵机位置P比例参数
串口发送示例:FE FE 04 53 01 15 FA
joint_no取值范围 1~6
Data_id:数据类型byte
取值如下表
地址 | 功能 | 取值范围 | 初始值 | 取值解析 |
---|---|---|---|---|
20 | LED报警 | 0-254 | 0 | 1\0 = 打开或关闭LED报警 |
21 | 位置环P | 0-254 | 10 | 控制电机的比例系数 |
22 | 位置环I | 0-254 | 0 | 控制电机的微分系数 |
23 | 位置环D | 0-254 | 1 | 控制电机的积分系数 |
24 | 最小启动力 | 0-1000 | 0 | 设置最小输出力矩 1000 = 100% |
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X03 |
Data[3] | 返回指令帧 | 0X53 |
Data[4] | 返回数据 | data |
Data[5] | 结束帧 | 0XFA |
串口返回示例:FE FE 03 53 10 FA
27、设置舵机伺服参数
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X52 |
Data[4] | 关节舵机序号 | joint_no |
Data[5] | 数据地址 | data_id |
Data[6] | 数据 | data |
Data[7] | 结束帧 | 0XFA |
设置1号舵机位置P比例参数为1
串口发送示例:FE FE 05 52 01 15 01 FA
joint_no取值范围:1~6
无返回值
取值如下表
地址 | 功能 | 取值范围 | 初始值 | 取值解析 |
---|---|---|---|---|
20 | LED报警 | 0-254 | 0 | 1\0 = 打开或关闭LED报警 |
21 | 位置环P | 0-254 | 10 | 控制电机的比例系数 |
22 | 位置环I | 0-254 | 0 | 控制电机的微分系数 |
23 | 位置环D | 0-254 | 1 | 控制电机的积分系数 |
24 | 最小启动力 | 0-1000 | 0 | 设置最小输出力矩 1000 = 100% |
28、设置舵机零点(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X54 |
Data[4] | 关节舵机序号 | joint_number |
Data[5] | 结束帧 | 0XFA |
设置1号舵机的零位
串口发送示例:FE FE 03 54 01 FA
joint_number:1~6
无返回值
29、刹车单个电机(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X55 |
Data[4] | 关节舵机序号 | joint_number |
Data[5] | 结束帧 | 0XFA |
30、程序暂停运行(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X26 |
Data[4] | 结束帧 | 0XFA |
31、程序是否运行(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X27 |
Data[6] | 结束帧 | 0XFA |
32、程序恢复(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X28 |
Data[4] | 结束帧 | 0XFA |
33、程序停止运行(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X29 |
Data[4] | 结束帧 | 0XFA |
34、机器人自由模式(关闭所有扭力输出)(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X13 |
Data[4] | 结束帧 | 0XFA |
35、机器人系统检测正常(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X14 |
Data[4] | 结束帧 | 0XFA |
36、机器人错误检测(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X15 |
Data[4] | 结束帧 | 0XFA |
37、设置成自由模式(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[2] | 模式 | 0X00/0X01 |
Data[3] | 指令帧 | 0X1A |
Data[4] | 结束帧 | 0XFA |
38、检查是否是自由模式(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X1B |
Data[4] | 结束帧 | 0XFA |
39、设定atom屏幕RGB灯的颜色
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X6A |
Data[4] | R | 0X00/0XFF |
Data[5] | G | 0X00/0XFF |
Data[6] | B | 0X00/0XFF |
Data[7] | 结束帧 | 0XFA |
设置RGB为蓝色
串口发送示例:FE FE 05 6A 00 00 FF FA
无返回值
40、设置FeedOverride(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0X43 |
Data[4] | Feed_override高位 | Feed_override_high |
Data[5] | Feed_override低位 | Feed_override_low |
Data[6] | 结束帧 | 0XFA |
41、设置加速度(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0X45 |
Data[4] | 加速度值高位 | acceleration_high |
Data[5] | 加速度值低位 | acceleration_low |
Data[6] | 结束帧 | 0XFA |
acceleration_high:数据类型byte
计算方式:加速度值乘以10 先转换为int格式 再取十六进制的高字节
acceleration_low:数据类型byte
计算方式:加速度值乘以10 先转换为int格式 再取十六进制的低字节
42、设置关节最小角度(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X4C |
Data[4] | 关节舵机序号 | Joint |
Data[5] | 角度值高位 | Angle_high |
Data[6] | 角度值低位 | Angle_low |
Data[7] | 结束帧 | 0XFA |
43、设置关节最大角度(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X4D |
Data[4] | 关节舵机序号 | Joint |
Data[5] | 角度值高位 | Angle_high |
Data[6] | 角度值低位 | Angle_low |
Data[7] | 结束帧 | 0XFA |
44、单个电机掉电
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X56 |
Data[4] | 舵机序号 | Servo_no |
Data[5] | 结束帧 | 0XFA |
让3号舵机掉电
串口发送示例:FE FE 03 56 03 FA
Servo_no:1~6
无返回值
45、单个电机上电
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X57 |
Data[4] | 舵机序号 | Servo_no |
Data[5] | 结束帧 | 0XFA |
给1号舵机上电
串口发送示例:FE FE 03 57 01 FA
Servo_no:1~6
无返回值
46、设置atom引脚模式
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0X60 |
Data[4] | 引脚序号 | pin_no |
Data[5] | 输入/输出 | 00X00/00X01 |
Data[6] | 结束帧 | 0XFA |
设置atom pin22为输入模式
串口发送示例:FE FE 04 60 16 00 FA
Pin_no:数据类型byte
Pin_mode:0/1
无返回值
47、设置Atom IO(setDigitalOutput)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0X61 |
Data[4] | 引脚序号 | Pin_no |
Data[5] | 电平信号 | 0X00/0X01 |
Data[6] | 结束帧 | 0XFA |
设置引脚P23为高电平
串口发送示例:FE FE 04 61 17 01 FA
无返回值
48、读取Atom IO(getDigitalInput)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X62 |
Data[4] | 引脚序号 | pin_no |
Data[5] | 结束帧 | 0XFA |
读取引脚P22的电平信号
串口发送示例:FE FE 03 62 16 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回识别帧 | 0XFE |
Data[1] | 返回识别帧 | 0XFE |
Data[2] | 返回数据长度帧 | 0X03 |
Data[3] | 返回指令帧 | 0X62 |
Data[4] | 电平信号 | 0X00/0X01 |
Data[5] | 结束帧 | 0XFA |
假设引脚P22为高电平
串口返回示例:FE FE 03 62 01 FA
49、设置Atom引脚PWM输出
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X06 |
Data[3] | 指令帧 | 0X64 |
Data[4] | 通道 | Pin_no |
Data[5] | 晶振频率_高 | freq_high |
Data[6] | 晶振频率_低 | freq_low |
Data[7] | 占空比 | pin_val |
Data[8] | 结束帧 | 0XFA |
设置atom 23号引脚 输出晶振频率为10000,占空比为50%的PWM波形
串口发送示例:FE FE 06 64 17 27 10 32 FA
无返回值
50、读取夹爪角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X65 |
Data[6] | 结束帧 | 0XFA |
串口发送示例:FE FE 02 65 FA
返回数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0X65 |
Data[4] | 电位值高位 | Angle_high |
Data[5] | 电位值低位 | Angle_low |
Data[6] | 结束帧 | 0XFA |
串口返回示例:FE FE 04 65 08 00 FA
51、设置夹爪模式
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0X66 |
Data[4] | 夹爪张开/收拢 | 0X00/0X01 |
Data[5] | 速度 | Sp |
Data[6] | 结束帧 | 0XFA |
设置夹爪以50%速度张开
串口发送示例:FE FE 04 66 00 32 FA
无返回值
52、设置夹爪角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X67 |
Data[4] | 角度值高位 | encoder_high |
Data[5] | 角度值低位 | encoder_low |
Data[6] | 速度 | Sp |
Data[7] | 结束帧 | 0XFA |
串口发送示例:FE FE 05 67 08 00 3C FA
无返回值
53、夹爪设置零点
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X68 |
Data[4] | 结束帧 | 0XFA |
设置夹爪当前位置为零点
串口发送示例:FE FE 02 68 FA
54、检测夹爪是否运动(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X69 |
Data[4] | 结束帧 | 0XFA |
55、检测机器人版本(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X01 |
Data[4] | 结束帧 | 0XFA |
56、读取软件版本(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X02 |
Data[4] | 结束帧 | 0XFA |
57、检查本机器人ID(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X03 |
Data[4] | 结束帧 | 0XFA |
58、设置本机器人ID(暂未开发)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X04 |
Data[4] | ID | ID |
Data[5] | 结束帧 | 0XFA |
59、设置底座IO输出
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 指令帧 | 0Xa0 |
Data[4] | 引脚序号 | Pin_no |
Data[5] | 电平信号 | 0X00/0X01 |
Data[6] | 结束帧 | 0XFA |
设置引脚2输出高电平
串口发送示例:FE FE 02 a0 02 01 FA(测)
60、读取底座IO输出(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0Xa1 |
Data[4] | 引脚序号 | Pin_no |
Data[5] | 结束帧 | 0XFA |
61、设置碰撞电流(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 指令帧 | 0X90 |
Data[4] | 舵机序号 | Servo_no |
Data[5] | currentValue | currentValue_high |
Data[6] | currentValue | currentValue_low |
Data[7] | 结束帧 | 0XFA |
62、读取碰撞电流(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 指令帧 | 0X91 |
Data[4] | 舵机序号 | Servo_no |
Data[5] | 结束帧 | 0XFA |
63、设置碰撞电流开关(暂未开放)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X92 |
Data[4] | OFF/ON | 0X00/0X01 |
Data[5] | 结束帧 | 0XFA |
附录:
在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的点位发送间隔时间改为动态时间,根据两点之间最大关节移动距离计算移动时间,再讲该移动时间减去特定时长作为时间间隔。