ソフトウェアのセットアップ

プラグインのインストール、リーダー/フォロワー アームの設定、ROS2 両手操作制御、LeRobot DK1 統合、Python API、トラブルシューティング。 Ubuntu の新規インストールから、手動システムへの移行まで。

セクションにジャンプします:

ステップ 1 — SDK のインストール

SDKのインストール

DK1 SDK は、LeRobot プラグインとして次の方法で配布されます。 trlc-dk1 リポジトリ。 次の 4 つのデバイス タイプを登録します。 dk1_leader, dk1_follower, bi_dk1_leader、 そして bi_dk1_follower.

まず LeRobot をインストールします

pip install lerobot

DK1 プラグインのクローンを作成してインストールする

git clone https://github.com/TRLC-AI/trlc-dk1.git
cd trlc-dk1
uv pip install -e .

インストールを確認する

python3 -c "from lerobot.common.robots import make_robot; print('DK1 plugin OK')"

# Check that DK1 device types are registered
python3 -c "
from lerobot.common.robots.factory import get_robot_types
types = get_robot_types()
for t in types:
    if 'dk1' in t:
        print(t)
"

見るべきです dk1_leader, dk1_follower, bi_dk1_leader, bi_dk1_follower 印刷された。 そうでない場合は、プラグインが正しくインストールされていることを確認してください uv pip show trlc-dk1.

特定のコミットからインストールする (再現性のため)

cd trlc-dk1
git checkout v0.3.0
uv pip install -e .
ステップ 2 — リーダー/フォロワーの構成

リーダー/フォロワーアーム構成

DK1 の双手動システムは、リーダー アーム (Dynamixel XL330) とフォロワー アーム (DM4340 + DM4310) を区別するポート割り当てに依存しています。 間違ったポートの割り当ては、最も一般的なセットアップ エラーです。

USBシリアルポートの検出

一度に 1 つのアームを接続して LeRobot ポート検出ユーティリティを実行します。

# Connect ONLY the leader arm (Dynamixel XL330)
python -m lerobot.scripts.find_motors_bus_port
# Note the reported port, e.g. /dev/ttyACM0

# Disconnect leader, connect ONLY the follower arm (DM series)
python -m lerobot.scripts.find_motors_bus_port
# Note the reported port, e.g. /dev/ttyACM1

両手ロボット構成を作成する

バイマニュアル ペアの YAML 構成ファイルを作成します。 LeRobot はこれを使用してコマンドを正しいアームにルーティングします。

# ~/.lerobot/robots/dk1_bimanual.yaml
robot_type: bi_dk1_follower
leader_arms:
  left:
    port: /dev/ttyACM0
    motors: [shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll, gripper_left, gripper_right]
follower_arms:
  left:
    port: /dev/ttyACM1
    motors: [shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll, gripper_left, gripper_right]
cameras:
  wrist_left:
    type: opencv
    index: 0
    fps: 30
    width: 640
    height: 480
  overhead:
    type: opencv
    index: 2
    fps: 30
    width: 640
    height: 480

構成を確認する

python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=none

これで両腕を動かさずに接続できます。 接続エラーがないか確認してください。 いずれかのアームが接続に失敗した場合は、ポート検出を再実行するか、ポート割り当てを交換します。

ポートの永続性: USB シリアル ポートは、再起動ごとに変更される可能性があります。 udev ルールを使用して、USB シリアル番号によってポートを特定のアームにバインドします。 を参照してください。 セットアップガイド udev ルール テンプレートの場合。

ステップ 3 — ROS2 双方向セットアップ

ROS2 バイマニュアル制御

ROS2 Humble は、完全な MoveIt2 バイマニュアル計画サポートを備えた DK1 の上位レベルの制御層を提供します。 これは、LeRobot 専用のデータ収集ワークフローではオプションです。

ROS2 Humble およびバイマニュアル パッケージをインストールする

sudo apt update && sudo apt install ros-humble-desktop \
  ros-humble-ros2-control ros-humble-ros2-controllers \
  ros-humble-moveit ros-humble-joint-state-publisher-gui -y

