ソフトウェアのセットアップ
プラグインのインストール、リーダー/フォロワー アームの設定、ROS2 両手操作制御、LeRobot DK1 統合、Python API、トラブルシューティング。 Ubuntu の新規インストールから、手動システムへの移行まで。
セクションにジャンプします:
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 .
リーダー/フォロワーアーム構成
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 ルール テンプレートの場合。
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}}]}'
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
両手操作制御用の 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
両腕は同じものに接続されています /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
フォロワ アームの 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
同じバス コントローラー上の 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の問題.