# 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. 기기 일련 번호 찾기

리더와 팔로워의 포트 번호를 `lerobot-find-port`를 사용하여 ../../ttyACM? 형태로 가져왔어야 합니다. `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*
```

이 이름들은 재부팅 및 재연결 시에도 안정적으로 유지됩니다.

## 원격 조작

ports를 올바르게 식별한 후, 리더 암을 사용하여 팔로워 암을 직접 텔레오퍼레이트할 수 있습니다.

### 카메라 없이 텔레오퍼레이트

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

원격 조작(teleoperation) 중 리더 암의 움직임은 팔로워 암에 의해 실시간으로 미러링됩니다. 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
```

원격 조작(teleoperation) 중 리더 암의 움직임은 팔로워 암에 의해 실시간으로 미러링됩니다. 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)로 문의해 주세요.

