# Robot

Setiap robot di LeRobot mengimplementasikan antarmuka `Robot`: connect, membaca observasi, mengirim aksi, disconnect. Menulis kebijakan atau skrip perekaman terhadap antarmuka tersebut berarti ia dapat bekerja dengan lengan apa pun yang didukung tanpa perubahan.

Halaman ini adalah referensi yang dihasilkan. Untuk instruksi pemasangan, kalibrasi, dan penggunaan pertama, mulai dari panduan perangkat keras — [SO-101](../so101), [LeKiwi](../lekiwi), [Hope Jr](../hope_jr), [Reachy 2](../reachy2), [OpenArm](../openarm) — atau [Imitation Learning for Robots](../il_robots) untuk alur kerja end-to-end. Untuk robot yang dipelihara komunitas di luar set inti, lihat [Third-Party Robots & Teleoperators](../third_party_robots). Untuk menambahkan robot Anda sendiri, lihat [Bring Your Own Hardware](../integrate_hardware).

## Robot[[lerobot.robots.Robot]]

Kelas basis abstrak. Subkelas mengimplementasikan setiap metode di bawah ini; kontrak yang dijelaskan di sini adalah yang dapat diandalkan oleh kebijakan atau loop perekaman.

#### lerobot.robots.Robot[[lerobot.robots.Robot]]

```python
lerobot.robots.Robot(config: RobotConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L33)

**Parameter:**

config_class (RobotConfig) : Kelas konfigurasi yang diharapkan untuk robot ini.

name (str) : Nama robot unik yang digunakan untuk mengidentifikasi tipe robot ini.

Kelas abstrak dasar untuk semua robot yang kompatibel dengan LeRobot.

Kelas ini menyediakan antarmuka yang terstandarisasi untuk berinteraksi dengan robot fisik. Subkelas harus mengimplementasikan semua metode dan properti abstrak agar dapat digunakan.

#### connect[[lerobot.robots.Robot.connect]]

```python
connect(calibrate: bool = True)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L136)

**Parameter:**

calibrate (bool) : Jika True, secara otomatis kalibrasi robot setelah terhubung jika belum dikalibrasi atau memerlukan kalibrasi (hal ini bergantung pada perangkat keras).

Membangun komunikasi dengan robot.

#### putuskan[[lerobot.robots.Robot.disconnect]]

```python
disconnect()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L237)

Putuskan koneksi dari robot dan lakukan pembersihan yang diperlukan.

#### konfigurasi[[lerobot.robots.Robot.configure]]

```python
configure()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L202)

Terapkan konfigurasi sekali jalan atau saat runtime ke robot. Ini dapat mencakup pengaturan parameter motor, mode kontrol, atau keadaan awal.

#### kalibrasi[[lerobot.robots.Robot.calibrate]]

```python
calibrate()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L153)

Kalibrasi robot jika berlaku. Jika tidak, ini seharusnya tidak melakukan apa-apa.

Metode ini harus mengumpulkan data yang diperlukan (misalnya, offset motor) dan memperbarui kamus :pyattr:`calibration` secara sesuai.

#### get_observation[[lerobot.robots.Robot.get_observation]]

```python
get_observation()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L210)

**Mengembalikan:** `RobotObservation`

Kamus datar yang mewakili keadaan sensorik robot saat ini. Strukturnya harus sesuai dengan :pymeth:`observation_features`.

Ambil observasi saat ini dari robot.

#### send_action[[lerobot.robots.Robot.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L222)

**Parameter:**

action (RobotAction) : Dictionary yang merepresentasikan aksi yang diinginkan. Strukturnya harus sesuai dengan :pymeth:`action_features`.

**Mengembalikan:** `RobotAction`

Aksi yang sebenarnya dikirim ke motor, yang mungkin dipangkas atau dimodifikasi, misalnya oleh batas keamanan pada kecepatan.

Kirim perintah aksi ke robot.

#### observation_features[[lerobot.robots.Robot.observation_features]]

```python
observation_features()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L100)

Kamus yang menjelaskan struktur dan tipe dari observasi yang dihasilkan oleh robot. Strukturnya (kunci) harus sesuai dengan struktur yang dikembalikan oleh :pymeth:`get_observation`. Nilai untuk dict harus berupa:
- Tipe dari nilai jika itu adalah nilai sederhana, misalnya `float` untuk nilai proprioceptive tunggal (posisi/kecepatan sendi)
- Tuple yang mewakili bentuk jika nilainya bertipe array, misalnya `(height, width, channel)` untuk gambar

Catatan: properti ini harus dapat dipanggil terlepas dari apakah robot terhubung atau tidak.

#### action_features[[lerobot.robots.Robot.action_features]]

```python
action_features()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L114)

