# OMX

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

## Commander et assembler les pièces

Premièrement, assemblez le matériel OMX en suivant le guide d'assemblage officiel.

Guide d'assemblage de l'OMX : https://ai.robotis.com/omx/assembly_guide_omx.html

Les robots OMX sont livrés préconfigurés depuis l'usine. Les identifiants des moteurs, les paramètres de communication et les décalages des articulations sont déjà définis, de sorte qu'aucune configuration ou calibration supplémentaire des moteurs n'est requise avant d'utiliser LeRobot.

## Installer LeRobot 🤗

Pour installer LeRobot, suivez notre [Guide d'installation](./installation)

En plus de ces instructions, vous devez installer la prise en charge des moteurs Dynamixel :

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

## Connecter le robot

Pour trouver le port de chaque adaptateur de servomoteur de bus, exécutez ce script :

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

Cette commande s’exécute et, lorsque le système vous y invite, débranchez le câble USB de l’bras leader ou de l’bras follower, puis appuyez sur Entrée. La sortie affichera « The port of this MotorsBus is [port] ». Cela identifie le port de l’bras débranché. Répétez l’opération pour l’autre bras afin d’identifier les deux ports.

Exemple de sortie sur 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.
```

L’emplacement du port trouvé est : `/dev/tty.usbmodem575E0032081`, correspondant à votre bras leader ou suiveur.

Sur Linux, nous recommandons vivement d'utiliser des règles udev pour attribuer des noms de périphériques persistants et lisibles par l'homme aux bras leader et suiveur OMX. Cela évite les problèmes liés aux noms de périphériques tels que ttyACM0 et ttyACM1, qui changent lorsque le robot est débranché, rebranché, ou lorsque le système est redémarré.

#### 1. Trouvez les numéros de série de vos appareils

Vous devriez avoir obtenu les numéros de port de type ../../ttyACM? pour le leader et le suiveur à l'aide de `lerobot-find-port`. Vous pouvez associer ces résultats aux numéros de série à l'aide de la commande `ls -l /dev/serial/by-id/`. Pour créer des règles udev, vous avez besoin du numéro de série unique de chaque appareil OMX. La méthode la plus simple consiste à lister les appareils sous :

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

Vous verrez une sortie similaire à :

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

Dans chaque ligne, le numéro de série est la longue chaîne située après `usb-ROBOTIS_OpenRB-150_` et avant `-if00`.

Série du suiveur : `228BDD7B503059384C2E3120FF0A2B19`

Série du leader : `67E1ED68503059384C2E3120FF092234`

#### 2. Créer la règle udev

Créer un nouveau fichier de règle udev :

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

Collez les lignes suivantes, en remplaçant les numéros de série par les valeurs que vous avez trouvées ci-dessus :

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

Enregistrez le fichier et rechargez les règles udev :

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

Débranchez maintenant les deux appareils, puis rebranchez-les une fois.

#### 3. Vérifier les liens symboliques

Vérifiez que les noms de périphériques persistants existent :

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

Vous devriez les voir pointer vers des appareils ttyACM\* :

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

Ces noms restent stables lors des redémarrages et des reconnections.

## Télépiloter

Après avoir identifié les ports corrects, vous pouvez téléopérer directement le bras suiveur à l'aide du bras leader.

### Téléopérer sans caméra

```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
```

Lors de la téléopération, les mouvements du bras leader sont reproduits en temps réel par le bras suiveur. OMX est déjà préconfiguré, la téléopération peut commencer immédiatement sans aucune étape de calibration.

### Télépiloter avec une caméra

Vous pouvez également activer l’entrée caméra pendant la téléopération en fournissant une configuration de caméra pour le bras suiveur.

```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
```

Lorsque la caméra est activée, le flux vidéo est affiché en temps réel et synchronisé avec l'état du robot. Cette configuration est utile pour la surveillance visuelle et peut être réutilisée ultérieurement pour l'enregistrement de démonstrations et l'apprentissage par imitation.

### Téléopérer sans caméra

```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
```

Lors de la téléopération, les mouvements du bras leader sont reproduits en temps réel par le bras suiveur. OMX est déjà préconfiguré, la téléopération peut commencer immédiatement sans aucune étape de calibration.

### Télépiloter avec une caméra

Vous pouvez également activer l’entrée caméra pendant la téléopération en fournissant une configuration de caméra pour le bras suiveur.

```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
```

Lorsque la caméra est activée, le flux vidéo est affiché en temps réel et synchronisé avec l'état du robot. Cette configuration est utile pour la surveillance visuelle et peut être réutilisée ultérieurement pour l'enregistrement de démonstrations et l'apprentissage par imitation.

Félicitations 🎉, votre robot est prêt à apprendre une tâche de manière autonome.

> Si vous avez des questions ou besoin d'aide, n'hésitez pas à nous contacter sur [Discord](https://discord.com/invite/robotis).

