הגדרת תוכנה

התקנת LeRobot, תצורת רובוט SO-101, כיול סרוו, הגדרת teleop leader-follower, Python API ופתרון בעיות. הכל מהתקנה חדשה של Python ועד לזרוע רצה.

קפוץ לקטע:

שלב 1 - התקנת LeRobot

התקנת LeRobot

LeRobot היא חבילת התוכנה היחידה שאתה צריך עבור SO-101. הוא מטפל בתקשורת סרוו, כיול, טלאופ והקלטת נתונים.

צור סביבה וירטואלית

python -m venv ~/.venvs/so101
source ~/.venvs/so101/bin/activate   # Windows: .venvs\so101\Scripts\activate

התקן את LeRobot

pip install lerobot

בדוק את ההתקנה

python -c "import lerobot; print(lerobot.__version__)"

התקן ממקור (אופציונלי - לתכונות העדכניות ביותר)

git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[so101]"
שלב 2 - תצורת רובוט

תצורת רובוט SO-101

LeRobot כולל תצורת רובוט מובנית SO-101. אתה מציין את יציאת ה-USB עבור זרוע העוקבת (וזרוע מוביל אם אתה משתמש בשתי זרועות).

מצא את יציאת ה-USB שלך

# Linux / macOS
ls /dev/ttyUSB*    # typical: /dev/ttyUSB0, /dev/ttyUSB1
ls /dev/tty.usbserial*   # macOS alternative

# Windows — check Device Manager → Ports → COMx

תצורת SO-101 YAML

LeRobot משתמש בתצורה מוטבעת בשורת הפקודה או בקובץ YAML. עבור התקנה עם זרוע אחת:

# ~/.lerobot/robots/so101_follower.yaml
robot_type: so101
port: /dev/ttyUSB0   # update to your port
cameras:
  wrist_cam:
    type: opencv
    index_or_path: 0
    fps: 30
    width: 640
    height: 480

תצורת שתי זרועות (מנהיג-עוקב).

# ~/.lerobot/robots/so101_bimanual.yaml
robot_type: so101
port: /dev/ttyUSB1      # follower arm
leader_arms:
  main:
    type: so101
    port: /dev/ttyUSB0   # leader arm
cameras:
  top_cam:
    type: opencv
    index_or_path: 0
    fps: 30
    width: 640
    height: 480

בדיקת חיבור

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=none   # just connects and reads state

אתה אמור לראות קריאות מיקום משותפות מודפסות. אם אתה מקבל שגיאת יציאה, בדוק פתרון בעיות.

שלב 3 - כיול סרוו

כיול סרוו

בניגוד לזרועות CAN-bus המשתמשות במקודדים מוחלטים, הסרוו של Feetech STS3215 זקוקים לכיול כדי להגדיר את מיקומי האפס שלהם. LeRobot מטפל בזה באופן אוטומטי.

הפעל כיול

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=calibrate

התסריט ינחה אותך להזיז את הזרוע לתנוחות ספציפיות (בית, דק, מקסימום עבור כל מפרק) וללחוץ על Enter בכל עמדה. זה שומר נתוני כיול ל ~/.cache/huggingface/lerobot/calibration/so101/.

עמדות כיול

LeRobot יבקש ממך למקם כל מפרק בשלוש תנוחות:

  • עמדת בית: זרוע מושטת לגמרי, גורם קצה מצביע קדימה
  • מצב מומנט אפס: זרוע תלויה באופן טבעי תחת כוח הכבידה
  • התייחסות של 90 מעלות: כל מפרק בנקודת האמצע שלו

ודא כיול

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=teleoperate   # move arm by hand to verify joint readout

הזז את הזרוע באופן ידני (מצב תאימות). עמדות המפרק אמורות לקרוא כמעט אפס בבית ולהגדיל/להקטין בצורה חלקה ככל שאתה מזיז כל מפרק.

טיפ לכיול מחדש: הפעל שוב כיול בכל פעם שאתה מפרק מפרק, מחליף סרוו או מגלה שמצבי המפרק נסחפים. קבצי כיול מאוחסנים במספר סידורי לכל זרוע ונטענים מחדש באופן אוטומטי.

שלב 4 - טלאופ מנהיג-עוקבים

Teleoperation מנהיג-עוקב

ה-SO-101 מיועד להפעלה מרחוק של מנהיג-עוקב: זרוע אחת (מנהיג) לוכדת את תנועות היד שלך, והזרוע השנייה (עוקבת) משקפת אותן בזמן אמת. זה מייצר הדגמות אימונים באיכות הגבוהה ביותר.

התחל טלאופ מנהיג-עוקב

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB1 \
  --robot.leader_arms.main.type=so101 \
  --robot.leader_arms.main.port=/dev/ttyUSB0 \
  --control.type=teleoperate

