通信和信息命令
注意: 在通过通信协议直接通信之前,需要在 M5Stack-basic 上烧录 "Transponder",并在 Atom 上烧录最新的 atomMain。
请详细阅读接口协议文档,并在测试后继续程序开发。 | |
---|---|
1 USB 通信设置
确保准备好以下设置:
- 主线接口:USB Type-C 连接电脑和机械臂
- 波特率: 115200
- 数据位: 8
- 奇偶校验位: none
- 停止位: 1
2 指令帧简介 & 指导
主 PC 通过 M5Stakc-basic 向外围 PC 传输数据。外围 PC 将数据解码为带有返回值的命令,然后在 500 毫秒内将结果发送回主 PC。
3 信息命令的发送和接收格式
发送和接收都应以十六进制表示。每条命令应包含 5 个部分,如下所示。第 3 和第 4 部分可以留空。
- 1 命令引脚:0xFE 0xFE
- 不变
- 不可或缺
- 2 有效长度:
- 总长度包括针脚、序列号、功能代码和端点
- 不可或缺
- 3 序列号:00 ~ 8F
- 已开发指令的相应数量
- 可以留空。
- 4 功能代码
- 以目标为导向
- 可以留空。
- 5 结束: 0XFA
- 不变
- 不可或缺
4 命令解释
主 PC 通过 M5Stakc-basic 向外围 PC 传输数据。外围 PC 将数据解码为带有返回值的命令,然后在 500 毫秒内将结果发送回主 PC。
类型 | 数据 | 长度 | 功能 |
---|---|---|---|
指令框架 | 开始位: 0 | 1 | 起始帧识别,0XFE |
开始位: 1 | 1 | 起始帧识别,0XFE | |
位数据长度 | 1 | 不同的命令对应不同的数据长度 | |
指令位 | 1 | 取决于不同的命令 | |
指令框架 | 数据 | 0-16 | 命令与数据,取决于不同的命令 |
结束框架 | 结束位 | 1 | 停止位,0XFA |
5 单一指令命令说明
开机
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X10 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输:FE FE 02 10 FA
无返回值
功率下降和连接中断
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 指令帧 | 0X11 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输:FE FE 02 11 FA
无返回值
检查 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
功率下降
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X13 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输:FE FE 02 13 FA
无返回值
机器人系统检查:正常
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X14 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 14 FA
返回值:数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X03 |
Data[3] | 返回值: 命令帧 | 0X14 |
Data[4] | 连接/连接中断 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
示例:
假设 Atom 已成功连接:
端口返回:FE FE 03 14 01 FA
命令更新模式(插值设置/运动模式更新)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X16 |
Data[4] | 连接/连接中断 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
示例:
设置更新运动模式:
串口传输: FE FE 03 16 01 FA
设置插补运动模式
串口传输: FE FE 03 16 00 FA
自由模式(关闭扭力输出)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X1A |
Data[4] | 开启/关闭 | 01/00 |
Data[5] | 结束帧 | 0XFA |
示例:
设置自由运动模式
串口传输: FE FE 03 1A 01 FA
检查是否设置了自由模式
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X1B |
Data[5] | 结束帧 | 0XFA |
示例:
端口返回:FE FE 02 1B FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X1B |
Data[4] | 开启/关闭 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
示例:
假设 Atom 处于自由模式:
端口返回:FE FE 03 1B 01 FA
读取角度(读取走位信息)
数据域 | 说明 | 数据 |
---|---|---|
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 |
示例:
返回值 of port: 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
解释:如果 temp 大于 33000,则 temp 减去 65536,然后除以 100;如果 temp 小于 33000,则 temp 直接除以 100。
其他关节角度的计算方法与此类似。
发送角
数据域 | 说明 | 数据 |
---|---|---|
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 号舵机移动到零位
串口传输: FE FE 06 21 01 00 00 14 FA
关节号:1-6
angle_high: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制高字节
angle_low: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制低字节
无返回值
发送所有角度
数据域 | 说明 | 数据 |
---|---|---|
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 |
示例:
向整个关节发送 0 角度,让舵机移动到零位。
串口传输: FE FE 0F 22 00 00 00 00 00 00 00 00 00 00 00 00 1E FA
angle1_high: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制高字节
angle1_low: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制低字节
其他角度的计算方法与此类似。
无返回值
读取整个坐标
数据域 | 说明 | 数据 |
---|---|---|
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 |
示例:
Port 返回值: 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 coordinate =(temp\33000 ?(temp – 65536) : temp)/10
解释:如果 temp 大于 33000,则 temp 减去 65536,然后除以 10;如果 temp 小于 33000,则 temp 直接除以 10。
y 坐标的计算方法类似。
如何获得 rx 坐标:
temp = rx_low + rx_high*256
x coordinate =(temp \ 33000 ?(temp – 65536) : temp)/100
解释:如果 temp 大于 33000,则 temp 减去 65536,然后除以 100;如果 temp 小于 33000,则 temp 直接除以 100。
y 坐标的计算方法类似。
发送唯一坐标参数
数据域 | 说明 | 数据 |
---|---|---|
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 坐标为 200,目标速度为 20、
串口传输: FE FE 06 24 01 07 D0 14 FA
指定轴坐标:byte
范围: 1-6
xyz_high 的数据类型:byte
计算方法:将 x/y/z 坐标值乘以 100 并转换为积分形式,得到十六进制高字节
xyz_low 的数据类型: byte
计算方法:将 x/y/z 坐标值乘以 100 并转换为积分形式,得到十六进制低字节
rxryrz_high 的数据类型: byte
计算方法:将 rx/ry/rz 坐标值乘以 100 并转换为积分形式,得到十六进制高字节
rxryrz_low 的数据类型: byte
计算方法:将 rx/ry/rz 坐标值乘以 100 并转换为积分形式,得到十六进制低字节
无返回值
发送整个坐标的参数
数据域 | 说明 | 数据 |
---|---|---|
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[17] | 结束帧 | 0XFA |
示例:
假设机械臂末端的坐标为(150.3,-68.7,101.8,10.18,0,-90),速度为 10、
串口传输: FE FE 10 25 05 DF FD 51 03 FA BC 30 00 00 DC D8 0A 01 FA
x_high 的数据类型: byte
计算方法:X 坐标值乘以 10,得到十六进制高字节
x_low 的数据类型: byte
计算方法:X 坐标值乘以 10,得到十六进制低字节
y 坐标的计算方法类似。
rx_high 的数据类型: byte
计算方法:Rx 坐标值乘以 10,得到十六进制高字节
rx_low 的数据类型: byte
计算方法:Rx 坐标值乘以 100,得到十六进制低字节
各坐标的计算方法类似。
无返回值
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X26 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 26 FA
无返回值
判断程序是否停止
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X27 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 27 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X27 |
Data[4] | 暂停/不暂停 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
示例:
假设程序暂停
端口返回值: FE FE 02 27 01 FA
程序恢复
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X28 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 28 FA
无返回值
程序停止
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X29 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 29 FA
无返回值
是否到达指定坐标
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0E/0X0F |
Data[3] | 命令帧 | 0X2A |
Data[4] | x 坐标高位/1 号舵机角度的高字节 | x_high/Angle1_high |
Data[5] | x 坐标低位/1 号舵机角度的低字节 | x_low/Angle1_low |
Data[6] | Y 坐标高位/2 号舵机角度的高字节 | y_high/Angle2_high |
Data[7] | y 坐标低位/2 号舵机角度的低字节 | y_low/Angle2_low |
Data[8] | Y 坐标高位/3 号舵机角度的高字节 | z_high/Angle3_high |
Data[9] | z 坐标低位/3 号舵机角度的低字节 | z_low/Angle3_low |
Data[10] | Rx 坐标高位/4 号舵机角度的高字节 | rx_high/Angle4_high |
Data[11] | Rx 坐标低位/4 号舵机角度的低字节 | rx_low/Angle4_low |
Data[12] | Ry 坐标高位/5 号舵机角度的高字节 | ry_high/Angle5_high |
Data[13] | RY 坐标低位/5 号舵机角度的低字节 | ry_low/Angle5_low |
Data[14] | RZ 坐标高位/6 号舵机角度的高字节 | rz_high/Angle6_high |
Data[15] | RZ 坐标低位/6 号舵机角度的低字节 | rz_low/Angle6_low |
Data[16] | 坐标/角度 | 0X01/0X00 |
Data[17] | 结束帧 | 0XFA |
示例:
判断机械臂是否移动到零位:
串口传输: FE FE 0F 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 FA
x_high 的数据类型: byte
计算方法:X 坐标值乘以 10 并转换为积分形式,得到十六进制高字节
x_low 的数据类型:byte
计算方法:X 坐标值乘以 10 并转换为积分形式,得到十六进制低字节
y 坐标的计算方法类似。
rx_high 的数据类型: byte
计算方法:X rx 坐标值乘以 100 并转换为积分形式,得到十六进制高字节
rx_low 的数据类型: byte
计算方法:X rx 坐标值乘以 100 并转换为积分形式,得到十六进制低字节
各坐标的计算方法类似.
angle_high 的数据类型: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制高字节
angle_low 的数据类型: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制低字节
类型:字节(暂时不可用)
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: head frame | 0XFE |
Data[1] | 返回值: head frame | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X03 |
Data[3] | 返回值: 命令帧 | 0X2A |
Data[4] | 达到点位/未达到点位 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
示例:
假设机械臂无法到达该点:
端口返回值: FE FE 03 2A 00 FA
移动检查
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X2B |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 2B FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 帧头 | 0XFE |
Data[1] | 返回值: 帧头 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X03 |
Data[3] | 返回值: 命令帧 | 0X2B |
Data[4] | 运动/不运动 | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
示例:
假设程序正在运行:
port 返回值: FE FE 03 2B 01 FA
点动--以关节为导向的运动
数据域 | 说明 | 数据 |
---|---|---|
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% 的速度顺时针旋转:
port 返回值: FE FE 05 30 01 01 14 FA
关节序号范围: 1-6
di:字节数据类型,0 或 1 均可
sp:字节数据类型,范围为 0 至 100
无返回值.
jod-绝对控制
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X06 |
Data[3] | 命令帧 | 0X31 |
Data[4] | 舵机序列号 | Joint |
Data[5] | 舵机角度的高字节 | Angle_high |
Data[6] | 舵机角度的低字节 | Angle_low |
Data[7] | 指定速度 | sp |
Data[8] | 结束帧 | 0XFA |
示例:
假设 1 号舵机以 20% 的速度移动到 45° 时
串口传输: FE FE 06 31 01 11 94 14 FA
接头编号范围: 1-6
Angle_high 的数据类型: byte
计算方法:Angle_high 的值乘以 100,然后转换为积分形式,得到十六进制高字节
Angle_low 的数据类型: byte
计算方法:Angle_low 的值乘以 100,然后转换为积分形式,得到十六进制低字节
sp: 字节数据类型,范围为 0 至 100
无返回值
点动--以协调为导向的运动
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 命令帧 | 0X32 |
Data[4] | 指定坐标 | axis |
Data[5] | 舵机方向 | di |
Data[6] | 指定速度 | sp |
Data[7] | 结束帧 | 0XFA |
示例:
假设机械臂以 20 的速度向 x 坐标移动
串口传输: FE FE 05 32 01 01 14 FA
轴范围为 1 至 6,分别代表 x、y、z、rx、ry、rz
di: 字节数据类型,0 或 1
sp: 字节数据类型,范围为 0 至 100
无返回值
点动步进信号
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X06 |
Data[3] | 命令帧 | 0X33 |
Data[4] | 舵机序列号 | Joint |
Data[5] | 舵机角度的高字节 | Angle_high |
Data[6] | 舵机角度的低字节 | Angle_low |
Data[7] | 指定速度 | sp |
Data[8] | 结束帧 | 0XFA |
示例:
假设 1 号舵机的角度扩大了 45°,旋转速度为 20
串口传输: FE FE 06 33 01 11 94 14 FA
关节序号从 1 到 6 不等
angle_high 的数据类型: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制高字节
angle_low 的数据类型: byte
计算方法:角度值乘以 100 并转换为积分形式,得到十六进制低字节
sp: 字节数据类型,范围为 0 至 100
无返回值
点动-停止
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X34 |
Data[4] | 结束帧 | 0XFA |
示例:
停止移动
串口传输: FE FE 02 34 FA
无返回值
发送电位值
数据域 | 说明 | 数据 |
---|---|---|
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
计算方法:获取电位值低位(十六进制形式)
无返回值
获取电位值
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X3B |
Data[4] | 关节序号 | joint |
Data[5] | 结束帧 | 0XFA |
示例:FE FE 03 3B 02 FA
获取 NO.2 舵机电位值
joint取值范围:1-6
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
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
发送六个舵机的电位值
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0E/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 号舵机的电位转换为积分形式,得到高字节十六进制数
encoder_1_low 的数据类型: byte
计算方法:将 1 号舵机的电位转换为积分形式,得到低字节十六进制数
sp: 字节数据类型,范围为 0 至 100
无返回值
读取六个舵机的电位值
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X3D |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 3D FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0E |
Data[3] | 命令帧 | 0X3D |
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[17] | 结束帧 | 0XFA |
示例:
假设当前机械臂各关节都处于 0 位
串口返回值: FE FE 0E 3D 00 00 00 00 00 00 00 00 00 00 00 00 FA
如何计算电位值
电位值 = 电位值低位 + 电位值高位 * 256
读取速度
数据域 | 说明 | 数据 |
---|---|---|
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] | specified speed | Sp |
Data[5] | 结束帧 | 0XFA |
示例:
假设速度为 50
port 返回值: FE FE 03 40 32 FA
设置速度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X41 |
Data[4] | 指定速度 | Sp |
Data[5] | 结束帧 | 0XFA |
Sp:数据类型 byte,范围为 0 至 100
示例:
假设速度为 50
port 返回值: FE FE 03 41 32 FA
读取关节最小角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X4A |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 结束帧 | 0XFA |
示例:
读取关节 2 的最小角度
串口传输: FE FE 03 4A 02 FA
joint_no 取值范围:1-6
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X05 |
Data[3] | 返回值: 命令帧 | 0X4A |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 舵机角度值高位 | Angle_high |
Data[6] | 舵机角度值低位 | Angle_low |
Data[7] | 结束帧 | 0XFA |
示例:
port 返回值: FE FE 05 4A 02 F9 F2 FA
如何得出关节最小角度
temp = angle1_low+angle1_high*256
Angle1=(temp \ 33000 ?(temp – 65536) : temp)/10
计算方式:角度值低位 + 角度高位值乘以 256 先判断是否大于 33000 如果大于 33000 就再减去 65536 最后除以 10 如果小于 33000 就直接除以 10
读取关节最大角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X4A |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 结束帧 | 0XFA |
joint_no 取值范围:1-6
示例:
读取关节 2 的最小角度
串口传输: FE FE 03 4A 02 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X05 |
Data[3] | 返回值: 命令帧 | 0X4B |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 舵机角度值高位 | Angle_high |
Data[6] | 舵机角度值低位 | Angle_low |
Data[7] | 结束帧 | 0XFA |
示例:
port 返回值: FE FE 05 4B 02 F9 F2 FA
如何得出关节最大角度
temp = angle1_low+angle1_high*256
Angle1=(temp \ 33000 ?(temp – 65536) : temp)/10
计算方式:角度值低位 + 角度高位值乘以 256 先判断是否大于 33000 如果大于 33000 就再减去 65536 最后除以 10 如果小于 33000 就直接除以 10
设置关节最小角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X05 |
Data[3] | 返回值: 命令帧 | 0X4C |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 关节舵机角度值高字节 | Angle_high |
Data[6] | 关节舵机角度值低字节 | Angle_low |
Data[7] | 结束帧 | 0XFA |
示例:
设置 2 号关节最小角度为 0
joint_no 取值范围:1-6
port 返回值: FE FE 03 4C 32 FA
angle1_high:数据类型 byte
计算方式:舵机角度值乘以 100 先转换成 int 形式 再取十六进制的高字节
angle1_low:数据类型 byte
计算方式:舵机角度值乘以 100 先转换成 int 形式 再取十六进制的低字节
串口发送示例: FE FE 05 4C 02 00 00 FA
无返回值
设置关节最大角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X05 |
Data[3] | 命令帧 | 0X4D |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | highbyte of steering gear | Angle_high |
Data[6] | lowbyte of steering gear | Angle_low |
Data[7] | 结束帧 | 0XFA |
示例:
设置 2 号关节最大角度为 45
joint_no 取值范围:1-6
port 返回值: FE FE 03 4D 32 FA
angle1_high:数据类型 byte
计算方式:舵机角度值乘以 100 先转换成 int 形式 再取十六进制的高字节
angle1_low:数据类型 byte
计算方式:舵机角度值乘以 100 先转换成 int 形式 再取十六进制的低字节
串口传输: FE FE 05 4D 02 11 94 FA
无返回值
查看连接
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X50 |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 结束帧 | 0XFA |
joint_no 取值范围:1-6
示例:
查看 1 号舵机是否连接
串口传输: FE FE 03 50 01 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X04 |
Data[3] | 命令帧 | 0X50 |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 连接/未连接 | 0X01/0X00 |
Data[6] | 结束帧 | 0XFA |
示例:
1 号舵机连接正常
Port 返回值: FE FE 04 50 01 01 FA
查看舵机是否全部上电
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X51 |
Data[5] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 51 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X03 |
Data[3] | 返回值: 命令帧 | 0X51 |
Data[4] | power on/off | 0X01/0X00 |
Data[5] | 结束帧 | 0XFA |
示例:
并没有全部舵机上电
串口传输: FE FE 03 51 01 FA
读取舵机参数
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 命令帧 | 0X53 |
Data[4] | 关节舵机序号 | Joint_number |
Data[5] | 数据地址 | data_id |
Data[6] | 结束帧 | 0XFA |
示例:
读取 1 号舵机位置 P 比例参数
串口传输: FE FE 04 53 01 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 |
Data[5] | 结束帧 | 0XFA |
设置舵机伺服参数
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 命令帧 | 0X52 |
Data[4] | 关节舵机序号 | Joint_no |
Data[5] | 数据地址 | data_id |
Data[6] | 参数 | 见下表 |
Data[7] | 结束帧 | 0XFA |
示例:
设置 1 号舵机位置 P 比例参数为 1
串口传输: FE FE 04 52 01 15 01 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] | 命令帧 | 0X54 |
Data[4] | 关节舵机序号 | Joint_no |
Data[6] | 结束帧 | 0XFA |
示例:
设置 1 号舵机的零位
串口传输: FE FE 03 54 01 FA
joint_no 取值范围:1-6
无返回值
单电机制动
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X55 |
Data[4] | 关节舵机序号 | Joint_no |
Data[5] | 结束帧 | 0XFA |
示例:
joint_no 取值范围:1-6
单电机制动
串口传输: FE FE 03 55 01 FA
无返回值
单电机掉电
数据域 | 说明 | 数据 |
---|---|---|
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
无返回值
单电机上电
数据域 | 说明 | 数据 |
---|---|---|
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
无返回值
设置 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
无返回值
设置 Atom IO(setDigitalOutput)
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 命令帧 | 0X61 |
Data[4] | 引脚序号 | pin_no |
Data[5] | 电平信号 | 00X00/00X01 |
Data[6] | 结束帧 | 0XFA |
示例:
设置引脚 P23 为高电平
串口传输: FE FE 04 61 17 01 FA
无返回值
读取 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] | 返回值: 数据长度帧 | 0X04 |
Data[3] | 返回值: 命令帧 | 0X62 |
Data[4] | 引脚序号 | pin_no |
Data[5] | 电平信号 | 0X00/0X01 |
Data[6] | 结束帧 | 0XFA |
示例:
假设引脚 P22 为高电平
Port 返回值: FE FE 04 62 16 01 FA
读取夹爪角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X65 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 65 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X03 |
Data[3] | 返回值: 命令帧 | 0X65 |
Data[4] | 夹爪张开幅度 | value |
Data[5] | 结束帧 | 0XFA |
value:0-100%
示例:
假设夹爪处于全张开状态
Port 返回值: FE FE 03 65 64 FA
value: 6 * 16 + 4 = 100
设置夹爪模式
数据域 | 说明 | 数据 |
---|---|---|
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
无返回值
设置夹爪角度
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 命令帧 | 0X67 |
Data[4] | 夹爪张开幅度 | value |
Data[5] | 速度 | Sp |
Data[6] | 结束帧 | 0XFA |
示例:
假设夹爪张开 50%,速度为 20
串口传输: FE FE 04 67 32 14 FA
value 直接换算成 16 进制即可
无返回值
设置夹爪零点
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X68 |
Data[4] | 结束帧 | 0XFA |
示例:
设置夹爪当前位置为零点
串口传输: FE FE 02 68 FA
检测夹爪是否运动
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X69 |
Data[4] | 结束帧 | 0XFA |
串口传输: FE FE 02 69 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X69 |
Data[4] | 停止/运动 | 00/01 |
Data[6] | 结束帧 | 0XFA |
假设夹爪处于停止状态
串口传输: FE FE 03 69 00 FA
设定 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
无返回值
设置底座 IO 输出
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 命令帧 | 0XA0 |
Data[4] | 引脚序号 | Pin_no |
Data[5] | 电平信号 | 0X00/0X01 |
Data[4] | 结束帧 | 0XFA |
示例:
设置引脚 2 输出高电平
串口传输: FE FE 04 A0 02 01 FA
读取底座 IO 输出
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0XA1 |
Data[4] | 引脚序号 | Pin_no |
Data[4] | 结束帧 | 0XFA |
串口传输: FE FE 03 A1 02 01 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X04 |
Data[3] | 返回值: 命令帧 | 0XA1 |
Data[4] | 引脚序号 | Pin_no |
Data[5] | 电平信号 | 0X00/0X01 |
Data[6] | 结束帧 | 0XFA |
示例:
假设引脚 2 为高电平
Port 返回值: FE FE 04 A1 02 01 FA
获取 WiFi 账号&密码
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0XB1 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 B1 FA
port 返回值: ssid: MyCobotWiFi2.4G password: mycobot123
ssid:WiFi 账号
password: WiFi 密码
设置端口号
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X04 |
Data[3] | 命令帧 | 0XB2 |
Data[4] | 端口号高字节 | port_high |
Data[5] | 端口号低字节 | port_low |
Data[6] | 结束帧 | 0XFA |
示例:
假设设置端口号为 7000
串口传输: FE FE 04 B2 1B 58 FA
port_high: 端口号十六进制高字节
port_low: 端口号十六进制低字节
我返回值
设置工具坐标系
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0E |
Data[3] | 命令帧 | 0X81 |
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 |
示例:
假设设置(0,0,50,0,0,0)为工具坐标系
串口传输: FE FE 0E 81 00 00 00 00 13 88 00 00 00 00 00 00 FA
我返回值
获取工具坐标系
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X82 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 82 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0E |
Data[3] | 命令帧 | 0X82 |
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 |
Port 返回值: FE FE 0E 82 00 00 00 00 13 88 00 00 00 00 00 00 FA
如何得出 x 坐标:
temp = x_low + x_high*256
x coordinate =(temp\33000 ?(temp – 65536) : temp)/10
计算方式:x 坐标值低位 +x 坐标值高位乘以 256 先判断是否大于 33000 如果大于 33000 就再减去 65536 最后除以 10 如果小于 33000 就直接除以 10.
(y 坐标 z 坐标同理)
如何得出 rx 坐标:
temp = rx_low + rx_high*256
x coordinate =(temp \ 33000 ?(temp – 65536) : temp)/100
计算方式:x 坐标值低位 +x 坐标值高位乘以 256 先判断是否大于 33000 如果大于 33000 就再减去 65536 最后除以 100 如果小于 33000 就直接除以 100
(ry 坐标 rz 坐标同理)
设置世界坐标系
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X0E |
Data[3] | 命令帧 | 0X81 |
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 |
Port 返回值: FE FE 0E 84 00 00 00 00 13 88 00 00 00 00 00 00 FA
如何得出 x 坐标:
temp = x_low + x_high*256
x coordinate =(temp\33000 ?(temp – 65536) : temp)/10
计算方式:x 坐标值低位 +x 坐标值高位乘以 256 先判断是否大于 33000 如果大于 33000 就再减去 65536 最后除以 10 如果小于 33000 就直接除以 10.
(y 坐标 z 坐标同理)
如何得出 rx 坐标:
temp = rx_low + rx_high*256
x coordinate =(temp \ 33000 ?(temp – 65536) : temp)/100
计算方式:x 坐标值低位 +x 坐标值高位乘以 256 先判断是否大于 33000 如果大于 33000 就再减去 65536 最后除以 100 如果小于 33000 就直接除以 100
(ry 坐标 rz 坐标同理)
设置基坐标系
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X85 |
Data[4] | 基坐标/世界坐标 | 00/01 |
Data[5] | 结束帧 | 0XFA |
示例:
假设设置坐标系为世界坐标系
串口传输: FE FE 03 85 01 FA
我返回值
获取基坐标系
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X86 |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 86 FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 返回值: 识别帧 | 0XFE |
Data[1] | 返回值: 识别帧 | 0XFE |
Data[2] | 返回值: 数据长度帧 | 0X03 |
Data[3] | 返回值: 命令帧 | 0X86 |
Data[4] | 基坐标/世界坐标 | 00/01 |
Data[5] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 03 86 01 FA
设置末端坐标系
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X89 |
Data[4] | 法兰/工具 | 00/01 |
Data[5] | 结束帧 | 0XFA |
示例:
假设设置末端坐标系为工具
串口传输: FE FE 03 89 01 FA
无返回值
获取末端坐标系
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X02 |
Data[3] | 命令帧 | 0X8A |
Data[4] | 结束帧 | 0XFA |
示例:
串口传输: FE FE 02 8A FA
返回值: 数据结构
数据域 | 说明 | 数据 |
---|---|---|
Data[0] | 识别帧 | 0XFE |
Data[1] | 识别帧 | 0XFE |
Data[2] | 数据长度帧 | 0X03 |
Data[3] | 命令帧 | 0X8A |
Data[4] | 法兰/工具 | 00/01 |
Data[5] | 结束帧 | 0XFA |
示例:
串口返回值: FE FE 03 8A 01 FA
附录:
在 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 方法均以基座为参考坐标系。
关于通信的信息更新
现增加末端坐标系的设置与读取,世界坐标系的设置与读取,当前参考坐标系的设置与读取,末端类型的设置与读取,移动方式的设置与读取,机械臂信息的发送接收。
这些通信暂时设置为 0x80 至 0x8A
在 ParameterList.h 文件中新增 roboticMessages 空间用于添加机械臂通信信息,现只暂时增加“没有逆解”的提示,后续可陆续增加。
MOVEL 功能简单设计思想如下:
求出初始点位和目标点位之间的欧式距离,以欧式距离为基准,每隔 10mm 插入一个插值点,如果插值点没有逆解,搜索位置不变三个方向姿态正负 PI/30 的临近空间内是否有逆解,主要是避免奇异值以及一些恰好不能求出解的特殊位置。
MOVEL 和 JOG 的点位发送间隔时间改为动态时间,根据两点之间最大关节移动距离计算移动时间,再讲该移动时间减去特定时长作为时间间隔。