Soma Zero Tutorials
🔍 搜索功能尚未开启,敬请期待。

附录1 资料中心

1. 资料下载

类型 版本 下载地址 功能 新版本更新点
USB2CAN 驱动 / 驱动下载(Windows/Macos/Linux) /
Episode1 校准测试软件 V 0.9.4 校准软件下载(Windows/Linux) 角度读取设置回零参数顺序回零检查相电流修改单个电机回零参数夹爪控制测试旋转 1.第 5 号电机放行 1000ma 回零电流
Episode1 上位机软件 V 0.9.9 上位机下载(Windows/Macos/Linux) IP、端口设置 USB ID 设置 TCP API 服务恢复模式 Robodk 启用位置、关节角显示运行日志 支持 VLA 遥操作
Episode1 RoboDK 驱动 V 1.1 点击下载 支持 IP、端口支持 MoveJ 支持 MoveL 支持示教 兼容新上位机
Episode1 RoboDK 机器人建模文件 V 1.0 点击下载 /
Episode1 RoboDK 参考案例 V1.0 点击下载 /
二次开发 SDK Demo(Python) V1.2.1 点击下载 急停角度模式位置模式直线模式欧拉角模式负压吸盘二指舵机夹爪自由移动获取角度 Robodk 孪生同步 增加获取位姿
二次开发 SDK Demo(C++) V1.1 点击下载 同上
URDF 文件 / ROS2 Ubuntu 包 V1.0 点击下载 X86 64 位 Ubuntu 24.04 jazzy ros2 、Jetson xvaier ubuntu 20.04 foxy ROS2 均测试通过

2. 机械臂参数

2.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

  • 关节旋转角度范围:

    关节编号 旋转角度范围 (°)
    J1 0 ~ 340
    J2 0 ~ 180
    J3 0 ~ 163
    J4 0 ~ 335
    J5 0 ~ 220
    J6 0 ~ 335
  • DH 参数

    蓝色为方向

    关节 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°]

2.2 末端夹爪系统参数

2.2.1 负压吸盘夹爪

  • 驱动方式:负压真空吸附
  • 控制单元:基于 STM32 主控
  • 通讯协议:CAN 总线控制
  • 额定负压吸力:-0.04Mpa
  • 电源输入:12 V DC

2.2.2 二指舵机夹爪

  • 驱动方式:高扭矩 25 KG·cm 数字舵机
  • 控制单元:基于 STM32 主控
  • 通讯协议:CAN 总线控制
  • 舵机电压范围:6~7.4 V DC

2.2.3 通用夹具接口

  • 末端法兰盘孔位 M3×4,直径 44 mm,安装尺寸点击下载

2.3 软件系统

  • 上位机控制软件:实时监控 / API 服务/ 手动控制 / 回零校准 / 拖拽示教
  • 校准软件:支持视觉标定、机械手眼标定
  • 仿真软件支持:RoboDK 官方模型,支持 ROS + MoveIt 仿真环境

2.4 开发者 SDK 支持

  • 通信协议:TCP 协议
  • API 支持语言:Python、C++、C#、Java
  • 提供运动模式接口:
    • MoveJ(关节角度运动)
    • MoveL(直线插补运动)
    • 坐标位置模式(笛卡尔空间控制)
    • 欧拉角模式(姿态调节)
  • 免费提供丰富 Demo 示例代码:
    • 视觉手眼标定
    • 3D 点云自动抓取
    • 6D 位姿捕获抓取
    • ROS2 包

3. SDK API 介绍

先更新上位机到 V 0.9.1 以上

先更新上位机到 V 0.9.1 以上

先更新上位机到 V 0.9.1 以上

下面介绍如何使用客户端发送指令给服务器来控制机械臂。每条指令都封装为一个 json 格式数据,通过 TCP 连接发送给服务器,服务器解析指令后返回执行结果。下文列出了各个指令的用途、参数说明和示例。

完整示例代码在上方资料表格中下载。

3.1 emergency_stop

用途
急停或解除急停操作。

参数

  • 1:执行急停
  • 0:解除急停

返回值

  • 固定返回 0.05(单位:秒),建议客户端等待此时间后再发送下一条指令。

示例代码