טלאופ מקלדת עם זרוע אחת (ללא זרוע שנייה)

אם יש לך רק זרוע אחת, השתמש במצב שליטה במקלדת:

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=teleoperate \
  --control.teleop_keys=true

מצב תאימות / פיצוי כבידה

הכנס את זרוע המוביל למצב מומנט נמוך כדי שתוכל להזיז אותה בחופשיות עם היד שלך:

python -c "
from lerobot.common.robot_devices.robots.so101 import SO101Robot
robot = SO101Robot(port='/dev/ttyUSB0')
robot.connect()
robot.set_compliance_mode(True)   # arm moves freely under hand guidance
"
שלב 5 - Python API

התחלה מהירה של Python API

אתה יכול לשלוט ב-SO-101 ישירות דרך ה-API הרובוט של LeRobot ללא סקריפטים של CLI.

שליטה משותפת בסיסית

from lerobot.common.robot_devices.robots.so101 import SO101Robot
import torch

robot = SO101Robot(port="/dev/ttyUSB0")
robot.connect()

# Read current joint positions (6 DOF)
obs = robot.capture_observation()
print("Joint positions:", obs["observation.state"])

# Send joint position command (in degrees, normalized to [-1, 1] range)
action = torch.zeros(6)   # all joints to zero position
robot.send_action(action)

robot.disconnect()

פיצוי כבידה (מצב הניתן לאחור)

from lerobot.common.robot_devices.robots.so101 import SO101Robot

robot = SO101Robot(port="/dev/ttyUSB0")
robot.connect()

# Enable backdrive — arm can be moved freely by hand
robot.set_compliance_mode(True)

import time
for _ in range(100):
    obs = robot.capture_observation()
    print(obs["observation.state"])   # prints live joint positions as you move arm
    time.sleep(0.02)

robot.disconnect()

קריאת מצב סרוו

from lerobot.common.robot_devices.motors.feetech import FeetechMotorsBus

bus = FeetechMotorsBus(port="/dev/ttyUSB0",
                       motors={"joint1": (1, "sts3215"),
                               "joint2": (2, "sts3215"),
                               "joint3": (3, "sts3215"),
                               "joint4": (4, "sts3215"),
                               "joint5": (5, "sts3215"),
                               "gripper": (6, "sts3215")})
bus.connect()
positions = bus.read("Present_Position", ["joint1", "joint2", "joint3"])
print("Positions:", positions)
bus.disconnect()
פתרון בעיות

3 הבעיות הנפוצות ביותר

שגיאה 1 יציאה טורית לא נמצאה: FileNotFoundError: /dev/ttyUSB0

בקר ה-USB לא מזוהה. בדרך כלל דרייבר חסר או שהכבל מנותק.

לִקְבּוֹעַ:

# Check if the device is listed
ls /dev/ttyUSB*   # Linux
ls /dev/tty.usbserial*   # macOS

# Linux: add yourself to the dialout group (requires logout)
sudo usermod -aG dialout $USER

# Windows: install CP2102 or CH340 USB driver,
# then check Device Manager for COM port number
שגיאה 2 סרוו לא מגיב לאחר חיבור

סרוו מחוברים פיזית אבל LeRobot לא יכול לקרוא את עמדותיהם. בדרך כלל בעיית חשמל או קצב שגיאה שגוי.

לִקְבּוֹעַ:

# 1. Verify 5V power supply is connected and LED on servo board is on
# 2. Check all servo daisy-chain cables are fully seated
# 3. Try scanning for servos directly:
python -c "
from lerobot.common.robot_devices.motors.feetech import FeetechMotorsBus
bus = FeetechMotorsBus('/dev/ttyUSB0', motors={})
bus.connect()
ids = bus.find_motor_ids()
print('Found motor IDs:', ids)
bus.disconnect()
"
שגיאה 3 נתוני כיול לא נמצאו בריצה הבאה

LeRobot חוסך כיול לכל מספר סידורי של זרוע. אם הוא לא יכול למצוא את קובץ הכיול, הוא יזהיר וישתמש בערכי מקודד גולמיים.

לִקְבּוֹעַ:

# Check calibration file location
ls ~/.cache/huggingface/lerobot/calibration/so101/

# Re-run calibration if the file is missing
python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --control.type=calibrate

# Pass explicit calibration path if needed
python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB0 \
  --robot.calibration_dir=/path/to/calibration \
  --control.type=teleoperate

עדיין תקוע? שאל על פורום SO-101 או לבדוק את בעיות של LeRobot GitHub.

תוכנה עובדת? התחל לאסוף נתונים.

ברגע שהזרוע זזה, השלב הבא הוא הקלטת מערך הנתונים הראשון של LeRobot.