# 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 ロボットは、工場出荷時にプリセット済みです。モーター ID、通信パラメータ、関節オフセットがすでに設定されているため、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環境では、OMXのリーダーアームとフォロワーアームに永続的で人間が読みやすいデバイス名を割り当てるために、udevルールを使用することを強く推奨します。これにより、ロボットを抜粋して再接続した場合やシステムを再起動した場合に、ttyACM0やttyACM1などのデバイス名が変更される問題を防ぐことができます。

#### 1. デバイスのシリアル番号を確認する

You should have obtained the port numbers like ../../ttyACM? for the leader and follower using `lerobot-find-port`. You can match those results with the serial numbers using the `ls -l /dev/serial/by-id/` command. To create udev rules, you need the unique serial number for each OMX device. The easiest way is to list devices under:

```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`の手前までの長い文字列です。

Followerシリアル: `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)までご連絡ください。