command = { 'action': 'emergency_stop', 'params': 1 # 1 表示急停;0 表示解除急停 } result = client.send_command(command) print("响应结果:", result)

3.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)

3.3 move_xyz_rotation

用途
通过 XYZ 坐标和欧拉角控制电机运动,采用普通位姿模式。

参数
列表格式,共 8 个参数:

  • 前 3 个:目标三维空间位置

    1. x
    2. y
    3. z
  • 后 3 个:欧拉角,默认 [90,0,180]

    • 如旋转顺序选择为 "xyz",则为

      1. 绕 X 轴旋转角度
      2. 绕 Y 轴旋转角度
      3. 绕 Z 轴旋转角度
    • 如旋转顺序选择为 "zyx",则为

      1. 绕 Z 轴旋转角度
      2. 绕 Y 轴旋转角度
      3. 绕 X 轴旋转角度
  • 最后 2 个:

    1. rotation_order:旋转顺序(默认 "zyx",支持 "zyx""xyz"
    2. 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)

3.4 move_linear_xyz_rotation

用途
采用直线模式,通过 XYZ 坐标和欧拉角控制电机运动。直线模式下无法调整速度,运动过程中服务器会先返回运动时间再执行运动操作。

参数

列表格式,共 7 个参数:

  • 前 3 个:目标三维空间位置

    1. x
    2. y
    3. z
  • 后 3 个:欧拉角,默认 [90,0,180]

    • 如旋转顺序选择为 "xyz",则为

      1. 绕 X 轴旋转角度
      2. 绕 Y 轴旋转角度
      3. 绕 Z 轴旋转角度
    • 如旋转顺序选择为 "zyx",则为

      1. 绕 Z 轴旋转角度
      2. 绕 Y 轴旋转角度
      3. 绕 X 轴旋转角度
  • 最后 1 个:

    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)

3.5 gripper_on

用途
启动负压吸盘抓取操作。

参数

返回值

  • 固定返回 0.05(单位:秒),建议客户端等待该时间后再发送下一条指令

示例代码

command = { 'action': 'gripper_on' } result = client.send_command(command) print("响应结果:", result)

3.6 gripper_off

用途
负压吸盘释放操作。

参数

返回值

  • 固定返回 0.05(单位:秒),建议客户端等待该时间后再发送下一条指令

示例代码

command = { 'action': 'gripper_off' } result = client.send_command(command) print("响应结果:", result)

3.7 servo_gripper

用途
通过舵机控制夹爪角度。

舵机由 0 度增大后,夹爪会抓紧:

舵机 0 度位置 舵机夹紧位置(约 90 度)
  • 上电 3 秒后,夹爪会自动复位至 90° 位置 - 请勿将手放入
  • 避免长时间堵转(超过 1 分钟):
    • 空载时:保持夹爪轻微接触即可(建议最大开合角度 95-105°)
    • 抓取时:接触物体即会产生堵转,请勿持续紧握

参数

  • angle(整数):设置夹爪的角度,范围是:0~110,超过会自动截断

返回值

  • 固定返回 1(单位:秒),建议客户端等待该时间后再发送下一条指令

示例代码

