[toc]
一、资料下载
1.1 上位机功能演示
最新版上位机功能简介:
<video controls>
<source src="https://enpei-bigfiles.oss-cn-hangzhou.aliyuncs.com/videos/controller.mp4" type="video/mp4" loop controls>
Your browser doesn't support HTML5 video tag.
</video>
1.2 下载清单
| 类型 |
版本 |
下载地址 |
功能 |
新版本更新点 |
| USB2CAN 驱动 |
/ |
Windows / macOS / Linux |
/ |
|
| Episode1 校准测试软件 |
V 0.9.4 |
Windows / Ubuntu |
角度读取<br>设置回零参数<br>顺序回零<br>检查相电流<br>修改单个电机回零参数<br>夹爪控制<br>测试旋转 |
1. 第 5 号电机放行 1000 mA 回零电流 |
| Episode1 上位机软件 |
V 0.9.9.5.1 |
Windows / macOS / Ubuntu / Jetson Xavier / RK3588 |
IP、端口设置<br>USB ID 设置<br>TCP API 服务<br>恢复模式<br>RoboDK 启用<br>位置、关节角显示<br>运行日志<br>3D 离线编程<br>拖拽示教 |
3D 离线编程、拖拽示教 |
| Episode1 RoboDK 驱动 |
V 1.1 |
点击下载 |
支持 IP、端口<br>支持 MoveJ<br>支持 MoveL<br>支持示教 |
兼容新上位机 |
| Episode1 RoboDK 机器人建模文件 |
V 1.0 |
点击下载 |
/ |
|
| Episode1 RoboDK 参考案例 |
V 1.0 |
点击下载 |
/ |
|
| 二次开发 SDK Demo(Python) |
V 1.2.1 |
点击下载 |
急停<br>角度模式<br>位置模式<br>直线模式<br>欧拉角模式<br>负压吸盘<br>二指舵机夹爪<br>自由移动<br>获取角度 |
增加获取位姿 |
| 二次开发 SDK Demo(C++) |
V 1.1 |
点击下载 |
同上 |
|
| URDF 文件 / ROS2 Ubuntu 包 |
V 1.0 |
点击下载 |
X86 64 位 Ubuntu 24.04 jazzy ROS2、ARM 架构的 Jetson Xavier Ubuntu 20.04 foxy ROS2 均测试通过。理论上 ROS2 各个版本都可以 |
|
1.3 软件界面预览
校准测试软件:
<img src="https://enpei-md.oss-cn-hangzhou.aliyuncs.com/202503111004243.png?x-oss-process=style/wp" style="zoom: 67%;" />
上位机软件:
<img src="https://enpei-md.oss-cn-hangzhou.aliyuncs.com/20260815165022907.png?x-oss-process=style/gzhbig" style="zoom: 25%;" />
二、机械臂参数

