# Robots

Mọi robot trong LeRobot đều triển khai giao diện `Robot`: kết nối, đọc quan sát, gửi hành động, ngắt kết nối. Việc viết một chính sách hoặc một kịch bản ghi hình dựa trên giao diện đó có nghĩa là nó hoạt động với bất kỳ cánh tay nào được hỗ trợ mà không cần thay đổi.

Trang này là tài liệu tham khảo được tạo tự động. Để biết hướng dẫn về kết nối, hiệu chuẩn và chạy lần đầu, hãy bắt đầu với các hướng dẫn phần cứng — [SO-101](../so101), [LeKiwi](../lekiwi), [Hope Jr](../hope_jr), [Reachy 2](../reachy2), [OpenArm](../openarm) — hoặc [Imitation Learning for Robots](../il_robots) cho quy trình từ đầu đến cuối. Đối với các robot do cộng đồng duy trì nằm ngoài bộ lõi, xem [Third-Party Robots & Teleoperators](../third_party_robots). Để thêm robot của riêng bạn, xem [Bring Your Own Hardware](../integrate_hardware).

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

Lớp trừu tượng. Các lớp con triển khai mọi phương thức bên dưới; hợp đồng được mô tả tại đây là những gì một chính sách hoặc vòng lặp ghi hình có thể dựa vào.

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

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

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

**Tham số:**

config_class (RobotConfig) : Lớp cấu hình dự kiến cho robot này.

name (str) : Tên robot duy nhất được sử dụng để xác định loại robot này.

Lớp trừu tượng cơ bản cho tất cả các robot tương thích với LeRobot.

Lớp này cung cấp một giao diện chuẩn hóa để tương tác với các robot vật lý. Các lớp con phải triển khai tất cả các phương thức và thuộc tính trừu tượng để có thể sử dụng được.

#### kết nối[[lerobot.robots.Robot.connect]]

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

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

**Tham số:**

calibrate (bool) : Nếu là True, tự động hiệu chuẩn robot sau khi kết nối nếu nó chưa được hiệu chuẩn hoặc cần hiệu chuẩn (điều này phụ thuộc vào phần cứng).

Thiết lập liên lạc với robot.

#### ngắt kết nối[[lerobot.robots.Robot.disconnect]]

```python
disconnect()
```

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

Ngắt kết nối với robot và thực hiện các bước dọn dẹp cần thiết.

#### cấu hình[[lerobot.robots.Robot.configure]]

```python
configure()
```

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

Áp dụng bất kỳ cấu hình nào chỉ thực hiện một lần hoặc trong thời gian chạy cho robot. Điều này có thể bao gồm việc thiết lập các tham số động cơ, chế độ điều khiển hoặc trạng thái ban đầu.

#### hiệu chuẩn[[lerobot.robots.Robot.calibrate]]

```python
calibrate()
```

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

Hiệu chuẩn robot nếu có thể. Nếu không, đây sẽ là một thao tác không làm gì.

Phương pháp này nên thu thập bất kỳ dữ liệu cần thiết nào (ví dụ: độ lệch động cơ) và cập nhật từ điển :pyattr:`calibration` cho phù hợp.

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

```python
get_observation()
```

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

**Trả về:** `RobotObservation`

Một từ điển phẳng đại diện cho trạng thái cảm giác hiện tại của robot. Cấu trúc của nó phải khớp với :pymeth:`observation_features`.

Lấy quan sát hiện tại từ robot.

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

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

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

**Tham số:**

action (RobotAction) : Từ điển đại diện cho hành động mong muốn. Cấu trúc của nó phải khớp với :pymeth:`action_features`.

**Trả về:** `RobotAction`

Hành động thực tế được gửi đến các động cơ, có thể đã bị cắt hoặc chỉnh sửa, ví dụ như do các giới hạn an toàn về tốc độ.

Gửi lệnh hành động đến robot.

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

```python
observation_features()
```

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

Một từ điển mô tả cấu trúc và kiểu của các quan sát do robot tạo ra. Cấu trúc (các khóa) của nó phải khớp với cấu trúc của giá trị được trả về bởi :pymeth:`get_observation`. Giá trị trong từ điển phải là một trong các loại sau:
- Loại của giá trị nếu đó là một giá trị đơn giản, ví dụ `float` cho một giá trị cảm giác chủ vận đơn (vị trí/tốc độ của một khớp)
- Một tuple đại diện cho hình dạng nếu đó là giá trị kiểu mảng, ví dụ `(height, width, channel)` cho ảnh

