LeRobot documentation
SO-101
SO-101

في الخطوات أدناه، نشرح كيفية تجميع روبوتنا الرائد، وهو SO-101.
توفير المكونات
اتبع هذا README. يحتوي على قائمة المواد، مع رابط للحصول على القطع، بالإضافة إلى تعليمات طباعة القطع بتقنية الطباعة ثلاثية الأبعاد. كما يتضمن نصائح إذا كانت هذه تجربتك الأولى في الطباعة أو إذا لم تكن تملك طابعة ثلاثية الأبعاد.
تثبيت LeRobot 🤗
لتثبيت LeRobot، اتبع دليل التثبيت
بالإضافة إلى هذه التعليمات، تحتاج إلى تثبيت Feetech SDK (إذا قمت بتثبيت LeRobot من PyPI، فقم بتشغيل pip install 'lerobot[feetech]' بدلاً من ذلك):
pip install -e ".[feetech]"تعليمات التجميع خطوة بخطوة
تستخدم ذراع المتبوع 6 محركات من طراز STS3215 مع نسبة تروس 1/345. أما الذراع القائدة، فتستخدم ثلاثة محركات بنسب تروس مختلفة لضمان قدرتها على تحمل وزنها الذاتي، مع إمكانية تحريكها دون الحاجة إلى قوة كبيرة. يُوضح الجدول أدناه المحرك المطلوب لكل مفصل.
| محور الذراع القائد | المحرك | نسبة التروس |
|---|---|---|
| الأساس / الكتف | 1 | 1 / 191 |
| رفع الكتف | 2 | 1 / 345 |
| ثني المرفق | 3 | 1 / 191 |
| Wrist Flex | 4 | 1 / 147 |
| تمرين دوران المعصم | 5 | 1 / 147 |
| مقبض | 6 | 1 / 147 |
The input "Configure the motors" is a short phrase/heading. According to the instructions, headings and short phrases should be translated into natural Modern Standard Arabic. "Motors" in a technical context (likely robotics or hardware control) is translated as "المحركات". "Configure" is translated as "إعداد" or "تهيئة". "تهيئة المحركات" is a very common and professional term in technical documentation for "Configure the motors".
1. ابحث عن منافذ USB المرتبطة بكل ذراع
لإيجاد منفذ كل محوّل عتاد حافلة، قم بتوصيل MotorBus بجهازك عبر USB وتوصيله بالطاقة. نفّذ السكربت التالي وافصل MotorBus عند الطلب:
lerobot-find-port
مثال على المخرجات:
Finding all available ports for the MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Remove the USB cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/tty.usbmodem575E0032081
Reconnect the USB cable.حيث أن المنفذ الذي تم العثور عليه هو: /dev/tty.usbmodem575E0032081 والذي يتوافق مع ذراع القائد أو التابع لديك.
على نظام لينكس، قد تحتاج إلى منح الوصول إلى منافذ USB من خلال تشغيل الأمر التالي:
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1مثال على المخرجات:
Finding all available ports for the MotorBus.
['/dev/ttyACM0', '/dev/ttyACM1']
Remove the usb cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/ttyACM1
Reconnect the USB cable.حيث أن المنفذ الذي تم العثور عليه هو: /dev/ttyACM1 والذي يتوافق مع ذراع القائد أو التابع الخاص بك.
2. تعيين معرّفات المحركات ومعدلات البود
يتم تحديد كل محرك بمعرّف فريد على الحافلة. عند شرائها جديدة، تأتي المحركات عادةً بمعرّف افتراضي هو 1. لكي تعمل الاتصالات بشكل صحيح بين المحركات والمتحكم، نحتاج أولاً إلى تعيين معرّف فريد ومختلف لكل محرك. بالإضافة إلى ذلك، يتم تحديد سرعة نقل البيانات على الحافلة بواسطة معدل البود. ولكي يتواصل المتحكم مع جميع المحركات، يجب ضبطها جميعًا على نفس معدل البود.
لبلوغ هذا الهدف، نحتاج أولاً إلى الاتصال بكل محرك على حدة عبر وحدة التحكم من أجل ضبط هذه الإعدادات. وبما أننا سنكتب هذه المعلمات في القسم غير المتطاير من الذاكرة الداخلية للمحركات (EEPROM)، فلن نحتاج إلى القيام بذلك إلا مرة واحدة.
إذا كنت تعيد استخدام محركات من روبوت آخر، فستحتاج على الأرجح إلى تنفيذ هذه الخطوة أيضًا، حيث من المرجح أن تتطابق المعرفات ومعدل البود.
يُظهر الفيديو أدناه تسلسل الخطوات لضبط معرّفات المحركات.
فيديو إعداد المحركات
متابع
وصّل كابل usb من جهاز الحاسوب الخاص بك ومن مصدر الطاقة إلى لوحة تحكم ذراع المتابعة. ثم، نفّذ الأمر التالي أو نفّذ مثال الواجهة البرمجية API باستخدام المنفذ الذي حصلت عليه من الخطوة السابقة. ستحتاج أيضًا إلى منح ذراع المتابعة اسمًا باستخدام معامل id.
lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbmodem585A0076841 # <- paste here the port found at previous stepfrom lerobot.robots.so_follower import SO101Follower, SO101FollowerConfig
config = SO101FollowerConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_follower_arm",
)
follower = SO101Follower(config)
follower.setup_motors()يجب أن ترى التعليمات التالية
Connect the controller board to the 'gripper' motor only and press enter.كما هو موضح، قم بتوصيل محرك الماسك. تأكد من أنه المحرك الوحيد المتصل باللوحة، وأن المحرك نفسه غير موصول بعد بسلسلة متسلسلة مع أي محرك آخر. عند الضغط على [Enter]، سيقوم السكربت تلقائيًا بإعداد المعرّف ومعدل البود لهذا المحرك.
Troubleshooting
إذا واجهت خطأً في تلك النقطة، فتأكد من الكابلات وتأكد من أنها موصولة بشكل صحيح:
- مزود الطاقة
- كابل USB بين حاسوبك ولوحة التحكم
- كابل 3-أطراف من لوحة التحكم إلى المحرك
إذا كنت تستخدم لوحة تحكم Waveshare، فتأكد من ضبط القفزين على قناة B (USB).
يجب أن ترى الرسالة التالية:
'gripper' motor id set to 6يُتبع ذلك بالتعليم التالي:
Connect the controller board to the 'wrist_roll' motor only and press enter.يمكنك فصل كابل 3-pin عن لوحة التحكم، لكن يمكنك تركه موصولاً بمحرك القبضة في الطرف الآخر، إذ سيكون في مكانه الصحيح بالفعل. الآن، وصّل كابل 3-pin آخر بمحرك دوران المعصم (wrist roll motor) ووصّله بلوحة التحكم. وكما في المحرك السابق، تأكد من أنه المحرك الوحيد الموصول باللوحة، وأن المحرك نفسه غير موصول بأي محرك آخر.
كرر العملية لكل محرك كما هو موضح في التعليمات.
تحقق من التوصيلات في كل خطوة قبل الضغط على مفتاح Enter. على سبيل المثال، قد تنفصل كابل مصدر الطاقة أثناء التعامل مع اللوحة.
عند الانتهاء، سينتهي تشغيل السكربت ببساطة، وعند ذلك تكون المحركات جاهزة للاستخدام. يمكنك الآن توصيل كابل 3-pins من كل محرك إلى المحرك التالي، ثم توصيل الكابل من المحرك الأول (وهو ‘shoulder pan’ المعرّف بـ id=1) إلى لوحة التحكم، والتي يمكن الآن تثبيتها على قاعدة الذراع.
القيادي
قم بنفس الخطوات للذراع القائدة.
lerobot-setup-motors \
--teleop.type=so101_leader \
--teleop.port=/dev/tty.usbmodem575E0031751 # <- paste here the port found at previous stepfrom lerobot.teleoperators.so_leader import SO101Leader, SO101LeaderConfig
config = SO101LeaderConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_leader_arm",
)
leader = SO101Leader(config)
leader.setup_motors()أجزاء نظيفة
أزل جميع مواد الدعم من الأجزاء المطبوعة ثلاثية الأبعاد. أسهل طريقة للقيام بذلك هي استخدام مفك صغير للوصول إلى أسفل مواد الدعم.
يُنصح بتثبيت كابل واحد من ثلاث فتحات في المحرك بعد وضعها قبل المتابعة في التجميع.
المفصل 1
- قم بتثبيت كلا من بوقَي المحرك. ثبّت البوق العلوي بمسمار M3x6mm. لا يلزم استخدام مسامير للبوق السفلي.
- ضع المحرك الأول في القاعدة.
- ثبّت المحرك بأربعة مسامير مقاس M2x6mm (أصغر المسامير). اثنان من الأعلى واثنان من الأسفل.
- مرّر فوق حامل المحرك الأول وثبّته باستخدام برغيين من نوع M2x6mm (واحد على كل جانب).
- أثبِت الجزء الخاص بالكتف.
- شُدّ الجزء العلوي للكتف بأربعة براغي M3x6mm في الأعلى وأربعة براغي M3x6mm في الأسفل
- أضِف حامل محرك الكتف.
الارتباط 2
- قم بتثبيت كلا من بوقَي المحرك. ثبّت البوق العلوي بمسمار M3x6mm. لا يلزم استخدام مسامير للبوق السفلي.
- انزِع المحرك الثاني من الأعلى.
- ثبّت المحرك الثاني بأربعة مسامير مقاس M2x6mm.
- اربط العضد العلوي بأربعة براغي مقاس M3x6mm على كل جانب.
الارتباط 3
- قم بتثبيت كلا من بوقَي المحرك. ثبّت البوق العلوي بمسمار M3x6mm. لا يلزم استخدام مسامير للبوق السفلي.
- أدخل المحرك 3 وثبّته باستخدام 4 براغي مقاس M2x6mm.
- اربط الساعد بالمحرك 3 باستخدام 4 براغي مقاس M3x6mm على كل جانب.
المفصل 4
- قم بتثبيت كلا من بوقَي المحرك. ثبّت البوق العلوي بمسمار M3x6mm. لا يلزم استخدام مسامير للبوق السفلي.
- منزلق حامل المحرك 4.
- انزلق في المحرك 4.
- ثبّت المحرك 4 بأربعة براغي مقاس M2x6mm.
المفصل 5
- أدخل المحرك 5 في حامل المعصم وثبّته بمسمارين أماميين مقاس M2x6mm.
- قم بتثبيت قرن واحد فقط على محرك المعصم وثبّته بمسمار قرن مقاس M3x6mm.
- ثبّت المعصم على المحرك 4 باستخدام 4 براغي M3x6mm على كلا الجانبين.
مقبض / مقبض
- اربط الماسك بالمحرك 5، وثبّته على قرن المحرك الموجود في المعصم باستخدام 4 براغي مقاس M3x6mm.
- أدخل محرك الماسك وثبّته بمسمارين مقاس M2x6mm على كل جانب.
- قم بتثبيت كلا قرني المحرك على محرك الماسك. ثبّت القرن العلوي بمسمار M3x6mm؛ ولا يلزم استخدام مسامير للقرن السفلي.
- قم بتثبيت مخلب القبضة وتثبيته بأربعة براغي مقاس M3x6mm على كلا الجانبين.
- ثبّت حامل القائد على المعصم وأمنه بأربعة براغي مقاس M3x6mm.
- اربط المقبض بحامل القائد باستخدام برغي واحد من نوع M2x6mm.
- أدخل محرك الماسك، وثبّته بمسمارين مقاس M2x6mm على كل جانب، ثم ألصق قرص المحرك باستخدام مسمار قرص مقاس M3x6mm.
- اربط مُفعِّل المتتبِّع بأربعة براغي مقاس 4 M3x6mm.
المعايرة
في الخطوة التالية، ستحتاج إلى معايرة روبوتك للتأكد من أن ذراعي القائد والمتبوع تمتلكان قيم موضع متطابقة عندما تكونان في الموضع الفيزيائي نفسه. تُعد عملية المعايرة بالغة الأهمية لأنها تتيح لشبكة عصبية مُدرَّبة على روبوت واحد أن تعمل على روبوت آخر.
متابع
شغّل الأمر أو مثال واجهة برمجة التطبيقات التالي لمعايرة ذراع المتبّع:
# Use the port of your follower arm, and give the arm a unique name with --robot.id
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbmodem58760431551 \
--robot.id=my_awesome_follower_armfrom lerobot.robots.so_follower import SO101FollowerConfig, SO101Follower
config = SO101FollowerConfig(
port="/dev/tty.usbmodem585A0076891",
id="my_awesome_follower_arm",
)
follower = SO101Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()يُظهر الفيديو أدناه كيفية إجراء المعايرة. أولاً، عليك تحريك الروبوت إلى الموضع الذي تكون فيه جميع المفاصل في منتصف نطاقاتها. ثم، بعد الضغط على مفتاح الإدخال، يجب عليك تحريك كل مفصل عبر كامل نطاق حركته.
فيديو المعايرة
القيادي
قم بنفس الخطوات لمعايرة الذراع الرئيسية، ونفّذ الأمر التالي أو مثال واجهة برمجة التطبيقات:
# Use the port of your leader arm, and give the arm a unique name with --teleop.id
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/tty.usbmodem58760431551 \
--teleop.id=my_awesome_leader_armfrom lerobot.teleoperators.so_leader import SO101LeaderConfig, SO101Leader
config = SO101LeaderConfig(
port="/dev/tty.usbmodem58760431551",
id="my_awesome_leader_arm",
)
leader = SO101Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()تهانينا 🎉، روبوتك جاهز تمامًا لتعلم مهمة بشكل مستقل. ابدأ تدريبه باتباع هذا الشرح التعليمي: البدء مع الروبوتات الواقعية
Update on GitHubإذا كانت لديك أي أسئلة أو كنت بحاجة إلى مساعدة، يرجى التواصل معنا عبر Discord.