소프트웨어 설정
플러그인 설치, 리더/팔로워 암 구성, ROS2 이중 수동 제어, LeRobot DK1 통합, Python API 및 문제 해결. 새로운 Ubuntu 설치에서 움직이는 이중 수동 시스템까지.
섹션으로 이동:
SDK 설치
DK1 SDK는 다음을 통해 LeRobot 플러그인으로 배포됩니다. trlc-dk1 저장소. 다음과 같은 네 가지 장치 유형을 등록합니다. dk1_leader, dk1_follower, bi_dk1_leader, 그리고 bi_dk1_follower.
먼저 르로봇을 설치하세요
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 직렬 포트 감지
한 번에 한쪽 팔을 연결하여 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 및 bimanual 패키지 설치
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}}]}'
르로봇 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-to-Real 정렬: DK1 MuJoCo 모델은 TRLC-DK1-Follower_v0.3.0 STEP 파일 구조와 측정된 DM4340/DM4310 모터 토크 곡선을 사용합니다. 구조화된 선택 및 배치 작업을 위해 최소한의 조정만으로 시뮬레이션을 통해 훈련된 정책을 실제 하드웨어로 전송합니다.
상위 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
동일한 버스 컨트롤러에 두 개의 카메라와 두 개의 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