# OMX

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/omx_mainimage.png"
  alt="OMX"
  width=600
/>

## ترتيب الأجزاء وتجميعها

أولاً، قم بتجميع عتاد OMX وفقاً لدليل التجميع الرسمي.

دليل تجميع OMX: https://ai.robotis.com/omx/assembly_guide_omx.html

تُشحن روبوتات OMX مُهيأة مسبقًا من المصنع. حيث تم ضبط معرّفات المحركات، ومعاملات الاتصال، وإزاحات المفاصل مسبقًا، لذا لا حاجة إلى أي إعداد إضافي للمحركات أو معايرة قبل استخدام LeRobot.

## تثبيت LeRobot 🤗

لتثبيت LeRobot، اتبع [دليل التثبيت](./installation)

بالإضافة إلى هذه التعليمات، تحتاج إلى تثبيت دعم محركات Dynamixel:

```bash
pip install -e ".[dynamixel]"
```

## اتصل بالروبوت

لإيجاد منفذ كل محوّل عتاد حافلة، نفّذ هذا النص البرمجي:

```bash
lerobot-find-port
```

This command runs and when prompted, disconnect the USB cable from either the leader or follower arm and press Enter. The output will show 'The port of this MotorsBus is [port]'. This identifies the port for the disconnected arm. Repeat for the other arm to identify both ports.

مثال على المخرجات في macOS:

```
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` والذي يتوافق مع ذراع القائد أو التابع لديك.

على نظام Linux، نوصي بشدة باستخدام قواعد udev لتعيين أسماء أجهزة دائمة وقابلة للقراءة من قبل الإنسان على ذراعي القادة والمتابعين في OMX. وهذا يتجنب المشكلات التي تنشأ عندما تتغير أسماء الأجهزة مثل ttyACM0 و ttyACM1 عند فصل الروبوت أو إعادة توصيله، أو عند إعادة تشغيل النظام.

#### 1. ابحث عن أرقام تسلسل أجهزتك

يجب أن تكون قد حصلت على أرقام المنافذ على غرار ../../ttyACM? للقائد والمتبّع باستخدام `lerobot-find-port`. يمكنك مطابقة تلك النتائج مع أرقام التسلسل باستخدام أمر `ls -l /dev/serial/by-id/`. لإنشاء قواعد udev، تحتاج إلى رقم تسلسل فريد لكل جهاز OMX. أسهل طريقة هي سرد الأجهزة الموجودة تحت:

```bash
ls -l /dev/serial/by-id/
```

ستظهر لك مخرجات مماثلة لما يلي:

```bash
usb-ROBOTIS_OpenRB-150_228BDD7B503059384C2E3120FF0A2B19-if00 -> ../../ttyACM0
usb-ROBOTIS_OpenRB-150_67E1ED68503059384C2E3120FF092234-if00 -> ../../ttyACM1
```

في كل سطر، الرقم التسلسلي هو السلسلة الطويلة بعد `usb-ROBOTIS_OpenRB-150_` وقبل `-if00`.

سلسلة المتابع: `228BDD7B503059384C2E3120FF0A2B19`

المتسلسل للقائد: `67E1ED68503059384C2E3120FF092234`

#### 2. إنشاء قاعدة udev

أنشئ ملف قاعدة udev جديد:

```bash
sudo nano /etc/udev/rules.d/99-omx.rules
```

الصق الأسطر التالية، مع استبدال الأرقام التسلسلية بالقيم التي وجدتها أعلاه:

```bash
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{serial}=="228BDD7B503059384C2E3120FF0A2B19", SYMLINK+="omx_follower"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{serial}=="67E1ED68503059384C2E3120FF092234", SYMLINK+="omx_leader"
```

احفظ الملف وأعد تحميل قواعد udev:

```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```

الآن افصل الجهازين وأعد توصيلهما مرة واحدة.

#### 3. تحقق من الروابط الرمزية

تحقق من وجود أسماء الأجهزة الدائمة:

```bash
ls -l /dev/omx_follower /dev/omx_leader
```

