إعداد البرامج
تثبيت LeRobot، وتكوين الروبوت SO-101، ومعايرة المؤازرة، وإعداد teleop بين القائد والتابع، وPython API، واستكشاف الأخطاء وإصلاحها. كل شيء بدءًا من تثبيت Python الجديد وحتى الذراع الجارية.
انتقل إلى القسم:
تركيب ليروبوت
LeRobot هي حزمة البرامج الوحيدة التي تحتاجها لـ SO-101. إنه يتعامل مع الاتصالات المؤازرة والمعايرة والتقريب وتسجيل البيانات.
إنشاء بيئة افتراضية
python -m venv ~/.venvs/so101
source ~/.venvs/so101/bin/activate # Windows: .venvs\so101\Scripts\activate
تثبيت ليروبوت
pip install lerobot
التحقق من التثبيت
python -c "import lerobot; print(lerobot.__version__)"
التثبيت من المصدر (اختياري — للحصول على أحدث الميزات)
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[so101]"
تكوين الروبوت SO-101
يشتمل LeRobot على تكوين روبوت SO-101 مدمج. يمكنك تحديد منفذ USB للذراع التابع (والذراع القائد في حالة استخدام teleop ثنائي الذراع).
ابحث عن منفذ 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
يجب أن تشاهد قراءات الموقف المشترك مطبوعة. إذا حصلت على خطأ في المنفذ، تحقق استكشاف الأخطاء وإصلاحها.
معايرة المؤازرة
على عكس أذرع 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
حرك الذراع يدوياً (وضع الإمتثال). يجب أن تكون قراءة مواضع المفاصل قريبة من الصفر في المنزل وتزيد/تنقص بسلاسة أثناء تحريك كل مفصل.
نصيحة إعادة المعايرة: قم بإجراء المعايرة مرة أخرى في أي وقت تقوم فيه بتفكيك مفصل، أو استبدال جهاز مؤازر، أو تجد أن مواضع المفصل تنحرف. يتم تخزين ملفات المعايرة برقم تسلسلي لكل ذراع وإعادة تحميلها تلقائيًا.
القائد - التابع للعملية عن بعد
تم تصميم SO-101 للعمل عن بعد بين القائد والتابع: ذراع واحدة (القائد) تلتقط حركات يدك، والذراع الثاني (التابع) يعكسها في الوقت الفعلي. وهذا ينتج عروضًا تدريبية بأعلى جودة.
بدء teleop القائد - التابع
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
"
بداية سريعة لواجهة برمجة تطبيقات بايثون
يمكنك التحكم في SO-101 مباشرة عبر LeRobot robot API بدون البرامج النصية لـ 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 قضايا مشتركة
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
الماكينات متصلة فعليًا ولكن 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()
"
يحفظ 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.