DK1 ROS2 パッケージのクローンを作成してビルドする

mkdir -p ~/dk1_ws/src && cd ~/dk1_ws/src
git clone https://github.com/TRLC-AI/trlc-dk1-ros2.git
cd ~/dk1_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install

両手モードで起動する

source ~/dk1_ws/install/setup.bash

# Launch both arms (use_fake_hardware for testing without hardware)
ros2 launch trlc_dk1_ros2 dk1_bimanual.launch.py \
  use_fake_hardware:=false \
  leader_port:=/dev/ttyACM0 \
  follower_port:=/dev/ttyACM1

偽のハードウェアを使用したテスト (武器は必要ありません)

ros2 launch trlc_dk1_ros2 dk1_bimanual.launch.py \
  use_fake_hardware:=true

両手軌跡を送信する

ros2 topic pub /follower_left/joint_trajectory_controller/joint_trajectory \
  trajectory_msgs/msg/JointTrajectory \
  '{joint_names: ["shoulder_pan"], points: [{positions: [0.3], time_from_start: {sec: 2}}]}'
ステップ 4 — LeRobot DK1 構成

LeRobot DK1 の構成

DK1 プラグインを備えた LeRobot は、両手操作の遠隔操作記録をネイティブに処理します。 の bi_dk1_follower デバイスの種類は両腕とすべてのカメラから同時に記録します。

両腕を調整する

# Calibrate the leader arm
python -m lerobot.scripts.control_robot \
  --robot.type=dk1_leader \
  --robot.port=/dev/ttyACM0 \
  --control.type=calibrate

# Calibrate the follower arm
python -m lerobot.scripts.control_robot \
  --robot.type=dk1_follower \
  --robot.port=/dev/ttyACM1 \
  --control.type=calibrate

両手遠隔操作を開始する

python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=teleoperate

両面手動データセットを記録する

python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Bimanual: pick up the block with left arm, transfer to right arm" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=10

HuggingFace ハブにプッシュする

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/dk1-bimanual-pick-place-v1
ステップ 5 — Python API

両手操作制御用の Python API

DK1 Python API は、シリアル経由で両方のアームに直接アクセスできます。 基本的な制御とデータロギングには ROS2 は必要ありません。

両腕を接続します

from trlc_dk1 import DK1Leader, DK1Follower, BimanualDK1

# Connect individually
leader = DK1Leader(port="/dev/ttyACM0")
follower = DK1Follower(port="/dev/ttyACM1")
leader.connect()
follower.connect()

# Or use the bimanual controller (recommended)
robot = BimanualDK1(
    leader_port="/dev/ttyACM0",
    follower_port="/dev/ttyACM1"
)
robot.connect()

両腕から関節状態を読み取る

import time
from trlc_dk1 import BimanualDK1

robot = BimanualDK1(leader_port="/dev/ttyACM0", follower_port="/dev/ttyACM1")
robot.connect()

for _ in range(100):
    leader_state = robot.get_leader_state()
    follower_state = robot.get_follower_state()
    print(f"Leader:   {leader_state.positions}")
    print(f"Follower: {follower_state.positions}")
    time.sleep(0.033)  # 30 Hz

robot.disconnect()

リーダー/フォロワー ループを手動で実行する

from trlc_dk1 import BimanualDK1
import time

robot = BimanualDK1(leader_port="/dev/ttyACM0", follower_port="/dev/ttyACM1")
robot.connect()
robot.enable_follower()

try:
    while True:
        leader_state = robot.get_leader_state()
        # Apply leader positions to follower (scaled if needed)
        robot.set_follower_positions(leader_state.positions)
        time.sleep(0.01)  # 100 Hz control loop
finally:
    robot.disable_follower()
    robot.disconnect()
オプション - シミュレーション

シミュレーションのサポート

DK1 は、実際のハードウェアの運動学を反映するキャリブレーションされたモデルを使用した MuJoCo 両手シミュレーションをサポートします。 ハードウェアに展開する前に、シミュレーションでポリシーをトレーニングします。