2.1 机械臂本体参数
2.1.1 基本规格
- 自由度:6 轴
- 驱动系统:步进电机 + 高精度行星减速器
- 控制模式:FOC(磁场定向控制)闭环控制
- 通讯接口:CAN 总线
- 有效负载能力:500 g
- 最大工作半径:510 mm
- 重复定位精度:±0.03 mm(非国标测试方法,仅供参考)
- 回零方式:机械限位 + 编码器自动回零
- 供电要求:12V DC / 10 A
- 本体重量:8.3 kg(不含夹爪)
- 材质:PLA 外壳 + 金属连接件
- 安装方式:标准 M6 螺栓固定,底座尺寸点击下载
- 安全特性:软件限位 / 支持软件急停
- 工作环境温度:0°C ~ 45°C
- 工作噪音:低于 55 dB
- 关节旋转角度范围:详见 2.1.2
2.1.2 关节旋转角度范围
| 关节编号 |
旋转角度范围 (°) |
| J1 |
0 ~ 340 |
| J2 |
0 ~ 180 |
| J3 |
0 ~ 163 |
| J4 |
0 ~ 335 |
| J5 |
0 ~ 220 |
| J6 |
0 ~ 335 |
2.1.3 DH 参数
<img src="https://enpei-md.oss-cn-hangzhou.aliyuncs.com/202504172214591.png?x-oss-process=style/wp" style="zoom:33%;" />
蓝色为 $Z_i$ 方向
| 关节 i |
a (mm) |
α (弧度) |
d (mm) |
θ (范围) |
| 1 |
55 |
π/2 |
166 |
[-180°, 160°] |
| 2 |
200 |
0 |
0 |
[0°, 180°] |
| 3 |
56 |
π/2 |
0 |
[-80°, 83°] |
| 4 |
0 |
-π/2 |
192 |
[-30°, 305°] |
| 5 |
0 |
π/2 |
0 |
[-110°, 110°] |
| 6 |
0 |
0 |
55 |
[-30°, 305°] |
DH 参数表中的 θ 范围与 2.1.2 的关节旋转角度范围数值不同,是因为 DH 模型的起始位置与机械臂实际零位不一致,两者之间的换算由上位机自动处理,二次开发时无需自行转换。
2.2 末端夹爪系统参数

