LeRobot documentation
Robots
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, LeKiwi, Hope Jr, Reachy 2, OpenArm — hoặc Imitation Learning for 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. Để thêm robot của riêng bạn, xem Bring Your Own Hardware.
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 policy hoặc vòng lặp ghi nhận có thể dựa vào.
lớp lerobot.robots.Robot
< source >( config: RobotConfig )
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.
connect
< source >( calibrate: bool = True )
Thiết lập liên lạc với robot.
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.
Á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 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
< source >( ) → RobotObservation
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
< source >( action: dict ) → RobotAction
Gửi lệnh hành động đến robot.
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ủa nó (các khóa) 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ụ
floatcho 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.
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ủa nó (các khóa) phải khớp với cấu trúc của dữ liệu được truyền vào :pymeth:send_action. Giá trị trong từ điển phải 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.
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.
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
lớp lerobot.robots.RobotConfig
< source >( id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
make_robot_from_config
Người theo dõi SO-100 và SO-101
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.
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ế để được kế thừa với config_class và name riêng cho từng mô hình phần cứng.
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
< source >( action: dict ) → RobotAction
Trả về
RobotAction
hành động được gửi đến các động cơ, có thể đã bị cắt.
Gây ra
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.
lớp lerobot.robots.so_follower.SOFollowerRobotConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Trueposition_p_coefficient: int = 16position_i_coefficient: int = 0position_d_coefficient: int = 32num_read_retries: int = 2id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
BiSOFollower
Hai người theo dõi SO được điều khiển như một robot hai tay.
Cánh tay SO Follower hai tay do TheRobotStudio thiết kế
lớp lerobot.robots.bi_so_follower.BiSOFollowerConfig
< source >( left_arm_config: SOFollowerConfigright_arm_config: SOFollowerConfigcameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Lớp cấu hình cho robot Bi SO Follower.
KochFollower
- Koch v1.0, có và không có phần mở rộng từ cổ tay đến khuỷu tay, do Alexander Koch từ Tau Robotics phát triển
- Koch v1.1 do Jess Moss phát triển
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
< source >( action: dict ) → RobotAction
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.
lớp lerobot.robots.koch_follower.KochFollowerConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Falseid: str | None = Nonecalibration_dir: pathlib.Path | None = None )
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.
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 rồi đượ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
< source >( action: dict ) → RobotAction
Trả về
RobotAction
hành động được gửi đến các động cơ, có thể đã bị cắt.
Gây ra
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.
lớp lerobot.robots.lekiwi.LeKiwiConfig
< source >( port: str = '/dev/ttyACM0'disable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Truenum_read_retries: int = 2id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Thiết lập các socket ZMQ với robot di động từ xa
Dọn dẹp liên lạc ZMQ
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
send_action
< source >( action: dict ) → np.ndarray
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
lớp lerobot.robots.lekiwi.LeKiwiClientConfig
< source >( remote_ip: strport_zmq_cmd: int = 5555port_zmq_observations: int = 5556teleop_keys: dict = <factory>cameras: dict = <factory>polling_timeout_ms: int = 15connect_timeout_s: int = 5id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
OpenArmFollower
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.
Chạy quy trình hiệu chuẩn cho robot OpenArms.
Quy trình hiệu chuẩn:
- Tắt mô-men xoắn
- Yêu cầu người dùng đặt tay ở tư thế treo với kẹp đã đóng
- Đặt vị trí này làm vị trí zero
- Ghi lại phạm vi chuyển động của từng khớp
- Lưu hiệu chuẩn
Cấu hình các động cơ với các cài đặt phù hợp.
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 với robot.
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 duy nhất thay vì 3 lần đọc riêng biệt.
send_action
< source >( action: dictcustom_kp: dict[str, float] | None = Nonecustom_kd: dict[str, float] | None = None )
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.
lớp lerobot.robots.openarm_follower.OpenArmFollowerConfig
< source >( port: strside: str | None = Nonecan_interface: str = 'socketcan'use_can_fd: bool = Truecan_bitrate: int = 1000000can_data_bitrate: int = 5000000disable_torque_on_disconnect: bool = Trueuse_velocity_and_torque: bool = Falsemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>motor_config: dict = <factory>position_kp: list = <factory>position_kd: list = <factory>joint_limits: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
BiOpenArmFollower
lớp lerobot.robots.bi_openarm_follower.BiOpenArmFollower
< source >( config: BiOpenArmFollowerConfig )
Cánh tay Follower OpenArm hai tay
lớp lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig
< source >( id: str | None = 'bi_openarm_follower'calibration_dir: pathlib.Path | None = Noneleft_arm_config: OpenArmFollowerConfigBaseright_arm_config: OpenArmFollowerConfigBasecameras: dict = <factory> )
Lớp cấu hình cho robot Bi OpenArm Follower.
OmxFollower
Đố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
< source >( action: dict ) → RobotAction
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.
lớp lerobot.robots.omx_follower.OmxFollowerConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Falseid: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Reachy2Robot
Reachy 2, do Pollen Robotics phát triển.
lớp lerobot.robots.reachy2.Reachy2RobotConfig
< source >( max_relative_target: float | None = Noneip_address: str | None = 'localhost'port: int = 50065disable_torque_on_disconnect: bool = Falseuse_external_commands: bool = Falsewith_mobile_base: bool = Truewith_l_arm: bool = Truewith_r_arm: bool = Truewith_neck: bool = Truewith_antennas: bool = Truewith_left_teleop_camera: bool = Falsewith_right_teleop_camera: bool = Falsewith_torso_camera: bool = Falsecamera_width: int = 640camera_height: int = 480cameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
UnitreeG1
lớp lerobot.robots.unitree_g1.UnitreeG1Config
< source >( kp: list[float] | None = Nonekd: list[float] | None = Nonedefault_positions: list = <factory>control_dt: float = 0.004is_simulation: bool = Trueend_effector: G1EndEffector = <G1EndEffector.DEX1: 'dex1'>sim_publish_images: bool = Truesim_camera_port: int = 5555sim_onscreen: bool | None = Nonerobot_ip: str = '192.168.123.164'cameras: dict = <factory>gravity_compensation: bool = Falsecontroller: str | None = Noneembodiment: str = 'g1_29'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Hope Jr
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.
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.
lớp lerobot.robots.hope_jr.HopeJrArmConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
lớp lerobot.robots.hope_jr.HopeJrHandConfig
< source >( port: strside: strdisable_torque_on_disconnect: bool = Truecameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
RebotB601Follower
lớp lerobot.robots.rebot_b601_follower.RebotB601Follower
< source >( config: RebotB601FollowerRobotConfig )
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,
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.
Đặt chế độ điều khiển của mỗi động cơ trước khi bật mô-men xoắn.
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 động cơ và camera khỏi robot.
Đ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ề.
class lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig
< source >( port: strmotor_family: MotorFamily = <MotorFamily.DM: 'dm'>can_adapter: str | None = Nonedm_serial_baud: int = 921600disable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>motor_can_ids: dict[str, tuple[int, int]] | None = Nonecontrol_mode: ArmControlMode = <ArmControlMode.MIT: 'mit'>gripper_control_mode: lerobot.robots.rebot_b601_follower.motor_family.GripperControlMode | None = Nonemit_kp: float | dict[str, float] | None = Nonemit_kd: float | dict[str, float] | None = Nonepos_vel_velocity: float | dict[str, float] | None = Nonegripper_torque_ratio: float | None = Nonegripper_torque_limit: float | None = Nonegripper_hold_torque_limit: float | None = Nonejoint_limits: dict[str, tuple[float, float]] | None = Noneid: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Cấu hình đã đăng ký cho robot theo dõi reBot B601.
BiRebotB601Follower
lớp lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower
< source >( config: BiRebotB601FollowerConfig )
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_.
lớp lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig
< source >( left_arm_config: RebotB601FollowerConfigright_arm_config: RebotB601FollowerConfigcameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Lớp cấu hình cho robot theo dõi bimanual reBot B601.
EarthRoverMiniPlus
class lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus
< source >( config: EarthRoverMiniPlusConfig )
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
Không cần hiệu chuẩn cho robot dựa trên SDK.
Cấu hình robot (không thực hiện thao tác gì với robot dựa trên SDK).
connect
< source >( calibrate: bool = True )
Kết nối với robot thông qua Frodobots SDK.
ngắt kết nối
< source >( )
Gây ra
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
< source >( ) → RobotObservation
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
Gây ra
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.
Note: Các khung hình 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ị SDK được chuẩn hóa về các khoảng giá trị phù hợp cho việc ghi lại bộ dữ liệu.
send_action
< source >( action: dict ) → RobotAction
Tham số
- action — Dict 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)
Gây ra
DeviceNotConnectedError
DeviceNotConnectedError— Nếu robot không được kết nối
Gửi hành động đến robot thông qua SDK.
Note: Các hành động được gửi đến SDK qua endpoint POST /control. SDK mong đợi các lệnh trong khoảng [-1, 1].
lớp lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig
< source >( sdk_url: str = 'http://localhost:8000'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
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.