MuJoCo 両手シミュレーション

pip install mujoco
git clone https://github.com/TRLC-AI/trlc-dk1-mujoco.git
cd trlc-dk1-mujoco

# Run the bimanual simulation with leader/follower
python examples/bimanual_sim.py

# Run with keyboard teleop
python examples/bimanual_sim.py --teleop keyboard

MuJoCo 環境に対するポリシーをトレーニングする

python -m lerobot.scripts.train \
  --policy.type=act \
  --env.type=dk1_bimanual_sim \
  --policy.chunk_size=100 \
  --training.num_epochs=5000 \
  --output_dir=outputs/dk1-act-sim

Sim と Real の調整: DK1 MuJoCo モデルは、TRLC-DK1-Follower_v0.3.0 STEP ファイル ジオメトリと測定された DM4340/DM4310 モーター トルク曲線を使用します。 Sim でトレーニングされたポリシーは、構造化されたピック アンド プレイス タスク向けに最小限のチューニングで実際のハードウェアに転送されます。

トラブルシューティング

バイマニュアル特有の問題トップ 3

エラー1 同じポートに割り当てられたアーム — フォロワーはリーダーを反映しますが、大幅に遅れます

両腕は同じものに接続されています /dev/ttyACM* ポート、またはポート割り当てが交換されました。 リーダー アーム (Dynamixel XL330) とフォロワー アーム (DM シリーズ) は異なるプロトコルを使用します。 間違った割り当てを行うと、即座に制御障害が発生します。

修理:

# 1. Unplug both arms
# 2. Connect ONLY the leader arm (XL330 servos)
python -m lerobot.scripts.find_motors_bus_port
# Note: leader_port = /dev/ttyACM?

# 3. Disconnect leader, connect ONLY the follower arm (DM servos)
python -m lerobot.scripts.find_motors_bus_port
# Note: follower_port = /dev/ttyACM?

# 4. Update your YAML config with the correct ports
# 5. Create udev rules to make assignments permanent
エラー2 遠隔操作中にフォロワアームが振動またはオーバーシュートする

フォロワ アームの PD ゲインが、現在のペイロードまたはアーム構成に対して高すぎます。 これは、アームにエンドエフェクタが取り付けられている場合、または完全に伸びた状態で動作している場合に特によく発生します。

修理:

# Reduce follower PD gains in the DK1 config
# Edit trlc-dk1/configs/follower_gains.yaml:
joint_gains:
  default:
    kp: 30   # reduce from default 50
    kd: 0.5  # reduce from default 1.0
  wrist:
    kp: 15   # wrist joints need lower gains
    kd: 0.3

# Apply and restart teleoperation
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --control.type=teleoperate
エラー3 両手録画中にカメラのフレームがドロップするか同期が失われる

同じバス コントローラー上の 2 つのカメラと 2 つの USB シリアル アームによる USB 帯域幅の競合。 カメラ ストリームとジョイント状態の読み取り値の間の LeRobot タイムスタンプのスキューが許容限界を超えています。

修理:

# 1. Check which USB bus each device is on
lsusb -t

# 2. Spread devices across separate USB bus controllers
#    - Cameras: use a powered USB hub on one controller
#    - Arms: connect directly on a different controller

# 3. Reduce camera resolution if bandwidth is still tight
# In dk1_bimanual.yaml:
cameras:
  wrist_left:
    width: 480
    height: 320   # lower resolution reduces USB bandwidth

# 4. Verify timestamp skew is acceptable
python -m trlc_dk1.tools.check_sync \
  --config ~/.lerobot/robots/dk1_bimanual.yaml
# Target: < 5ms skew between all streams

まだ行き詰まっていますか? で質問してください DK1 フォーラム または既存のものを確認してください GitHubの問題.

ソフトウェアは動作していますか? バイマニュアル データの収集を開始します。

両腕が動くようになったら、次のステップは遠隔操作と両手によるデータセットの記録です。