הגדרת תוכנה
התקנת פלאגין, תצורת זרוע מנהיג/עוקבת, שליטה דו-ידנית של ROS2, שילוב LeRobot DK1, Python API ופתרון בעיות. מהתקנה חדשה של אובונטו למערכת דו-מנואלית נעה.
קפוץ לקטע:
התקנת SDK
ה-DK1 SDK מופץ כתוסף LeRobot דרך trlc-dk1 מאגר. הוא רושם ארבעה סוגי מכשירים: 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.
התקן מ-commit ספציפי (לשחזור)
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 מספק שכבת שליטה ברמה גבוהה יותר עבור DK1 עם תמיכה מלאה בתכנון דו-ידני של MoveIt2. זה אופציונלי עבור זרימות עבודה של איסוף נתונים של 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
LeRobot עם התוסף DK1 מטפל בהקלטת טל-פעולה דו-ידנית באופן מקורי. ה 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 Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/dk1-bimanual-pick-place-v1
Python API עבור בקרה דו-ידנית
ה-API של DK1 Python מספק גישה ישירה לשתי הזרועות באמצעות סידורי. לא נדרש 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 שנמדדו. מדיניות שעברה הכשרה ב-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
מחלוקת רוחב פס 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.