Lưu ý: thuộc tính này phải có thể được gọi bất kể robot có được kết nối hay không.

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

```python
action_features()
```

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

Một từ điển mô tả cấu trúc và kiểu của các hành động mà robot được kỳ vọng thực hiện. Cấu trúc (các khóa) của nó phải khớp với cấu trúc của đối tượng được truyền vào :pymeth:`send_action`. Giá trị trong từ điển nên là kiểu của giá trị nếu đó là một giá trị đơn giản, ví dụ `float` cho một giá trị cảm nhận bản thân đơn lẻ (vị trí/tốc độ mục tiêu của một khớp)

Lưu ý: thuộc tính này phải có thể được gọi bất kể robot có được kết nối hay không.

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

```python
is_connected()
```

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

Trạng thái kết nối hiện tại của robot. Nếu `False`, việc gọi :pymeth:`get_observation` hoặc :pymeth:`send_action` sẽ gây ra lỗi.

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

```python
is_calibrated()
```

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

Trạng thái robot hiện tại đã được hiệu chuẩn hay chưa. Nên luôn là `True` nếu không áp dụng

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

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

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

[Nguồn](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)
```

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

## Người theo dõi SO-100 và SO-101[[lerobot.robots.so_follower.SOFollower]]

`SO100Follower` và `SO101Follower` là các tên gọi khác của cùng một lớp `SOFollower`; hai cánh tay khác nhau ở cấu hình, không phải ở mã điều khiển. `SO100FollowerConfig` và `SO101FollowerConfig` cũng tương tự là các tên gọi khác của `SOFollowerRobotConfig`.

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

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

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

Cơ sở SO follower chung, triển khai các chức năng phổ biến cho SO-100/101/10X. Được thiết kế để kế thừa với `config_class` và `name` riêng cho từng mô hình phần cứng.

#### kết nối[[lerobot.robots.so_follower.SOFollower.connect]]

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

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

Chúng tôi giả định rằng tại thời điểm kết nối, cánh tay đang ở vị trí nghỉ và mô-men xoắn có thể được tắt một cách an toàn để chạy hiệu chuẩn.

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

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

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

**Trả về:** `RobotAction`

hành động được gửi đến các động cơ, có thể đã bị cắt.

**Lỗi:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- nếu robot không được kết nối.

Lệnh cánh tay di chuyển đến cấu hình khớp đích.

Độ lớn tương đối của hành động có thể bị cắt (clip) tùy thuộc vào tham số cấu hình `max_relative_target`. Trong trường hợp này, hành động được gửi đi sẽ khác với hành động ban đầu. Do đó, hàm này luôn trả về hành động thực tế đã được gửi đi.

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

[Nguồn](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]]

Hai người theo dõi SO được điều khiển như một robot hai tay.

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

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

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

[Cánh tay SO Follower hai tay](https://github.com/TheRobotStudio/SO-ARM100) do TheRobotStudio thiết kế

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

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

Lớp cấu hình cho 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)
```

