通信和信息命令

注意: 在通过通信协议直接通信之前,需要在 M5Stack-basic 上烧录 "Transponder",并在 Atom 上烧录最新的 atomMain。

img-1 请详细阅读接口协议文档,并在测试后继续程序开发。

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

示例:

  1. 设置更新运动模式:

    串口传输: FE FE 03 16 01 FA

  2. 设置插补运动模式

    串口传输: 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

附录:

  1. 在 ATOM 库和运动学库中添加了相应的坐标变换程序,具体实现方式如下所述:

  2. 改变末端坐标系

  3. 通过 setEndType 和 getEndType 函数可以设置末端坐标系,EndType::FLANGE 为将末端设置为法兰,EndType::TOOL 为将末端设置为工具末端。

  4. 通过 setToolReference 和 getToolReference 函数可以设置读取工具的坐标信息。设置时是以法兰坐标系为相对坐标系,工具末端信息是相对于法兰坐标系的。

  5. 将 EndType 设置为 FLANGE 后,GetCoords 和 WriteCoords 方法均以法兰位置计算。

  6. 将 EndType 设置为 TOOL 后,GetCoords 和 WriteCoords 方法均以工具末端位置计算。

  7. 改变基坐标系

  8. 通过 setReferenceFrame 函数可以设置基坐标系,RFType::BASE 为将机器人基座作为基坐标,RFType::WORLD 为将世界坐标系作为基坐标。getReferenceFrame 函数为读取当前基坐标系种类。

  9. 通过 setWorldReference 和 getWorldReference 函数可以设置读取基坐标系信息。设置时是以世界坐标系为相对坐标系,输入机器人的基座相对于世界坐标系的位置信息。

  10. 当基坐标系为基座时,GetCoords 和 WriteCoords 方法均以基座为参考坐标系。

关于通信的信息更新

现增加末端坐标系的设置与读取,世界坐标系的设置与读取,当前参考坐标系的设置与读取,末端类型的设置与读取,移动方式的设置与读取,机械臂信息的发送接收。

这些通信暂时设置为 0x80 至 0x8A

在 ParameterList.h 文件中新增 roboticMessages 空间用于添加机械臂通信信息,现只暂时增加“没有逆解”的提示,后续可陆续增加。

MOVEL 功能简单设计思想如下:

求出初始点位和目标点位之间的欧式距离,以欧式距离为基准,每隔 10mm 插入一个插值点,如果插值点没有逆解,搜索位置不变三个方向姿态正负 PI/30 的临近空间内是否有逆解,主要是避免奇异值以及一些恰好不能求出解的特殊位置。

MOVEL 和 JOG 的点位发送间隔时间改为动态时间,根据两点之间最大关节移动距离计算移动时间,再讲该移动时间减去特定时长作为时间间隔。


← 上一节 | 下一章 →

results matching ""

    No results matching ""