获取 SDK
灵巧手 SDK(Software Development Kit)是专为 BrainCo Revo 3 系列设备开发的跨平台软件开发包,提供 21 电机独立关节控制、状态读取(位置、速度、电流、电机状态)与固件 OTA 升级接口。
系统要求
宿主机环境需满足以下规格要求:
- Python: 3.9 ~ 3.12 运行环境
- Linux: Ubuntu 20.04/22.04 LTS 及以上 (支持 x86_64 / aarch64 架构)
- macOS: 10.15+ 系统版本
- Windows: Windows 10/11 系统环境
- 通讯接口: 支持 5M 波特率的 RS485 串口模块或总线卡
下载与安装
1. 示例代码与 SDK 集成
运行示例前,请先拉取 SDK 仓库代码:
git clone https://github.com/BrainCoTech/brainco-revo3-sdk.git
cd brainco-revo3-sdk2. Python 依赖包安装
建议使用虚拟环境(推荐 Conda)安装 Revo 3 SDK:
# 创建并激活 Conda 虚拟环境(推荐 Python 3.10)
conda create -n revo3_env python=3.10 -y
conda activate revo3_env
# 安装 Revo 3 核心 SDK 包
pip3 install bc-revo3-sdk==1.1.4💡 Linux 系统权限与低时延调优说明
在 Linux 系统下运行串口程序时,需要关注以下串口读写权限及通信延迟配置:
- 串口设备访问权限(非 root 通用要求):Linux 系统下非
root用户默认不具备串口设备(如/dev/ttyUSB0)的直接读写权限。为了能够正常打开并使用串口,请确保在运行示例前将当前 Linux 用户永久加入dialout用户组(修改后需注销并重新登录以生效):bashsudo usermod -a -G dialout $USER - 自动低时延配置(SDK 默认处理):SDK 在 Linux 下打开串口时,已自动将 FTDI 硬件延迟降低至 1ms(通过
ioctl设置ASYNC_LOW_LATENCY),使用 SDK 时无需手动配置。 - 手动串口优化(非 SDK 或独立诊断场景):若开发者未使用官方 SDK(例如直接通过第三方通用 Modbus 库控制串口进行高频控制),或是作为独立的通信延迟诊断调试手段,仍可手动执行以下命令将指定 USB 串口调优为最低延迟:bash或者直接将延迟定时器(Latency Timer)通过 sysfs 写入最低的 1ms:
# 使用 setserial 工具配置 sudo setserial /dev/ttyUSB0 low_latencybashecho 1 | sudo tee /sys/class/tty/ttyUSB0/device/latency_timer
运行示例
仓库 python/ 和 c/ 目录下包含 Revo 3 灵巧手的演示示例。设备默认通信波特率为 5M (5000000 bps),左手从机 ID 为 126,右手为 127。
1. Python 示例
进入 python/ 目录并安装依赖后,即可运行演示脚本:
cd python
pip install -r requirements.txt
# 运行自动检测串口与 ID
python revo3/auto_detect.py
# 运行灵巧手基础运动控制演示
python revo3/hand_demo.py
# 运行轨迹规划与示教演示
python revo3/hand_trajectory.py
# 运行 OTA 固件在线升级
python revo3/hand_dfu.py /path/to/firmware.bin
# 启动图形化 Qt 调试面板(含 Mock 模式)
python gui/main.py --mock💡 预期 Python 控制台输出日志 (Expected Python Console Output)
$ python revo3/hand_demo.py
[2026-05-27 10:10:02.124] [INFO] Stark SDK version 1.1.0 initialized.
[2026-05-27 10:10:02.125] [INFO] Scanning serial port: /dev/ttyUSB0 (Baudrate: 5000000 bps)
[2026-05-27 10:10:02.341] [INFO] Found Revo 3 Dexterous Hand [Right Hand, ID: 127]
[2026-05-27 10:10:02.342] [INFO] Performing initial joint origin calibration sweep...
[2026-05-27 10:10:04.512] [INFO] Calibration complete. All 21 motors successfully zeroed.
[2026-05-27 10:10:04.513] [INFO] Sending command: Move thumb flexion to 50.0°, index to 60.0°
[2026-05-27 10:10:05.102] [INFO] Feedback: Position[Thumb]=49.8°, Current[Thumb]=84mA | Status: MOTOR_RUNNING
[2026-05-27 10:10:05.612] [INFO] Feedback: Position[Thumb]=50.0°, Current[Thumb]=12mA | Status: MOTOR_IDLE
[2026-05-27 10:10:06.000] [INFO] Demo completed. Closing serial port.auto_detect.py:自动扫描系统串口,发现并检测绑定的 Revo 3 灵巧手 ID 和波特率。hand_demo.py:关节位置控制与状态反馈示例。hand_trajectory.py:多指轨迹规划与协调抓取示例。hand_dfu.py:固件在线升级(OTA)脚本。gui/main.py:图形化调试工具,支持控制下发与实时波形观测。
2. C++ 示例
在 C++ 环境下编译并执行示例程序:
# 1. 下载核心动态依赖库
sh download-lib.sh
# 2. 编译 C++ 示例项目
make -C c
# 3. 运行对应可执行程序
# 自动检测设备
./c/demo/auto_detect
# 运行基本控制演示
./c/demo/hand_demo
# 运行轨迹演示
./c/demo/hand_trajectory
# 运行固件 OTA 升级
./c/demo/hand_dfu firmware.bin💡 预期 C++ 控制台输出日志 (Expected C++ Console Output)
$ ./c/demo/hand_demo
[STARK INFO] Serial port successfully opened on /dev/ttyUSB0 at 5000000 bps.
[STARK INFO] Connecting to device ID: 127...
[STARK INFO] Device acknowledged. Firmware version: v3.2.14
[STARK INFO] Launching motor sweep calibration...
[STARK SUCCESS] Joint calibration completed in 2.18s.
[STARK INFO] Write [Target: Position] | ID 127 -> Motor[0]=12000, Motor[1]=15000
[STARK INFO] Read [Feedback] | Motor[0]: Pos=12000, Vel=0, Cur=10 | Status=0x01
[STARK INFO] Execution successful. Terminating connection.auto_detect:RS485 通道自动扫描检测工具。hand_demo:电机读写控制与反馈监控示例。hand_trajectory:多关节平滑轨迹规划示例。hand_dfu:固件 OTA 升级工具。
快速开始
以下代码展示了从零开始控制灵巧手的最小流程:打开串口 → 写入目标角度 → 读取状态反馈。
# 1. Open serial connection
from bc_revo3_sdk import modbus_open
ctx = modbus_open("/dev/ttyUSB0", 5000000)
slave_id = 1
# 2. Write target angles (degrees) for 21 joints
target_positions = [0.0] * 21
target_positions[0] = 45.5 # Thumb joint
ctx.revo3_set_all_motor_positions(slave_id, target_positions)
# 3. Read 21-joint status feedback
positions = ctx.revo3_get_all_motor_positions(slave_id)
currents = ctx.revo3_get_all_motor_currents(slave_id)
print(f"Thumb pos: {positions[0]} deg, current: {currents[0]} mA")#include "revo3-sdk.h"
// 1. Open RS485 serial port
DeviceHandler* handle = modbus_open("/dev/ttyUSB0", 5000000);
if (!handle) return -1;
// 2. Write target angles for 21 joints
float target_positions[21] = {0.0f};
target_positions[0] = 45.5f;
revo3_set_all_motor_positions(handle, 1, target_positions);
// 3. Read 21-joint status feedback
CRevo3MotorStatusData* status = revo3_get_motor_status_data(handle, 127);
if (status) {
printf("Thumb pos: %f deg, current: %f mA\n", status->positions[0], status->currents[0]);
free_revo3_motor_status_data(status);
}
modbus_close(handle);💡 生产开发建议:优先使用轨迹规划 API
直接下发阶跃目标位置(如 revo3_set_all_motor_positions)会产生瞬时电流冲击,长期使用会加速减速箱与传动机构磨损。
在实际应用中,建议优先使用以下高级 API:
- 五次多项式轨迹控制:
revo3_move_finger_trajectory/revo3_move_thumb_trajectory— SDK 内部自动计算平滑插值,消除物理冲击。 - 轨迹录制与回放:
revo3_replay_hand— 支持高频回放录制好的 21 轴轨迹,可通过 Kp、Kd 增益调节实现柔顺抓握。
控制模式速览
SDK 内部已自动处理所有 Modbus 寄存器的 x100 缩放编解码。调用 API 时直接传入标准物理量浮点数(角度 45.5 度、速度 50.0 RPM、电流 120.0 mA),无需手动换算。
| 模式值 | 模式名称 | 控制参数 | 说明 |
|---|---|---|---|
| 0 | 位置控制 (Position) | 目标角度 (deg) | 控制关节移动到指定角度。 |
| 1 | 速度控制 (Speed) | 目标转速 (RPM) | 控制关节以指定转速持续转动。(1 RPM = 6 °/s) |
| 2 | 电流控制 (Current) | 目标电流 (mA) | 控制关节输出指定力矩。 |
| 4 | 阻抗控制 (Impedance) | 刚度系数 (Kp) | 简易力-位混合控制,仅激活位置刚度。 |
| 5 | 阻尼控制 (Damping) | 阻尼系数 (Kd) | 简易力-位混合控制,仅激活速度阻尼。 |
SDK 还提供完整的 MIT 力-位混合控制(Kp + Kd + 前馈力矩的五参数联合控制)和手指级轨迹控制接口。详细参数范围与公式定义参见 电机控制协议文档。
⚠️ 触觉传感器零点校准
灵巧手配备 11 个触觉阵列模块(手掌 + 每指指尖/指腹),长时间使用可能产生基准漂移。建议定期在无外力状态下调用 revo3_calibrate_touch_zero() 执行零点校准。各模块的物理位置与通道数参见 触觉阵列协议文档。
深入参考
接口定义文件
API 查阅与代码自动补全可参考以下接口定义文件:
- Python 类型存根 (.pyi): main_mod.pyi — 包含所有类、枚举、函数的类型注解。
- C/C++ 头文件 (.h): revo3-sdk.h — 由
cbindgen自动生成的 C ABI 导出头文件。
协议与硬件参考文档
以下文档定义了 SDK API 背后的 Modbus 寄存器映射与硬件规格,适合需要深入理解底层控制逻辑的开发者:
- Revo 3 电机控制协议 (REVO3_MOTOR_API) — 控制模式详细参数、MIT 混合控制公式、伺服 API、保护电流配置等。
- Revo 3 触觉阵列协议 (REVO3_TOUCH_API) — 11 个触觉模块的物理位置、通道数映射、数据类型切换等。