TRLC-DK1主从臂遥操作完全指南:如何从0到实时控制机械臂
【免费下载链接】trlc-dk1
TRLC's Developer Kit 1
TRLC-DK1 是 The Robot Learning Company 开源的 AI 机器人开发套件(Developer Kit 1),它由一对 3D 打印的主从机械臂组成:人手握"主臂"(Leader)演示动作,"从臂"(Follower)通过 LeRobot 框架实时跟随,从而完成遥操作(Teleoperation)并录制训练 AI 策略所需的数据。本指南将带你从 0 开始,完成环境安装、串口识别,直到跑通单臂遥操作、双臂(Bimanual)录制,并理解其背后的 250 Hz 实时控制架构。
🦾 认识 TRLC-DK1:主臂 + 从臂的分工
系统包含两台 6 自由度机械臂,结构几乎对称,但定位完全不同:
| 部件 | 角色 | 电机 | 特点 |
|---|---|---|---|
| Leader(主臂) | 人手握持操作 | 7 个 Dynamixel XL330-M077 | 带扳机手柄,读取关节角度作为指令 |
| Follower(从臂) | 执行实际任务 | 3× DM4340 + 4× DM4310 总线舵机 | 高扭矩,支持阻抗控制与夹爪 |
所有机械结构的 CAD 源文件都开放在仓库中,方便你自行 3D 打印,例如从臂的完整 STEP 文件:hardware/TRLC-DK1-Follower_v0.3.0.step,各连杆 STL 打印件位于 hardware/leader_STLs/ 与 hardware/follower_gripper_STLs/。
📦 环境准备:三步完成安装
项目基于 LeRobot 的插件约定(plugin conventions),安装后会被 LeRobot 自动识别为 dk1_follower / dk1_leader 设备。
第 1 步:克隆仓库
git clone https://gitcode.com/gh_mirrors/tr/trlc-dk1
cd trlc-dk1
第 2 步:创建虚拟环境并安装
uv venv
uv pip install -e .
依赖定义在 pyproject.toml 中,要求 Python ≥ 3.12,核心依赖包括 pyserial(串口通信)、dynamixel-sdk(主臂舵机)、lerobot>=0.5.1 与 mujoco(重力补偿用物理模型)。
💡 提示:
-e .以可编辑模式安装,修改源码后无需重新安装即可生效。
🔍 第 2 步:找到串口与相机端口
主臂、从臂、相机都需要 USB 端口号(如 /dev/ttyACM0),使用 LeRobot 提供的 CLI 工具一键查找:
uv run lerobot-find-port
uv run lerobot-find-cameras
操作技巧:先运行命令,再逐个插入设备,新出现的那一行就是对应端口。建议用表格记录,后面遥操作命令会用到:
| 设备 | 端口示例 |
|---|---|
| Follower(从臂) | /dev/ttyACM0 |
| Leader(主臂) | /dev/ttyACM1 |
| 头部相机 / 腕部相机 | 0 / 1(索引)或 /dev/video* |
🚀 首次遥操作:单臂实时控制
确认端口后,用 LeRobot 的 lerobot-teleoperate 命令即可让从臂跟随主臂:
uv run lerobot-teleoperate \
--robot.type=dk1_follower \
--robot.port=/dev/ttyACM0 \
--teleop.type=dk1_leader \
--teleop.port=/dev/ttyACM1 \
--robot.cameras="{
context: {type: opencv, index_or_path: 0, width: 960, height: 540, fps: 60},
wrist: {type: opencv, index_or_path: 1, width: 960, height: 540, fps: 60, rotation: 180}
}" \
--display_data=true
参数含义一目了然:
--robot.type=dk1_follower:启用从臂,即 lerobot_robot_trlc_dk1/follower.py 中注册的DK1Follower--teleop.type=dk1_leader:启用主臂遥操作器,对应 lerobot_robot_trlc_dk1/leader.py 中的DK1Leader--robot.cameras:定义头部(context)与腕部(wrist)两个 OpenCV 相机--display_data=true:实时显示相机画面与关节状态
⚠️ 安全提示:从臂默认启用阻抗控制,断电瞬间不会"塌臂",但仍建议在从臂下方放置防护区域后再启动。
如果你不想用 CLI,也可以直接运行 Python 示例 examples/teleop.py:它把主臂 get_action() 的读数以 200 Hz 喂给从臂 send_action(),是最小可用的遥操作闭环。
🤖 进阶:双臂遥操作与数据录制
TRLC-DK1 支持两套主臂 + 两套从臂的双手机器人形态,设备类型为 bi_dk1_follower / bi_dk1_leader(实现见 lerobot_robot_trlc_dk1/bi_leader.py 与 lerobot_robot_trlc_dk1/bi_follower.py)。
录制训练数据集时,用 lerobot-record 一条命令搞定,它会同时驱动双主臂、双从臂与三台相机:
uv run lerobot-record \
--robot.type=bi_dk1_follower \
--robot.right_arm_port=/dev/ttyACM0 \
--robot.left_arm_port=/dev/ttyACM1 \
--teleop.type=bi_dk1_leader \
--teleop.right_arm_port=/dev/ttyACM2 \
--teleop.left_arm_port=/dev/ttyACM3 \
--robot.cameras="{
head: {type: opencv, index_or_path: /dev/video0, width: 960, height: 540, fps: 60},
right_wrist: {type: opencv, index_or_path: /dev/video2, width: 960, height: 540, fps: 60, rotation: 180},
left_wrist: {type: opencv, index_or_path: /dev/video4, width: 960, height: 540, fps: 60, rotation: 180}
}" \
--dataset.repo_id=$USER/my_test_dataset \
--dataset.push_to_hub=false \
--dataset.num_episodes=3 \
--dataset.episode_time_s=30 \
--dataset.reset_time_s=20 \
--dataset.single_task="Test the LeRobot recording pipeling."
💡 把
--dataset.push_to_hub=false保持为false可先保存到本地验证流程无误,之后再上传共享。
对应的纯 Python 双机演示脚本是 examples/bi_teleop.py。
⚙️ 理解实时性:两种控制模式
DK1Follower 提供两种控制模式,通过 DK1FollowerConfig.control_mode 切换:
| 模式 | 原理 | 适用场景 |
|---|---|---|
impedance(默认) | MIT 力矩模式 + MuJoCo 重力补偿,250 Hz 后台线程持续执行 | 跟随自然流畅,适合遥操作与数据采集 |
pos_vel | 原始位置-速度模式,按 joint_velocity_scaling 限速 | 兼容旧版驱动逻辑,调试参考 |
核心架构在 trlc_dk1_control/robot.py 中,采用双线程设计:
- 电机线程(250 Hz):位于 trlc_dk1_control/motor_chain.py,独占串口 I/O,向 6 个臂关节发送 MIT 指令、向夹爪发送力矩-位置指令;
- 服务线程(~250 Hz):读取关节状态、用 MuJoCo 计算重力补偿(trlc_dk1_control/gravity_comp.py)、执行位置/力矩裁剪与过流保护,再把最新指令推给电机线程。
这意味着上层代码可以任意频率调用 command_joint_pos() / get_joint_state() 而不会阻塞控制环——实时性由底层线程保证。所有增益、关节限位、安全看门狗参数集中在 trlc_dk1_control/config.py,例如 motor_thread_hz=250、command_timeout_s=0.5(命令超时后自动保持上一目标位)。
主臂侧的实现更轻量:leader.py 用 sync_read 一次读取 7 个 XL330 的 Present_Position,将 4096 步原始读数换算为弧度,夹爪则归一化到 0(开)~1(闭)区间。
🧪 常用调试脚本速查
仓库 examples/ 目录提供了几个上手最快的调试入口:
| 脚本 | 作用 |
|---|---|
| examples/leader_test.py | 只读主臂,验证主臂连接与读数 |
| examples/follower_read_position.py | 只读从臂各关节位置 |
| examples/teleop.py | 单臂遥操作闭环(200 Hz) |
| examples/bi_teleop.py | 双臂遥操作闭环 |
| examples/calibration_follower.py / examples/calibration_leader.ipynb | 主从臂标定 |
| examples/read_motor_params.py | 读取从臂电机参数 |
| examples/uvc_cam_test.py | 测试 UVC 相机 |
🔧 若从臂串口不通,可用 lerobot_robot_trlc_dk1/motors/DM_Control_Python/DM_Motor_Test.py 单独测试 DM 舵机总线(协议说明见同目录 README_zh.md)。
📐 仿真预览:URDF 与 MuJoCo 模型
不想真机试错?从臂的完整 URDF(含视觉 GLB 与碰撞 STL 网格)位于 urdf/follower/,主文件为 urdf/follower/TRLC-DK1-Follower.urdf。阻抗模式下的重力补偿正是基于该模型在 MuJoCo 中计算,控制参数中的关节限位也与其 <limit> 标签严格保持一致,避免"限位不一致导致补偿力矩异常"的隐患。
✅ 总结:你的 TRLC-DK1 遥操作路线
- 装好环境:
git clone→uv venv→uv pip install -e .; - 找到端口:
lerobot-find-port记录主臂、从臂、相机的设备号; - 跑通单臂遥操作:
lerobot-teleoperate --robot.type=dk1_follower --teleop.type=dk1_leader; - 升级双臂录制:
lerobot-record采集 AI 策略训练数据; - 深入调参:修改 trlc_dk1_control/config.py 中的 PD 增益、限位与看门狗参数。
掌握这条"主臂读数 → LeRobot 动作空间 → 从臂 250 Hz 实时执行"的链路,你就完成了从 0 到实时控制 TRLC-DK1 机械臂的全过程 🎉。
【免费下载链接】trlc-dk1
TRLC's Developer Kit 1
更多推荐




所有评论(0)