2.2.1 负压吸盘夹爪
- 驱动方式:负压真空吸附
- 控制单元:基于 STM32 主控
- 通讯协议:CAN 总线控制
- 额定负压吸力:-0.04 MPa
- 电源输入:12 V DC
2.2.2 二指舵机夹爪
- 驱动方式:高扭矩 25 KG·cm 数字舵机
- 控制单元:基于 STM32 主控
- 通讯协议:CAN 总线控制
- 舵机电压范围:6~7.4 V DC
2.2.3 通用夹具接口
- 末端法兰盘孔位 M3×4,直径 44 mm,安装尺寸点击下载
三、软件系统
- 上位机控制软件:实时监控 / API 服务 / 手动控制 / 回零校准 / 拖拽示教
- 校准软件:支持视觉标定、机械手眼标定
- 仿真软件支持:RoboDK 官方模型,支持 ROS + MoveIt 仿真环境
四、开发者 SDK 支持
- 通信协议:TCP 协议
- API 支持语言:Python、C++、C#、Java
- 提供运动模式接口:
- MoveJ(关节角度运动)
- MoveL(直线插补运动)
- 坐标位置模式(笛卡尔空间控制)
- 欧拉角模式(姿态调节)
- 免费提供丰富 Demo 示例代码:
- 视觉手眼标定
- 3D 点云自动抓取
- 6D 位姿捕获抓取
- ROS2 包
五、SDK API 介绍
5.1 使用前提
⚠️ 使用 SDK 前,请先将上位机升级至 V 0.9.1 以上版本。
下面介绍如何使用客户端发送指令给服务器来控制机械臂。每条指令都封装为一个 json 格式数据,通过 TCP 连接发送给服务器,服务器解析指令后返回执行结果。下文列出了各个指令的用途、参数说明和示例。
完整示例代码在 1.2 下载清单中下载。
5.2 调用流程
- 建立连接
确保客户端已正确初始化并设置了服务器的 IP 和端口号。
- 构造命令
根据需要使用下述指令中的任意一种,构造一个包含
action 和(可选)params 的 json 数据。
- 发送命令与接收结果
调用客户端的
send_command 方法发送命令,服务器会返回一个结果。返回的数值通常代表预计运动时间,客户端应等待对应时间后再发送下一条指令。
- 异常处理
若返回值为
None,请检查网络连接或指令参数是否正确。
5.3 指令速查表
| action |
用途 |
参数 |
返回值 |
emergency_stop |
急停或解除急停 |
1 急停 / 0 解除 |
固定 0.05 秒 |
angle_mode |
角度模式控制电机运动 |
角度列表、速度比例 0~1 |
0 无需转动 / -1 无解 / >0 预计运动时间 |
move_xyz_rotation |
XYZ + 欧拉角控制(普通位姿模式) |
x, y, z, 3 个欧拉角, rotation_order, speed_ratio |
-1 IK 无解 / >0 预计运动时间 |
move_linear_xyz_rotation |
XYZ + 欧拉角控制(直线模式) |
x, y, z, 3 个欧拉角, rotation_order |
-1 IK 无解 / >0 预计运动时间 |
gripper_on |
负压吸盘抓取 |
无 |
固定 0.05 秒 |
gripper_off |
负压吸盘释放 |
无 |
固定 0.05 秒 |
servo_gripper |
舵机夹爪角度控制 |
angle 整数 0~110 |
固定 1 秒 |
set_free_mode |
电机自由模式开关 |
1 进入 / 0 退出 |
固定 0.1 秒 |
get_motor_angles |
获取当前电机角度 |
无 |
长度 6 的角度列表 / None |
get_T |
获取姿态齐次变换矩阵 T |
无 |
4x4 array / None |
get_pose |
获取位置和欧拉角 |
旋转顺序 zyx 或 xyz |
长度 6 的 list / None |
5.4 指令详解
5.4.1 emergency_stop
用途
急停或解除急停操作。
参数
返回值
- 固定返回
0.05(单位:秒),建议客户端等待此时间后再发送下一条指令。
示例代码
command = {
'action': 'emergency_stop',
'params': 1 # 1 表示急停;0 表示解除急停
}
result = client.send_command(command)
print("响应结果:", result)
5.4.2 angle_mode
用途
通过角度模式控制电机运动,使电机移动到指定的关节角度。
参数
- 第一个参数:各电机目标角度的列表(例如
[10, 20, 30, 40, 50, 60])。
- 第二个参数:运动速度比例(浮点数,范围 0~1,默认 1,超过该范围会自动截断)。
返回值
0:表示所有电机均不需要转动
-1:表示电机角度求解无解
>0:表示有解,返回预计运动时间(单位:秒),建议客户端等待该时间后再发送下一条指令
示例代码
command = {
'action': 'angle_mode',
'params': ([10, 20, 30, 40, 50, 60], 0.8) # 角度列表和速度比例
}
result = client.send_command(command)
print("响应结果:", result)
5.4.3 move_xyz_rotation
用途
通过 XYZ 坐标和欧拉角控制电机运动,采用普通位姿模式。
参数
列表格式,共 8 个参数:
-
前 3 个:目标三维空间位置
x
y
z
-
后 3 个:欧拉角,默认 [90,0,180]
-
如旋转顺序选择为 "xyz",则为
- 绕 X 轴旋转角度
- 绕 Y 轴旋转角度
- 绕 Z 轴旋转角度
-
如旋转顺序选择为 "zyx",则为
- 绕 Z 轴旋转角度
- 绕 Y 轴旋转角度
- 绕 X 轴旋转角度
-
最后 2 个:
rotation_order:旋转顺序(默认 "zyx",支持 "zyx" 或 "xyz")
speed_ratio:运动速度比例(浮点数,0~1,默认 1,超过该范围会自动截断)。
返回值
-1:表示 IK 无解
>0:表示有解,返回预计运动时间(单位:秒),建议客户端等待该时间后再发送下一条指令
示例代码
command = {
'action': 'move_xyz_rotation',
'params': [100, 200, 300, 10, 20, 30, "zyx", 0.9]
}
result = client.send_command(command)
print("预计运动时间:", result)
5.4.4 move_linear_xyz_rotation
用途
采用直线模式,通过 XYZ 坐标和欧拉角控制电机运动。直线模式下无法调整速度,运动过程中服务器会先返回运动时间再执行运动操作。
参数
列表格式,共 7 个参数:
-
前 3 个:目标三维空间位置
x
y
z
-
后 3 个:欧拉角,默认 [90,0,180]
-
如旋转顺序选择为 "xyz",则为
- 绕 X 轴旋转角度
- 绕 Y 轴旋转角度
- 绕 Z 轴旋转角度
-
如旋转顺序选择为 "zyx",则为
- 绕 Z 轴旋转角度
- 绕 Y 轴旋转角度
- 绕 X 轴旋转角度
-
最后 1 个:
rotation_order:旋转顺序(默认 "zyx",支持 "zyx" 或 "xyz")
返回值
-1:表示 IK 求解无解
>0:表示有解,返回预计运动时间(单位:秒),建议客户端等待该时间后再发送下一条指令
示例代码
command = {
'action': 'move_linear_xyz_rotation',
'params': [100, 200, 300, 10, 20, 30, "xyz"]
}
result = client.send_command(command)
print("预计运动时间:", result)
5.4.5 gripper_on
用途
启动负压吸盘抓取操作。
参数
无
返回值
- 固定返回
0.05(单位:秒),建议客户端等待该时间后再发送下一条指令
示例代码
command = {
'action': 'gripper_on'
}
result = client.send_command(command)
print("响应结果:", result)
5.4.6 gripper_off
用途
负压吸盘释放操作。
参数
无
返回值
- 固定返回
0.05(单位:秒),建议客户端等待该时间后再发送下一条指令
示例代码
command = {
'action': 'gripper_off'
}
result = client.send_command(command)
print("响应结果:", result)
5.4.7 servo_gripper
用途
通过舵机控制夹爪角度。舵机由 0 度增大后,夹爪会抓紧。
- 上电 3 秒后,夹爪会自动复位至 90° 位置 —— 请勿将手放入
- 避免长时间堵转(超过 1 分钟):
- 空载时:保持夹爪轻微接触即可(建议最大开合角度 95-105°)
- 抓取时:接触物体即会产生堵转,请勿持续紧握
参数
angle(整数):设置夹爪的角度,范围是:0~110,超过会自动截断
返回值
- 固定返回
1(单位:秒),建议客户端等待该时间后再发送下一条指令
示例代码
command = {
'action': 'servo_gripper',
'params': 45.0 # 例如设置夹爪角度为 45 度
}
result = client.send_command(command)
print("响应结果:", result)
5.4.8 set_free_mode
用途
设置电机自由模式。注意:在进入自由模式前需要提醒用户准备好托举。
参数
返回值
- 固定返回
0.1(单位:秒),建议客户端等待该时间后再发送下一条指令
示例代码
command = {
'action': 'set_free_mode',
'params': 1 # 1 进入自由模式;0 退出自由模式
}
result = client.send_command(command)
print("响应结果:", result)
5.4.9 get_motor_angles
用途
获取当前电机的角度信息。
参数
无
返回值
- 返回一个长度为 6 的角度列表(单位:度)。
- 注意:由于 CAN 总线阻塞(如同时有其他控制指令的时候),有时部分电机角度读取可能失败,此时返回
None。
示例代码
command = {
'action': 'get_motor_angles'
}
result = client.send_command(command)
print("当前电机角度:", result)
5.4.10 get_T
用途
获取当前机械臂的姿态齐次变换矩阵 T。
参数
无
返回值
- 返回一个长度为 4x4 的 array。
- 注意:由于 CAN 总线阻塞(如同时有其他控制指令的时候),有时部分电机角度读取可能失败,此时返回
None。
示例代码
command = {
'action': 'get_T'
}
result = client.send_command(command)
print("当前T:", result)
5.4.11 get_pose
用途
获取当前机械臂的位置和欧拉角。
参数
旋转顺序:zyx 或 xyz
返回值
- 返回一个长度为 6 的 list,分别是位置坐标和欧拉角
- 注意:由于 CAN 总线阻塞(如同时有其他控制指令的时候),有时部分电机角度读取可能失败,此时返回
None。
示例代码
command = {
'action': 'get_pose',
'params': 'xyz'
}
result = client.send_command(command)
print("位置和欧拉角:", result)