command = { 'action': 'servo_gripper', 'params': 45.0 # 例如设置夹爪角度为 45 度 } result = client.send_command(command) print("响应结果:", result)

3.8 robodk_simu

用途
控制 Robodk 同步模拟开关。注意开启模拟后机械臂会进入自由运动状态,需要提醒用户准备好托举。

需要保证机械臂在 RoboDK 中的节点是 episode1 0307

参数

  • 1:开启模拟
  • 0:关闭模拟

返回值

  • 固定返回 0.05(单位:秒),建议客户端等待该时间后再发送下一条指令

示例代码

command = { 'action': 'robodk_simu', 'params': 1 # 1 表示开启模拟,0 表示关闭模拟 } result = client.send_command(command) print("响应结果:", result)

3.9 set_free_mode

用途
设置电机自由模式。注意:在进入自由模式前需要提醒用户准备好托举。

参数

  • 1:进入自由模式
  • 0:退出自由模式

返回值

  • 固定返回 0.1(单位:秒),建议客户端等待该时间后再发送下一条指令

示例代码

command = { 'action': 'set_free_mode', 'params': 1 # 1 进入自由模式;0 退出自由模式 } result = client.send_command(command) print("响应结果:", result)

3.10 get_motor_angles

用途
获取当前电机的角度信息。

参数

返回值

  • 返回一个长度为 6 的角度列表(单位:度)。
  • 注意:由于 CAN 总线阻塞(如同时有其他控制指令的时候),有时部分电机角度读取可能失败,此时返回 None

示例代码

command = { 'action': 'get_motor_angles' } result = client.send_command(command) print("当前电机角度:", result)

3.11 get_T

用途
获取当前机械臂的姿态齐次变换矩阵 T

参数

返回值

  • 返回一个长度为 4x4 的的 array。
  • 注意:由于 CAN 总线阻塞(如同时有其他控制指令的时候),有时部分电机角度读取可能失败,此时返回 None

示例代码

command = { 'action': 'get_T' } result = client.send_command(command) print("当前T:", result)

3.12 get_pose

用途
获取当前机械臂的位置和欧拉角

参数
旋转顺序:zyxxyz

返回值

  • 返回一个长度为 6 的 list,分别是位置坐标和欧拉角
  • 注意:由于 CAN 总线阻塞(如同时有其他控制指令的时候),有时部分电机角度读取可能失败,此时返回 None

示例代码

command = { 'action': 'get_pose', 'params': 'xyz' } result = client.send_command(command) print("位置和欧拉角:", result)

3.13 使用方式

  1. 建立连接
    确保客户端已正确初始化并设置了服务器的 IP 和端口号。
  2. 构造命令
    根据需要使用上述指令中的任意一种,构造一个包含 action 和(可选)params 的 json 数据。
  3. 发送命令与接收结果
    调用客户端的 send_command 方法发送命令,服务器会返回一个结果。返回的数值通常代表预计运动时间,客户端应等待对应时间后再发送下一条指令。
  4. 异常处理
    若返回值为 None,请检查网络连接或指令参数是否正确。

4. 附件文件清单

本页「1. 资料下载」中的附件,按是否随本仓库存档分为两类。已存档文件位于仓库 downloads/ 目录(可直接点击打开);开源/公版组件与体积较大的厂商软件包不随仓库分发,下面给出性质、来源与本机备份位置。

① 已随仓库存档(downloads/

资料版本文件名仓库位置
RoboDK 驱动V1.1api_episode_driver.pydownloads/api_episode_driver.py
RoboDK 机器人建模文件V1.0episode1_0307.robotdownloads/episode1_0307.robot
RoboDK 参考案例V1.01.开机验证.rdkdownloads/1.开机验证.rdk
二次开发 SDK Demo(Python)V1.2.1sdk_demo.pydownloads/sdk_demo.py
二次开发 SDK Demo(C++)V1.1cpp_api_07101.zipdownloads/cpp_api_07101.zip
固定底座安装图固定底座安装.pdfdownloads/固定底座安装.pdf
腕部装配体图腕部装配体.pdfdownloads/腕部装配体.pdf

② 未随仓库(开源/公版 或 体积较大,仅引用)

资料性质来源 / 维护方本机备份
USB2CAN 驱动(PCAN)开源 / 公版PEAK-System Technik GmbH 维护的 PCAN-USB 驱动;Linux 驱动 peak-linux-driver 为 GPLv2 开源,含 PCAN-Basic API。来源:peak-system.com / 资料中心网盘Episode/Drivers/peak-linux-driver/
URDF 文件 / ROS 2 Ubuntu 包基于开源基于 ROS 2(开源,Apache-2.0,由 Open Robotics / OSRF 维护)的 Ubuntu 24.04 Jazzy 功能包。网盘下载Episode/Drivers/7.ros2/
校准测试软件 gui_cali恩培专有(闭源)恩培-计算机视觉 自研校准软件 V0.9.4。网盘下载Episode/Drivers/jiaozhun/
上位机软件 gui_server恩培专有(闭源)恩培-计算机视觉 自研上位机 V0.9.9(Jetson/RK3588/macOS/Windows/Ubuntu 多平台)。网盘下载Episode/Drivers/2. 上位机/