Kamus yang menjelaskan struktur dan tipe dari aksi yang diharapkan oleh robot. Strukturnya (kunci) harus sesuai dengan struktur dari apa yang diteruskan ke :pymeth:`send_action`. Nilai untuk dict harus berupa tipe dari nilai tersebut jika itu adalah nilai sederhana, misalnya `float` untuk nilai proprioceptive tunggal (posisi/kecepatan target sendi)

Catatan: properti ini harus dapat dipanggil terlepas dari apakah robot terhubung atau tidak.

#### is_connected[[lerobot.robots.Robot.is_connected]]

```python
is_connected()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L127)

Apakah robot saat ini terhubung atau tidak. Jika `False`, pemanggilan :pymeth:`get_observation` atau :pymeth:`send_action` harus memicu error.

#### is_calibrated[[lerobot.robots.Robot.is_calibrated]]

```python
is_calibrated()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/robot.py#L147)

Apakah robot saat ini sudah dikalibrasi atau belum. Harus selalu `True` jika tidak berlaku

## RobotConfig[[lerobot.robots.RobotConfig]]

#### lerobot.robots.RobotConfig[[lerobot.robots.RobotConfig]]

```python
lerobot.robots.RobotConfig(id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/config.py#L23)

## make_robot_from_config[[lerobot.robots.make_robot_from_config]]

#### lerobot.robots.make_robot_from_config[[lerobot.robots.make_robot_from_config]]

```python
lerobot.robots.make_robot_from_config(config: RobotConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/utils.py#L28)

## Pengikut SO-100 dan SO-101[[lerobot.robots.so_follower.SOFollower]]

`SO100Follower` dan `SO101Follower` adalah alias dari kelas `SOFollower` yang sama; kedua lengan tersebut berbeda dalam konfigurasinya, bukan dalam kode kendalinya. `SO100FollowerConfig` dan `SO101FollowerConfig` juga merupakan alias dari `SOFollowerRobotConfig`.

#### lerobot.robots.so_follower.SOFollower[[lerobot.robots.so_follower.SOFollower]]

```python
lerobot.robots.so_follower.SOFollower(config: SOFollowerRobotConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/so_follower/so_follower.py#L54)

Basis pengikut SO generik yang mengimplementasikan fungsionalitas umum untuk SO-100/101/10X. Dirancang untuk disubkelas dengan `config_class` dan `name` per model perangkat keras.

#### connect[[lerobot.robots.so_follower.SOFollower.connect]]

```python
connect(calibrate: bool = True)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/so_follower/so_follower.py#L110)

Kami mengasumsikan bahwa pada saat koneksi, lengan berada dalam posisi istirahat, dan torsi dapat dinonaktifkan dengan aman untuk menjalankan kalibrasi.

#### send_action[[lerobot.robots.so_follower.SOFollower.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/so_follower/so_follower.py#L187)

**Mengembalikan:** `RobotAction`

aksi yang dikirim ke motor, yang mungkin dipangkas.

**Mengangkat:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- jika robot tidak terhubung.

Perintahkan lengan untuk bergerak ke konfigurasi sendi target.

Besaran aksi relatif dapat dipangkas (clipped) tergantung pada parameter konfigurasi `max_relative_target`. Dalam kasus ini, aksi yang dikirim berbeda dari aksi asli. Oleh karena itu, fungsi ini selalu mengembalikan aksi yang benar-benar dikirim.

#### lerobot.robots.so_follower.SOFollowerRobotConfig[[lerobot.robots.so_follower.SOFollowerRobotConfig]]

```python
lerobot.robots.so_follower.SOFollowerRobotConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = True, position_p_coefficient: int = 16, position_i_coefficient: int = 0, position_d_coefficient: int = 32, num_read_retries: int = 2, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/so_follower/config_so_follower.py#L59)

## BiSOFollower[[lerobot.robots.bi_so_follower.BiSOFollower]]

Dua pengikut SO yang digerakkan sebagai satu robot bimanus.

#### lerobot.robots.bi_so_follower.BiSOFollower[[lerobot.robots.bi_so_follower.BiSOFollower]]

```python
lerobot.robots.bi_so_follower.BiSOFollower(config: BiSOFollowerConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/bi_so_follower/bi_so_follower.py#L31)

[Lengan Pengikut SO Bimanual](https://github.com/TheRobotStudio/SO-ARM100) yang dirancang oleh TheRobotStudio

#### lerobot.robots.bi_so_follower.BiSOFollowerConfig[[lerobot.robots.bi_so_follower.BiSOFollowerConfig]]

```python
lerobot.robots.bi_so_follower.BiSOFollowerConfig(left_arm_config: SOFollowerConfig, right_arm_config: SOFollowerConfig, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/bi_so_follower/config_bi_so_follower.py#L27)

Kelas konfigurasi untuk robot Bi SO Follower.

## KochFollower[[lerobot.robots.koch_follower.KochFollower]]

#### lerobot.robots.koch_follower.KochFollower[[lerobot.robots.koch_follower.KochFollower]]

```python
lerobot.robots.koch_follower.KochFollower(config: KochFollowerConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/koch_follower/koch_follower.py#L33)

- [Koch v1.0](https://github.com/AlexanderKoch-Koch/low_cost_robot), dengan dan tanpa perluasan pergelangan tangan ke siku, dikembangkan oleh Alexander Koch dari [Tau Robotics](https://tau-robotics.com)
- [Koch v1.1](https://github.com/jess-moss/koch-v1-1) yang dikembangkan oleh Jess Moss

#### connect[[lerobot.robots.koch_follower.KochFollower.connect]]

```python
connect(calibrate: bool = True)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/koch_follower/koch_follower.py#L89)

Kami mengasumsikan bahwa pada saat koneksi, lengan berada dalam posisi istirahat, dan torsi dapat dinonaktifkan dengan aman untuk menjalankan kalibrasi.

#### send_action[[lerobot.robots.koch_follower.KochFollower.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/koch_follower/koch_follower.py#L176)

**Parameter:**

action (RobotAction) : Posisi tujuan untuk motor.

**Mengembalikan:** `RobotAction`

Aksi yang dikirim ke motor, yang mungkin dipangkas.

Perintahkan lengan untuk bergerak ke konfigurasi sendi target.

Besaran aksi relatif dapat dipangkas (clipped) tergantung pada parameter konfigurasi `max_relative_target`. Dalam kasus ini, aksi yang dikirim berbeda dari aksi asli. Oleh karena itu, fungsi ini selalu mengembalikan aksi yang benar-benar dikirim.

#### lerobot.robots.koch_follower.KochFollowerConfig[[lerobot.robots.koch_follower.KochFollowerConfig]]

```python
lerobot.robots.koch_follower.KochFollowerConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = False, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/koch_follower/config_koch_follower.py#L24)

## LeKiwi[[lerobot.robots.lekiwi.LeKiwi]]

`LeKiwi` berjalan di robot itu sendiri. `LeKiwiClient` adalah proxy sisi host yang berkomunikasi dengannya melalui jaringan dan menyajikan antarmuka `Robot` yang sama.

#### lerobot.robots.lekiwi.LeKiwi[[lerobot.robots.lekiwi.LeKiwi]]

```python
lerobot.robots.lekiwi.LeKiwi(config: LeKiwiConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/lekiwi.py#L36)

Robot ini mencakup basis mobile tiga roda omni dan lengan pengikut jarak jauh. Lengan pemimpin terhubung secara lokal (di laptop) dan posisi sendinya direkam, kemudian diteruskan ke lengan pengikut jarak jauh (setelah menerapkan pengaman keselamatan). Secara paralel, teleoperasi keyboard digunakan untuk menghasilkan perintah kecepatan mentah untuk roda.

#### send_action[[lerobot.robots.lekiwi.LeKiwi.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/lekiwi.py#L339)

**Mengembalikan:** `RobotAction`

aksi yang dikirim ke motor, yang mungkin dipangkas.

**Mengangkat:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- jika robot tidak terhubung.

Perintahkan lekiwi untuk bergerak ke konfigurasi sendi target.

Besaran aksi relatif dapat dipangkas (clipped) tergantung pada parameter konfigurasi `max_relative_target`. Dalam kasus ini, aksi yang dikirim berbeda dari aksi asli. Oleh karena itu, fungsi ini selalu mengembalikan aksi yang benar-benar dikirim.

#### lerobot.robots.lekiwi.LeKiwiConfig[[lerobot.robots.lekiwi.LeKiwiConfig]]

```python
lerobot.robots.lekiwi.LeKiwiConfig(port: str = '/dev/ttyACM0', disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = True, num_read_retries: int = 2, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/config_lekiwi.py#L47)

#### lerobot.robots.lekiwi.LeKiwiClient[[lerobot.robots.lekiwi.LeKiwiClient]]

```python
lerobot.robots.lekiwi.LeKiwiClient(config: LeKiwiClientConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/lekiwi_client.py#L40)

#### connect[[lerobot.robots.lekiwi.LeKiwiClient.connect]]

```python
connect()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/lekiwi_client.py#L129)

Membuat soket ZMQ dengan robot mobile jarak jauh

#### putuskan[[lerobot.robots.lekiwi.LeKiwiClient.disconnect]]

```python
disconnect()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/lekiwi_client.py#L351)

Membersihkan komunikasi ZMQ

#### get_observation[[lerobot.robots.lekiwi.LeKiwiClient.get_observation]]

```python
get_observation()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/lekiwi_client.py#L269)

Ambil observasi dari robot jarak jauh: posisi lengan pengikut saat ini, kecepatan roda saat ini (dikonversi menjadi kecepatan kerangka tubuh: x, y, theta), dan bingkai kamera. Menerima melalui ZMQ, terjemahkan menjadi kecepatan kerangka tubuh

#### send_action[[lerobot.robots.lekiwi.LeKiwiClient.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/lekiwi_client.py#L323)

**Parameter:**

action (RobotAction) : array yang berisi posisi target untuk motor.

**Mengembalikan:** `np.ndarray`

aksi yang dikirim ke motor, yang mungkin dipangkas.

**Mengangkat:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- jika robot tidak terhubung.

Perintahkan lekiwi untuk bergerak ke konfigurasi sendi target. Menerjemahkan ke ruang motor + mengirim melalui ZMQ

#### lerobot.robots.lekiwi.LeKiwiClientConfig[[lerobot.robots.lekiwi.LeKiwiClientConfig]]

```python
lerobot.robots.lekiwi.LeKiwiClientConfig(remote_ip: str, port_zmq_cmd: int = 5555, port_zmq_observations: int = 5556, teleop_keys: dict = <factory>, cameras: dict = <factory>, polling_timeout_ms: int = 15, connect_timeout_s: int = 5, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/lekiwi/config_lekiwi.py#L87)

## OpenArmFollower[[lerobot.robots.openarm_follower.OpenArmFollower]]

#### lerobot.robots.openarm_follower.OpenArmFollower[[lerobot.robots.openarm_follower.OpenArmFollower]]

```python
lerobot.robots.openarm_follower.OpenArmFollower(config: OpenArmFollowerConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/openarm_follower.py#L40)

Robot Pengikut OpenArms yang menggunakan komunikasi bus CAN untuk mengontrol lengan 7 DOF dengan gripper. Lengan ini menggunakan motor Damiao dalam mode kontrol MIT.

#### kalibrasi[[lerobot.robots.openarm_follower.OpenArmFollower.calibrate]]

```python
calibrate()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/openarm_follower.py#L164)

Jalankan prosedur kalibrasi untuk robot OpenArms.

Prosedur kalibrasi:
1. Nonaktifkan torsi
2. Minta pengguna untuk memosisikan lengan dalam posisi menggantung dengan gripper tertutup
3. Atur ini sebagai posisi nol
4. Catat rentang gerak untuk setiap sendi
5. Simpan kalibrasi

#### konfigurasi[[lerobot.robots.openarm_follower.OpenArmFollower.configure]]

```python
configure()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/openarm_follower.py#L215)

Konfigurasikan motor dengan pengaturan yang sesuai.

#### connect[[lerobot.robots.openarm_follower.OpenArmFollower.connect]]

```python
connect(calibrate: bool = True)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/openarm_follower.py#L130)

Hubungkan ke robot dan kalibrasi secara opsional.

Kami mengasumsikan bahwa pada saat koneksi, lengan berada dalam posisi istirahat yang aman, dan torsi dapat dinonaktifkan dengan aman untuk menjalankan kalibrasi jika diperlukan.

#### putuskan[[lerobot.robots.openarm_follower.OpenArmFollower.disconnect]]

```python
disconnect()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/openarm_follower.py#L345)

Putuskan koneksi dari robot.

#### get_observation[[lerobot.robots.openarm_follower.OpenArmFollower.get_observation]]

```python
get_observation()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/openarm_follower.py#L226)

Dapatkan observasi saat ini dari robot, termasuk posisi, kecepatan, dan torsi.

Membaca semua status motor (pos/vel/torque) dalam satu siklus refresh CAN, bukan 3 bacaan terpisah.

#### send_action[[lerobot.robots.openarm_follower.OpenArmFollower.send_action]]

```python
send_action(action: dict, custom_kp: dict[str, float] | None = None, custom_kd: dict[str, float] | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/openarm_follower.py#L266)

**Parameter:**

action : Dictionary dengan posisi motor (misalnya, "joint_1.pos", "joint_2.pos")

custom_kp : Kustom kp gains opsional per motor (misalnya, {"joint_1": 120.0, "joint_2": 150.0})

custom_kd : Kustom kd gains opsional per motor (misalnya, {"joint_1": 1.5, "joint_2": 2.0})

**Mengembalikan:**

Aksi yang sebenarnya dikirim (mungkin dipangkas)

Kirim perintah aksi ke robot.

Magnitudo aksi dapat dipangkas berdasarkan batas keamanan.

#### lerobot.robots.openarm_follower.OpenArmFollowerConfig[[lerobot.robots.openarm_follower.OpenArmFollowerConfig]]

```python
lerobot.robots.openarm_follower.OpenArmFollowerConfig(port: str, side: str | None = None, can_interface: str = 'socketcan', use_can_fd: bool = True, can_bitrate: int = 1000000, can_data_bitrate: int = 5000000, disable_torque_on_disconnect: bool = True, use_velocity_and_torque: bool = False, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, motor_config: dict = <factory>, position_kp: list = <factory>, position_kd: list = <factory>, joint_limits: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/openarm_follower/config_openarm_follower.py#L125)

## BiOpenArmFollower[[lerobot.robots.bi_openarm_follower.BiOpenArmFollower]]

#### lerobot.robots.bi_openarm_follower.BiOpenArmFollower[[lerobot.robots.bi_openarm_follower.BiOpenArmFollower]]

```python
lerobot.robots.bi_openarm_follower.BiOpenArmFollower(config: BiOpenArmFollowerConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/bi_openarm_follower/bi_openarm_follower.py#L31)

Lengan Follower Bimanual OpenArm

#### lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig[[lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig]]

```python
lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig(id: str | None = 'bi_openarm_follower', calibration_dir: pathlib.Path | None = None, left_arm_config: OpenArmFollowerConfigBase, right_arm_config: OpenArmFollowerConfigBase, cameras: dict = <factory>)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/bi_openarm_follower/config_bi_openarm_follower.py#L27)

Kelas konfigurasi untuk robot Bi OpenArm Follower.

## OmxFollower[[lerobot.robots.omx_follower.OmxFollower]]

#### lerobot.robots.omx_follower.OmxFollower[[lerobot.robots.omx_follower.OmxFollower]]

```python
lerobot.robots.omx_follower.OmxFollower(config: OmxFollowerConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/omx_follower/omx_follower.py#L33)

- [OMX](https://github.com/ROBOTIS-GIT/open_manipulator), ekspansi, dikembangkan oleh Woojin Wie dan Junha Cha dari [ROBOTIS](https://ai.robotis.com/)

#### connect[[lerobot.robots.omx_follower.OmxFollower.connect]]

```python
connect(calibrate: bool = True)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/omx_follower/omx_follower.py#L89)

Untuk robot OMX yang sudah dikalibrasi sebelumnya:
- Jika kalibrasi bawaan dari paket tidak sesuai dengan motor, baca dari motor dan simpan
- Hal ini memungkinkan penggunaan robot yang telah dikalibrasi sebelumnya tanpa kalibrasi manual
- Jika tidak ada file kalibrasi, gunakan nilai bawaan pabrik (homing_offset=0, range_min=0, range_max=4095)

#### send_action[[lerobot.robots.omx_follower.OmxFollower.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/omx_follower/omx_follower.py#L190)

**Parameter:**

action (RobotAction) : Posisi tujuan untuk motor.

**Mengembalikan:** `RobotAction`

Aksi yang dikirim ke motor, yang mungkin dipangkas.

Perintahkan lengan untuk bergerak ke konfigurasi sendi target.

Besaran aksi relatif dapat dipangkas (clipped) tergantung pada parameter konfigurasi `max_relative_target`. Dalam kasus ini, aksi yang dikirim berbeda dari aksi asli. Oleh karena itu, fungsi ini selalu mengembalikan aksi yang benar-benar dikirim.

#### lerobot.robots.omx_follower.OmxFollowerConfig[[lerobot.robots.omx_follower.OmxFollowerConfig]]

```python
lerobot.robots.omx_follower.OmxFollowerConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = False, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/omx_follower/config_omx_follower.py#L24)

## Reachy2Robot[[lerobot.robots.reachy2.Reachy2Robot]]

#### lerobot.robots.reachy2.Reachy2Robot[[lerobot.robots.reachy2.Reachy2Robot]]

```python
lerobot.robots.reachy2.Reachy2Robot(config: Reachy2RobotConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/reachy2/robot_reachy2.py#L75)

[Reachy 2](https://www.pollen-robotics.com/reachy/), oleh Pollen Robotics.

#### lerobot.robots.reachy2.Reachy2RobotConfig[[lerobot.robots.reachy2.Reachy2RobotConfig]]

```python
lerobot.robots.reachy2.Reachy2RobotConfig(max_relative_target: float | None = None, ip_address: str | None = 'localhost', port: int = 50065, disable_torque_on_disconnect: bool = False, use_external_commands: bool = False, with_mobile_base: bool = True, with_l_arm: bool = True, with_r_arm: bool = True, with_neck: bool = True, with_antennas: bool = True, with_left_teleop_camera: bool = False, with_right_teleop_camera: bool = False, with_torso_camera: bool = False, camera_width: int = 640, camera_height: int = 480, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/reachy2/configuration_reachy2.py#L25)

## UnitreeG1[[lerobot.robots.unitree_g1.UnitreeG1]]

#### lerobot.robots.unitree_g1.UnitreeG1[[lerobot.robots.unitree_g1.UnitreeG1]]

```python
lerobot.robots.unitree_g1.UnitreeG1(config: UnitreeG1Config)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/unitree_g1/unitree_g1.py#L155)

#### lerobot.robots.unitree_g1.UnitreeG1Config[[lerobot.robots.unitree_g1.UnitreeG1Config]]

```python
lerobot.robots.unitree_g1.UnitreeG1Config(kp: list[float] | None = None, kd: list[float] | None = None, default_positions: list = <factory>, control_dt: float = 0.004, is_simulation: bool = True, end_effector: G1EndEffector = <G1EndEffector.DEX1: 'dex1'>, sim_publish_images: bool = True, sim_camera_port: int = 5555, sim_onscreen: bool | None = None, robot_ip: str = '192.168.123.164', cameras: dict = <factory>, gravity_compensation: bool = False, controller: str | None = None, embodiment: str = 'g1_29', id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/unitree_g1/config_unitree_g1.py#L30)

## Hope Jr[[lerobot.robots.hope_jr.HopeJrArm]]

Humanoid Hope Jr diekspos sebagai dua robot independen, yaitu lengan dan tangan.

#### lerobot.robots.hope_jr.HopeJrArm[[lerobot.robots.hope_jr.HopeJrArm]]

```python
lerobot.robots.hope_jr.HopeJrArm(config: HopeJrArmConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/hope_jr/hope_jr_arm.py#L34)

#### connect[[lerobot.robots.hope_jr.HopeJrArm.connect]]

```python
connect(calibrate: bool = True)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/hope_jr/hope_jr_arm.py#L88)

Kami mengasumsikan bahwa pada saat koneksi, lengan berada dalam posisi istirahat, dan torsi dapat dinonaktifkan dengan aman untuk menjalankan kalibrasi.

#### lerobot.robots.hope_jr.HopeJrArmConfig[[lerobot.robots.hope_jr.HopeJrArmConfig]]

```python
lerobot.robots.hope_jr.HopeJrArmConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/hope_jr/config_hope_jr.py#L42)

#### lerobot.robots.hope_jr.HopeJrHand[[lerobot.robots.hope_jr.HopeJrHand]]

```python
lerobot.robots.hope_jr.HopeJrHand(config: HopeJrHandConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/hope_jr/hope_jr_hand.py#L58)

#### lerobot.robots.hope_jr.HopeJrHandConfig[[lerobot.robots.hope_jr.HopeJrHandConfig]]

```python
lerobot.robots.hope_jr.HopeJrHandConfig(port: str, side: str, disable_torque_on_disconnect: bool = True, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/hope_jr/config_hope_jr.py#L26)

## RebotB601Follower[[lerobot.robots.rebot_b601_follower.RebotB601Follower]]

#### lerobot.robots.rebot_b601_follower.RebotB601Follower[[lerobot.robots.rebot_b601_follower.RebotB601Follower]]

```python
lerobot.robots.rebot_b601_follower.RebotB601Follower(config: RebotB601FollowerRobotConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L62)

Lengan pengikut Seeed Studio reBot B601 (6-DOF + gripper, motor CAN).

Komunikasi motor ditangani oleh paket `motorbridge` melalui bus CAN, yang diakses baik melalui jembatan serial Damiao maupun transport CAN native dari MotorBridge.

#### konfigurasi[[lerobot.robots.rebot_b601_follower.RebotB601Follower.configure]]

```python
configure()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L224)

Atur mode kontrol setiap motor sebelum mengaktifkan torsi.

#### disable_torque[[lerobot.robots.rebot_b601_follower.RebotB601Follower.disable_torque]]

```python
disable_torque()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L245)

Nonaktifkan torsi motor agar lengan dapat digerakkan secara manual (debugging hanya-baca).

#### putuskan[[lerobot.robots.rebot_b601_follower.RebotB601Follower.disconnect]]

```python
disconnect()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L444)

Lepaskan motor dan kamera dari robot.

#### send_action[[lerobot.robots.rebot_b601_follower.RebotB601Follower.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L313)

Perintahkan lengan ke konfigurasi sendi target.

Posisi dinyatakan dalam derajat. Magnitudo aksi relatif dapat dipangkas tergantung pada `max_relative_target`, sehingga aksi yang benar-benar dikirim selalu dikembalikan.

#### lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig[[lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig]]

```python
lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig(port: str, motor_family: MotorFamily = <MotorFamily.DM: 'dm'>, can_adapter: str | None = None, dm_serial_baud: int = 921600, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, motor_can_ids: dict[str, tuple[int, int]] | None = None, control_mode: ArmControlMode = <ArmControlMode.MIT: 'mit'>, gripper_control_mode: lerobot.robots.rebot_b601_follower.motor_family.GripperControlMode | None = None, mit_kp: float | dict[str, float] | None = None, mit_kd: float | dict[str, float] | None = None, pos_vel_velocity: float | dict[str, float] | None = None, gripper_torque_ratio: float | None = None, gripper_torque_limit: float | None = None, gripper_hold_torque_limit: float | None = None, joint_limits: dict[str, tuple[float, float]] | None = None, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/rebot_b601_follower/config_rebot_b601_follower.py#L119)

Konfigurasi terdaftar untuk robot pengikut reBot B601.

## BiRebotB601Follower[[lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower]]

#### lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower[[lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower]]

```python
lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower(config: BiRebotB601FollowerConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/bi_rebot_b601_follower/bi_rebot_b601_follower.py#L28)

Follower Bimanual Seeed Studio reBot B601.

Menggabungkan dua instans `RebotB601Follower` lengan tunggal. Kunci observasi dan aksi dari masing-masing lengan diberi ruang nama dengan awalan `left_` / `right_`.

#### lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig[[lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig]]

```python
lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig(left_arm_config: RebotB601FollowerConfig, right_arm_config: RebotB601FollowerConfig, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/bi_rebot_b601_follower/config_bi_rebot_b601_follower.py#L27)

Kelas konfigurasi untuk robot pengikut bimanual reBot B601.

## EarthRoverMiniPlus[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus]]

#### lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus]]

```python
lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus(config: EarthRoverMiniPlusConfig)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L73)

**Parameter:**

config : Konfigurasi robot

sdk_base_url : URL dasar server Frodobots SDK, diambil dari `config.sdk_url` (default: http://localhost:8000)

Robot EarthRover Mini Plus yang dikendalikan melalui API HTTP Frodobots SDK.

Robot ini menggunakan kontrol berbasis cloud melalui Frodobots SDK alih-alih koneksi langsung ke perangkat keras. Kamera melakukan streaming melalui cloud Agora via WebRTC, dan perintah kontrol dikirim melalui permintaan HTTP POST.

Robot mendukung:
- Kamera ganda (depan dan belakang) diakses melalui endpoint HTTP SDK
- Kontrol kecepatan linear dan sudut
- Telemetri baterai dan orientasi

#### kalibrasi[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.calibrate]]

```python
calibrate()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L153)

Kalibrasi tidak diperlukan untuk robot berbasis SDK.

#### konfigurasi[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.configure]]

```python
configure()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L166)

Konfigurasi robot (no-op untuk robot berbasis SDK).

#### connect[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.connect]]

```python
connect(calibrate: bool = True)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L124)

**Parameter:**

calibrate : Tidak digunakan untuk robot berbasis SDK (dipertahankan untuk kompatibilitas API)

**Mengangkat:** ``DeviceAlreadyConnectedError`` atau ``DeviceNotConnectedError``

- ``DeviceAlreadyConnectedError`` -- Jika robot sudah terhubung
- ``DeviceNotConnectedError`` -- Jika tidak dapat terhubung ke server SDK

Hubungkan ke robot melalui Frodobots SDK.

#### putuskan[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.disconnect]]

```python
disconnect()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L366)

**Mengangkat:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- Jika robot tidak terhubung

Putuskan koneksi dari robot.

Menghentikan robot dan menutup koneksi ke SDK.

#### get_observation[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.get_observation]]

```python
get_observation()
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L248)

**Mengembalikan:** `RobotObservation`

Observasi yang berisi:
- front: Gambar kamera depan (480, 640, 3) dalam format RGB
- rear: Gambar kamera belakang (480, 640, 3) dalam format RGB
- speed: float - Kecepatan saat ini (nilai SDK mentah)
- battery_level: float - Level baterai (0-100)
- orientation: float - Orientasi robot dalam derajat
- gps_latitude: float - koordinat lintang GPS
- gps_longitude: float - koordinat bujur GPS
- gps_signal: float - kekuatan sinyal GPS (persentase)
- signal_level: float - Level sinyal jaringan (0-5)
- vibration: float - Pembacaan sensor getaran
- lamp: float - Status lampu (0=mati, 1=nyala)
- accelerometer_x/y/z: float - Sumbu akselerometer (nilai SDK mentah)
- gyroscope_x/y/z: float - Sumbu giroskop (nilai SDK mentah)
- magnetometer_filtered_x/y/z: float - Sumbu magnetometer (nilai SDK mentah)
- wheel_rpm_0/1/2/3: float - RPM roda

**Mengangkat:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- Jika robot tidak terhubung

Dapatkan observasi robot saat ini dari SDK.

Frame kamera diambil dari endpoint SDK /v2/front dan /v2/rear. Frame didekode dari base64 dan dikonversi dari format BGR ke RGB. Telemetri robot diambil dari endpoint /data. Array sensor (accels, gyros, mags, rpms) masing-masing berisi entri [values..., timestamp]; pembacaan terbaru dari setiap array yang digunakan.

Catatan: Bingkai kamera diambil dari endpoint SDK /v2/front dan /v2/rear. Bingkai didekode dari base64 dan dikonversi dari format BGR ke RGB. Telemetri robot diambil dari endpoint /data. Semua nilai SDK dinormalisasi ke rentang yang sesuai untuk perekaman dataset.

#### send_action[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.send_action]]

```python
send_action(action: dict)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L334)

**Parameter:**

action : Dict aksi dengan kunci: - linear_velocity: Kecepatan linear target (-1 hingga 1) - angular_velocity: Kecepatan sudut target (-1 hingga 1)

**Mengembalikan:** `RobotAction`

Aksi yang dikirim (cocok dengan kunci action_features)

**Mengangkat:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- Jika robot tidak terhubung

Kirim aksi ke robot melalui SDK.

Catatan: Aksi dikirim ke SDK melalui endpoint POST /control. SDK mengharapkan perintah dalam rentang [-1, 1].

#### lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig]]

```python
lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig(sdk_url: str = 'http://localhost:8000', id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[Sumber](https://github.com/huggingface/lerobot/blob/v0.7.0/src/lerobot/robots/earthrover_mini_plus/config_earthrover_mini_plus.py#L25)

**Parameter:**

sdk_url : URL server Frodobots SDK (default: http://localhost:8000)

Konfigurasi untuk robot EarthRover Mini Plus menggunakan Frodobots SDK.

Robot ini menggunakan kontrol berbasis cloud melalui API HTTP Frodobots SDK. Bingkai kamera diakses langsung melalui endpoint HTTP SDK.