يجب أن ترى أنهما يشيران إلى أجهزة \* من نوع ttyACM:

```bash
/dev/omx_follower -> ttyACM*
/dev/omx_leader   -> ttyACM*
```

تبقى هذه الأسماء مستقرة عبر عمليات إعادة التشغيل وإعادة الاتصال.

## التشغيل عن بُعد

بعد تحديد المنافذ الصحيحة، يمكنك تشغيل الذراع التابع عن بُعد مباشرةً باستخدام الذراع القائد.

### التحكم عن بُعد دون كاميرا

```bash
lerobot-teleoperate \
  --robot.type=omx_follower \
  --robot.port=<your_follower_port> \
  --robot.id=omx_follower_arm \
  --teleop.type=omx_leader \
  --teleop.port=<your_leader_port> \
  --teleop.id=omx_leader_arm
```

أثناء التشغيل عن بُعد، تُنقل حركات الذراع القائدة إلى الذراع المتتبعة في الوقت الفعلي. تم ضبط OMX مسبقًا، ويمكن بدء التشغيل عن بُعد فورًا دون الحاجة إلى أي خطوات معايرة.

### التحكم عن بُعد باستخدام الكاميرا

يمكنك أيضًا تمكين إدخال الكاميرا أثناء التشغيل عن بُعد من خلال توفير تكوين كاميرا للذراع التابع.

```bash
lerobot-teleoperate \
  --robot.type=omx_follower \
  --robot.port=<your_follower_port> \
  --robot.id=omx_follower_arm \
  --robot.cameras="{front: {type: opencv, index_or_path: '/dev/video0', width: 640, height: 480, fps: 30}}" \
  --teleop.type=omx_leader \
  --teleop.port=<your_leader_port> \
  --teleop.id=omx_leader_arm \
  --display_data=true
```

عند تفعيل الكاميرا، يتم عرض بث الكاميرا في الوقت الفعلي ومزامنته مع حالة الروبوت. يُعد هذا الإعداد مفيدًا للمراقبة البصرية ويمكن إعادة استخدامه لاحقًا لتسجيل العروض التوضيحية وتعلم التقليد.

### التحكم عن بُعد دون كاميرا

```bash
lerobot-teleoperate \
  --robot.type=omx_follower \
  --robot.port=/dev/omx_follower \
  --robot.id=omx_follower_arm \
  --teleop.type=omx_leader \
  --teleop.port=/dev/omx_leader \
  --teleop.id=omx_leader_arm
```

أثناء التشغيل عن بُعد، تُنقل حركات الذراع القائدة إلى الذراع المتتبعة في الوقت الفعلي. تم ضبط OMX مسبقًا، ويمكن بدء التشغيل عن بُعد فورًا دون الحاجة إلى أي خطوات معايرة.

### التحكم عن بُعد باستخدام الكاميرا

يمكنك أيضًا تمكين إدخال الكاميرا أثناء التشغيل عن بُعد من خلال توفير تكوين كاميرا للذراع التابع.

```bash
lerobot-teleoperate \
  --robot.type=omx_follower \
  --robot.port=/dev/omx_follower \
  --robot.id=omx_follower_arm \
  --robot.cameras="{front: {type: opencv, index_or_path: '/dev/video0', width: 640, height: 480, fps: 30}}" \
  --teleop.type=omx_leader \
  --teleop.port=/dev/omx_leader \
  --teleop.id=omx_leader_arm \
  --display_data=true
```

عند تفعيل الكاميرا، يتم عرض بث الكاميرا في الوقت الفعلي ومزامنته مع حالة الروبوت. يُعد هذا الإعداد مفيدًا للمراقبة البصرية ويمكن إعادة استخدامه لاحقًا لتسجيل العروض التوضيحية وتعلم التقليد.

تهانينا 🎉، روبوتك جاهز تمامًا لتعلم مهمة على نحو مستقل.

> إذا كانت لديك أي أسئلة أو كنت بحاجة إلى مساعدة، يرجى التواصل معنا عبر [Discord](https://discord.com/invite/robotis).