[Nguồn](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), có và không có phần mở rộng từ cổ tay đến khuỷu tay, do Alexander Koch từ [Tau Robotics](https://tau-robotics.com) phát triển
- [Koch v1.1](https://github.com/jess-moss/koch-v1-1) do Jess Moss phát triển

#### kết nối[[lerobot.robots.koch_follower.KochFollower.connect]]

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

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

Chúng tôi giả định rằng tại thời điểm kết nối, cánh tay đang ở vị trí nghỉ và mô-men xoắn có thể được tắt một cách an toàn để chạy hiệu chuẩn.

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

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

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

**Tham số:**

action (RobotAction) : Các vị trí đích cho các động cơ.

**Trả về:** `RobotAction`

Hành động được gửi đến các động cơ, có thể đã bị cắt.

Lệnh cánh tay di chuyển đến cấu hình khớp đích.

Độ lớn tương đối của hành động có thể bị cắt (clip) tùy thuộc vào tham số cấu hình `max_relative_target`. Trong trường hợp này, hành động được gửi đi sẽ khác với hành động ban đầu. Do đó, hàm này luôn trả về hành động thực tế đã được gửi đi.

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

[Nguồn](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` chạy ngay trên robot. `LeKiwiClient` là proxy phía host, giao tiếp với nó qua mạng và cung cấp cùng một giao diện `Robot`.

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

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

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

Robot bao gồm một đế di chuyển ba bánh omniwheel và một cánh tay theo dõi từ xa. Cánh tay dẫn được kết nối cục bộ (trên laptop) và vị trí các khớp của nó được ghi lại, sau đó được chuyển đến cánh tay theo dõi từ xa (sau khi áp dụng kẹp an toàn). Song song, điều khiển từ xa bằng bàn phím được sử dụng để tạo ra các lệnh vận tốc thô cho các bánh xe.

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

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

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

**Trả về:** `RobotAction`

hành động được gửi đến các động cơ, có thể đã bị cắt.

**Lỗi:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- nếu robot không được kết nối.

Lệnh cho lekiwi di chuyển đến cấu hình khớp đích.

Độ lớn tương đối của hành động có thể bị cắt (clip) tùy thuộc vào tham số cấu hình `max_relative_target`. Trong trường hợp này, hành động được gửi đi sẽ khác với hành động ban đầu. Do đó, hàm này luôn trả về hành động thực tế đã được gửi đi.

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

[Nguồn](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)
```

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

#### kết nối[[lerobot.robots.lekiwi.LeKiwiClient.connect]]

```python
connect()
```

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

Thiết lập các socket ZMQ với robot di động từ xa

#### ngắt kết nối[[lerobot.robots.lekiwi.LeKiwiClient.disconnect]]

```python
disconnect()
```

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

Dọn dẹp liên lạc ZMQ

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

```python
get_observation()
```

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

Thu thập các quan sát từ robot từ xa: vị trí hiện tại của cánh tay follower, tốc độ bánh xe hiện tại (được chuyển đổi thành vận tốc trong hệ tọa độ thân robot: x, y, theta) và một khung hình từ camera. Nhận dữ liệu qua ZMQ, chuyển đổi sang vận tốc

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

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

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

**Tham số:**

action (RobotAction) : mảng chứa các vị trí đích cho các động cơ.

**Trả về:** `np.ndarray`

hành động được gửi đến các động cơ, có thể đã bị cắt.

**Lỗi:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- nếu robot không được kết nối.

Lệnh cho lekiwi di chuyển đến cấu hình khớp đích. Chuyển đổi sang không gian động cơ + gửi qua 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)
```

[Nguồn](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)
```

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

Robot OpenArms Follower sử dụng giao tiếp bus CAN để điều khiển cánh tay 7 bậc tự do (DOF) kèm kẹp. Cánh tay sử dụng động cơ Damiao ở chế độ điều khiển MIT.

#### hiệu chuẩn[[lerobot.robots.openarm_follower.OpenArmFollower.calibrate]]

```python
calibrate()
```

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

Chạy quy trình hiệu chuẩn cho robot OpenArms.

Quy trình hiệu chuẩn:
1. Tắt mô-men xoắn
2. Yêu cầu người dùng đặt tay ở tư thế treo với kẹp đã đóng
3. Đặt vị trí này làm vị trí zero
4. Ghi lại phạm vi chuyển động của từng khớp
5. Lưu hiệu chuẩn

#### cấu hình[[lerobot.robots.openarm_follower.OpenArmFollower.configure]]

```python
configure()
```

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

Cấu hình các động cơ với các cài đặt phù hợp.

#### kết nối[[lerobot.robots.openarm_follower.OpenArmFollower.connect]]

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

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

Kết nối với robot và tùy chọn hiệu chuẩn.

Chúng tôi giả định rằng tại thời điểm kết nối, các cánh tay đang ở vị trí nghỉ an toàn và mô-men xoắn có thể được tắt một cách an toàn để chạy hiệu chuẩn nếu cần.

#### ngắt kết nối[[lerobot.robots.openarm_follower.OpenArmFollower.disconnect]]

```python
disconnect()
```

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

Ngắt kết nối với robot.

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

```python
get_observation()
```

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

Lấy quan sát hiện tại từ robot bao gồm vị trí, vận tốc và mô-men xoắn.

Đọc tất cả các trạng thái động cơ (pos/vel/torque) trong một chu kỳ làm mới CAN thay vì 3 lần đọc riêng biệt.

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

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

**Tham số:**

action : Từ điển chứa các vị trí động cơ (ví dụ: "joint_1.pos", "joint_2.pos")

custom_kp : Hệ số kp tùy chỉnh tùy chọn cho từng động cơ (ví dụ: {"joint_1": 120.0, "joint_2": 150.0})

custom_kd : Hệ số tăng ích kd tùy chỉnh cho từng động cơ (ví dụ: {"joint_1": 1.5, "joint_2": 2.0})

**Trả về:**

Hành động thực tế được gửi đi (có thể đã bị cắt bớt)

Gửi lệnh hành động đến robot.

Biên độ hành động có thể bị cắt bớt dựa trên các giới hạn an toàn.

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

[Nguồn](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)
```

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

Cánh tay Follower OpenArm hai tay

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

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

Lớp cấu hình cho 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)
```

[Nguồn](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), bản mở rộng, do Woojin Wie và Junha Cha từ [ROBOTIS](https://ai.robotis.com/) phát triển

#### kết nối[[lerobot.robots.omx_follower.OmxFollower.connect]]

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

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

Đối với các robot OMX được hiệu chỉnh sẵn:
- Nếu hiệu chuẩn mặc định từ gói không khớp với động cơ, hãy đọc từ động cơ và lưu lại
- Điều này cho phép sử dụng các robot đã được hiệu chuẩn trước mà không cần hiệu chuẩn thủ công
- Nếu không có tệp hiệu chuẩn, hãy sử dụng các giá trị mặc định của nhà sản xuất (homing_offset=0, range_min=0, range_max=4095)

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

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

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

**Tham số:**

action (RobotAction) : Các vị trí đích cho các động cơ.

**Trả về:** `RobotAction`

Hành động được gửi đến các động cơ, có thể đã bị cắt.

Lệnh cánh tay di chuyển đến cấu hình khớp đích.

Độ lớn tương đối của hành động có thể bị cắt (clip) tùy thuộc vào tham số cấu hình `max_relative_target`. Trong trường hợp này, hành động được gửi đi sẽ khác với hành động ban đầu. Do đó, hàm này luôn trả về hành động thực tế đã được gửi đi.

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

[Nguồn](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)
```

[Nguồn](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/), do Pollen Robotics phát triển.

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

[Nguồn](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)
```

[Nguồn](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)
```

[Nguồn](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 được hiển thị dưới dạng hai robot độc lập, một cánh tay và một bàn tay.

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

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

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

#### kết nối[[lerobot.robots.hope_jr.HopeJrArm.connect]]

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

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

Chúng tôi giả định rằng tại thời điểm kết nối, cánh tay đang ở vị trí nghỉ và mô-men xoắn có thể được tắt một cách an toàn để chạy hiệu chuẩn.

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

[Nguồn](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)
```

[Nguồn](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)
```

[Nguồn](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)
```

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

Cánh tay theo dõi reBot B601 của Seeed Studio (6-DOF + kẹp, động cơ CAN).

Giao tiếp với động cơ được xử lý bởi gói `motorbridge` qua bus CAN, được truy cập thông qua cầu nối serial Damiao hoặc phương thức truyền CAN gốc của MotorBridge.

#### cấu hình[[lerobot.robots.rebot_b601_follower.RebotB601Follower.configure]]

```python
configure()
```

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

Đặt chế độ điều khiển của mỗi động cơ trước khi bật mô-men xoắn.

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

```python
disable_torque()
```

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

Tắt mô-men xoắn động cơ để cánh tay có thể được di chuyển bằng tay (chỉ đọc để gỡ lỗi).

#### ngắt kết nối[[lerobot.robots.rebot_b601_follower.RebotB601Follower.disconnect]]

```python
disconnect()
```

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

Ngắt kết nối động cơ và camera khỏi robot.

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

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

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

Điều khiển cánh tay đến cấu hình khớp đích.

Các vị trí được biểu diễn bằng độ. Biên độ hành động tương đối có thể bị cắt (clip) tùy thuộc vào `max_relative_target`, do đó hành động thực tế được gửi luôn được trả về.

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

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

Cấu hình đã đăng ký cho robot theo dõi 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)
```

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

Bimanual Seeed Studio reBot B601 follower.

Kết hợp hai instance `RebotB601Follower` đơn tay. Các khóa quan sát và hành động của mỗi tay được đặt trong namespace với tiền tố `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)
```

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

Lớp cấu hình cho robot theo dõi 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)
```

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

**Tham số:**

config : Cấu hình robot

sdk_base_url : URL gốc của máy chủ SDK Frodobots, lấy từ `config.sdk_url` (mặc định: http://localhost:8000)

Robot EarthRover Mini Plus được điều khiển qua API HTTP của Frodobots SDK.

Robot này sử dụng điều khiển dựa trên đám mây thông qua Frodobots SDK thay vì kết nối trực tiếp với phần cứng. Camera được phát trực tiếp qua đám mây Agora bằng WebRTC, và các lệnh điều khiển được gửi qua các yêu cầu HTTP POST.

Robot hỗ trợ:
- Hai camera (trước và sau) được truy cập qua các điểm cuối HTTP của SDK
- Kiểm soát vận tốc tuyến tính và vận tốc góc
- Dữ liệu đo lường pin và hướng

#### hiệu chuẩn[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.calibrate]]

```python
calibrate()
```

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

Không cần hiệu chuẩn cho robot dựa trên SDK.

#### cấu hình[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.configure]]

```python
configure()
```

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

Cấu hình robot (không thực hiện thao tác gì với robot dựa trên SDK).

#### kết nối[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.connect]]

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

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

**Tham số:**

calibrate : Không được sử dụng cho robot dựa trên SDK (giữ lại để tương thích với API)

**Gây ra:** ``DeviceAlreadyConnectedError`` hoặc ``DeviceNotConnectedError``

- ``DeviceAlreadyConnectedError`` -- Nếu robot đã được kết nối
- ``DeviceNotConnectedError`` -- Nếu không thể kết nối với máy chủ SDK

Kết nối với robot thông qua Frodobots SDK.

#### ngắt kết nối[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.disconnect]]

```python
disconnect()
```

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

**Lỗi:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- Nếu robot không được kết nối

Ngắt kết nối với robot.

Dừng robot và đóng kết nối với SDK.

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

```python
get_observation()
```

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

**Trả về:** `RobotObservation`

Quan sát bao gồm:
- front: Ảnh từ camera phía trước (480, 640, 3) ở định dạng RGB
- rear: Ảnh từ camera phía sau (480, 640, 3) ở định dạng RGB
- speed: float - Tốc độ hiện tại (giá trị SDK thô)
- battery_level: float - Mức pin (0-100)
- orientation: float - Hướng của robot tính bằng độ
- gps_latitude: float - Tọa độ vĩ độ GPS
- gps_longitude: float - Tọa độ kinh độ GPS
- gps_signal: float - cường độ tín hiệu GPS (phần trăm)
- signal_level: float - Mức tín hiệu mạng (0-5)
- vibration: float - Giá trị cảm biến rung
- lamp: float - Trạng thái đèn (0=tắt, 1=bật)
- accelerometer_x/y/z: float - Các trục của gia tốc kế (giá trị SDK thô)
- gyroscope_x/y/z: float - Các trục của cảm biến gia tốc (giá trị SDK thô)
- magnetometer_filtered_x/y/z: float - Các trục của bộ đo từ trường (giá trị SDK thô)
- wheel_rpm_0/1/2/3: float - Vòng/phút của bánh xe

**Lỗi:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- Nếu robot không được kết nối

Lấy quan sát hiện tại của robot từ SDK.

Các khung hình từ camera được lấy từ các endpoint SDK /v2/front và /v2/rear. Các khung hình được giải mã từ base64 và chuyển đổi từ định dạng BGR sang RGB. Telemetry của robot được lấy từ endpoint /data. Các mảng cảm biến (accels, gyros, mags, rpms) mỗi mảng chứa các mục có dạng [values..., timestamp]; giá trị đọc mới nhất từ mỗi mảng được sử dụng.

Lưu ý: Các khung hình từ camera được lấy từ các endpoint /v2/front và /v2/rear của SDK. Các khung hình được giải mã từ base64 và chuyển đổi từ định dạng BGR sang RGB. Telemetry của robot được lấy từ endpoint /data. Tất cả các giá trị từ SDK được chuẩn hóa về các khoảng giá trị phù hợp cho việc ghi lại dataset.

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

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

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

**Tham số:**

action : Từ điển hành động với các khóa: - linear_velocity: Tốc độ tuyến tính mục tiêu (-1 đến 1) - angular_velocity: Tốc độ góc mục tiêu (-1 đến 1)

**Trả về:** `RobotAction`

Hành động đã được gửi (khớp với các khóa của action_features)

**Lỗi:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- Nếu robot không được kết nối

Gửi hành động đến robot thông qua SDK.

Lưu ý: Các hành động được gửi đến SDK thông qua endpoint POST /control. SDK mong đợi các lệnh trong khoảng [-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)
```

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

**Tham số:**

sdk_url : URL của máy chủ Frodobots SDK (mặc định: http://localhost:8000)

Cấu hình cho robot EarthRover Mini Plus sử dụng Frodobots SDK.

Robot này sử dụng điều khiển dựa trên đám mây thông qua API HTTP của Frodobots SDK. Các khung hình từ camera được truy cập trực tiếp thông qua các điểm cuối HTTP của SDK.

