LeRobot documentation
로봇
로봇
LeRobot의 모든 로봇은 Robot 인터페이스를 구현합니다: 연결, 관측값 읽기, 액션 전송, 연결 해제. 해당 인터페이스에 맞춰 정책이나 녹화 스크립트를 작성하면, 수정 없이 모든 지원되는 팔에서 작동합니다.
이 페이지는 자동 생성된 참조 문서입니다. 배선, 보정 및 첫 실행 지침에 대해서는 SO-101, LeKiwi, Hope Jr, Reachy 2, OpenArm 하드웨어 가이드를 참고하거나, 전체 워크플로우에 대해서는 Imitation Learning for Robots를 확인하세요. 코어 세트에 포함되지 않는 커뮤니티 유지 관리 로봇은 Third-Party Robots & Teleoperators를 참고하세요. 자체 로봇을 추가하려면 Bring Your Own Hardware를 참고하세요.
로봇
추상 베이스 클래스입니다. 서브클래스는 아래에 나열된 모든 메서드를 구현해야 하며, 여기서 설명하는 계약은 정책이나 기록 루프가 의존할 수 있는 기준입니다.
클래스 lerobot.robots.Robot
< source >( config: RobotConfig )
모든 LeRobot 호환 로봇의 기본 추상 클래스입니다.
이 클래스는 물리적 로봇과 상호작용하기 위한 표준화된 인터페이스를 제공합니다. 서브클래스는 사용 가능하도록 모든 추상 메서드와 프로퍼티를 구현해야 합니다.
connect
< source >( calibrate: bool = True )
로봇과 통신을 설정합니다.
로봇에서 연결을 해제하고 필요한 정리 작업을 수행합니다.
로봇에 일회성 또는 런타임 구성을 적용합니다. 모터 매개변수, 제어 모드 또는 초기 상태 설정을 포함할 수 있습니다.
적용 가능한 경우 로봇을 보정합니다. 그렇지 않으면 이 작업은 아무 효과도 없습니다(no-op).
이 메서드는 필요한 데이터(예: 모터 오프셋)를 수집하고 calibration 사전에 따라 적절히 업데이트해야 합니다.
get_observation
< source >( ) → RobotObservation
반환값
RobotObservation
로봇의 현재 감각 상태를 나타내는 평탄한 사전입니다. 구조는 observation_features와 일치해야 합니다.
로봇에서 현재 관측값을 가져옵니다.
send_action
< source >( action: dict ) → RobotAction
로봇에 액션 명령을 전송합니다.
로봇이 생성하는 관측치의 구조와 유형을 설명하는 사전입니다.
그 구조(키)는 get_observation가 반환하는 값의 구조와 일치해야 합니다.
사전의 값은 다음 중 하나여야 합니다:
- 단순 값인 경우의 값 유형, 예: 단일 고유감각 값(관절의 위치/속도)의 경우
float - 배열 타입의 값인 경우, 예를 들어 이미지의 경우
(height, width, channel)와 같이 형태를 나타내는 튜플
참고: 이 속성은 로봇이 연결되어 있든 아니든 상관없이 호출할 수 있어야 합니다.
로봇이 기대하는 액션의 구조와 유형을 설명하는 사전입니다. 이 사전의 구조(키)는 send_action에 전달되는 값의 구조와 일치해야 합니다. 사전의 값은 단순한 값인 경우 해당 값의 유형이어야 하며, 예를 들어 단일 고유감각 값(관절의 목표 위치/속도)의 경우 float입니다.
참고: 이 속성은 로봇이 연결되어 있든 아니든 상관없이 호출할 수 있어야 합니다.
로봇이 현재 연결되어 있는지 여부입니다. False인 경우, :pymeth:get_observation 또는
:pymeth:send_action를 호출하면 오류가 발생해야 합니다.
로봇이 현재 보정되어 있는지 여부. 해당되지 않는 경우 항상 True여야 합니다
RobotConfig
클래스 lerobot.robots.RobotConfig
< source >( id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
make_robot_from_config
SO-100 및 SO-101 팔로워
SO100Follower와 SO101Follower는 동일한 SOFollower 클래스의 별칭입니다. 두 팔은 제어 코드가 아니라 구성이 서로 다릅니다. SO100FollowerConfig와 SO101FollowerConfig도 마찬가지로 SOFollowerRobotConfig의 별칭입니다.
SO-100/101/10X의 공통 기능을 구현하는 범용 SO 팔로워 기반 클래스입니다.
하드웨어 모델별 config_class와 name을 사용하여 하위 클래스로 상속되도록 설계되었습니다.
연결 시점에 arm이 정지 상태에 있으며, 보정을 실행하기 위해 토크를 안전하게 비활성화할 수 있다고 가정합니다.
send_action
< source >( action: dict ) → RobotAction
반환값
RobotAction
모터로 전송되는 액션, 클리핑이 적용된 경우
다음 예외를 발생시킵니다
RobotDeviceNotConnectedError
RobotDeviceNotConnectedError— 로봇이 연결되지 않은 경우.
목표 관절 구성으로 이동하도록 팔을 명령합니다.
구성 매개변수 max_relative_target에 따라 상대적 액션 크기가 클립될 수 있습니다. 이 경우 전송된 액션은 원래 액션과 다릅니다.
따라서 이 함수는 실제로 전송된 액션을 항상 반환합니다.
클래스 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
두 개의 SO 팔을 하나의 양손 로봇으로 구동합니다.
TheRobotStudio가 설계한 양손 SO 팔로우 암
class 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 )
Bi SO Follower 로봇을 위한 구성 클래스입니다.
KochFollower
- Alexander Koch가 Tau Robotics에서 개발한 Koch v1.0으로, 손목에서 팔꿈치까지의 확장 포함 여부에 관계없이
- Jess Moss가 개발한 Koch v1.1
연결 시점에 arm이 정지 상태에 있으며, 보정을 실행하기 위해 토크를 안전하게 비활성화할 수 있다고 가정합니다.
send_action
< source >( action: dict ) → RobotAction
목표 관절 구성으로 이동하도록 팔을 명령합니다.
구성 매개변수 max_relative_target에 따라 상대적 액션 크기가 클립될 수 있습니다. 이 경우 전송된 액션은 원래 액션과 다릅니다.
따라서 이 함수는 실제로 전송된 액션을 항상 반환합니다.
클래스 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는 로봇 자체에서 실행됩니다. LeKiwiClient는 네트워크를 통해 LeKiwi와 통신하는 호스트 측 프록시이며, 동일한 Robot 인터페이스를 제공합니다.
로봇에는 3개의 옴니휠로 구성된 이동 기반과 원격 팔로워 암이 포함되어 있습니다. 리더 암은 로컬(노트북)에 연결되어 있으며, 그 관절 위치가 기록된 후 안전 클램프가 적용된 다음 원격 팔로워 암으로 전달됩니다. 이와 동시에, 키보드 텔레오퍼레이션을 사용하여 바퀴의 원시 속도 명령을 생성합니다.
send_action
< source >( action: dict ) → RobotAction
반환값
RobotAction
모터로 전송되는 액션, 클리핑이 적용된 경우
다음 예외를 발생시킵니다
RobotDeviceNotConnectedError
RobotDeviceNotConnectedError— 로봇이 연결되지 않은 경우.
lekiwi에 목표 관절 구성으로 이동하도록 명령합니다.
구성 매개변수 max_relative_target에 따라 상대적 액션 크기가 클립될 수 있습니다. 이 경우 전송된 액션은 원래 액션과 다릅니다.
따라서 이 함수는 실제로 전송된 액션을 항상 반환합니다.
class 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 )
원격 모바일 로봇과 ZMQ 소켓을 설정합니다
ZMQ 통신을 정리합니다
원격 로봇에서 관측치를 수집합니다: 현재 팔로우어 팔 위치, 현재 바퀴 속도(본체 좌표계 속도 x, y, theta로 변환), 그리고 카메라 프레임. ZMQ를 통해 수신하고 본체 좌표계 속도로
send_action
< source >( action: dict ) → np.ndarray
lekiwi에 목표 관절 구성으로 이동하도록 명령합니다. 모터 공간으로 변환하고 ZMQ를 통해 전송합니다
class 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
CAN 버스 통신을 사용하여 그리퍼가 장착된 7 DOF 팔을 제어하는 OpenArms Follower Robot입니다. 팔은 MIT 제어 모드의 Damiao 모터를 사용합니다.
OpenArms 로봇에 대해 보정 절차를 실행합니다.
교정 절차:
- 토크 비활성화
- 그리퍼가 닫힌 상태로 팔을 매달린 자세로 위치하도록 사용자에게 요청합니다
- Set this as zero position
- 각 관절의 운동 범위를 기록
- 교정 저장
적절한 설정으로 모터를 구성합니다.
로봇에 연결하고 필요에 따라 보정합니다.
연결 시점에 팔이 안전한 휴지 위치에 있으며, 필요할 경우 토크를 안전하게 비활성화하여 보정을 실행할 수 있다고 가정합니다.
로봇에서 연결을 해제합니다.
로봇에서 위치, 속도, 토크를 포함한 현재 관측값을 가져옵니다.
3개의 개별 읽기 대신 하나의 CAN 리프레시 사이클에서 모든 모터 상태(pos/vel/torque)를 읽습니다.
send_action
< source >( action: dictcustom_kp: dict[str, float] | None = Nonecustom_kd: dict[str, float] | None = None )
로봇에 액션 명령을 전송합니다.
액션의 크기는 안전 한계에 따라 잘릴 수 있습니다.
클래스 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
class lerobot.robots.bi_openarm_follower.BiOpenArmFollower
< source >( config: BiOpenArmFollowerConfig )
양수 OpenArm 팔로워 암
class 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> )
Bi OpenArm Follower 로봇의 구성 클래스입니다.
OmxFollower
OMX 로봇 중 사전 보정이 완료된 경우:
- 패키지의 기본 캘리브레이션이 모터와 일치하지 않으면 모터에서 읽고 저장합니다
- …
- 교정 파일이 존재하지 않으면 공장 기본값(homing_offset=0, range_min=0, range_max=4095)을 사용합니다.
send_action
< source >( action: dict ) → RobotAction
목표 관절 구성으로 이동하도록 팔을 명령합니다.
구성 매개변수 max_relative_target에 따라 상대적 액션 크기가 클립될 수 있습니다. 이 경우 전송된 액션은 원래 액션과 다릅니다.
따라서 이 함수는 실제로 전송된 액션을 항상 반환합니다.
클래스 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
Pollen Robotics의 Reachy 2.
class 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
클래스 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
Hope Jr 휴머노이드는 팔과 손이라는 두 개의 독립적인 로봇으로 노출됩니다.
연결 시점에 arm이 정지 상태에 있으며, 보정을 실행하기 위해 토크를 안전하게 비활성화할 수 있다고 가정합니다.
클래스 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 )
class 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
class lerobot.robots.rebot_b601_follower.RebotB601Follower
< source >( config: RebotB601FollowerRobotConfig )
Seeed Studio reBot B601 팔로우 암 (6-DOF + 그리퍼, CAN 모터).
모터 통신은 motorbridge 패키지를 통해 CAN 버스로 처리되며, Damiao 시리얼 브리지 또는 MotorBridge의 네이티브 CAN 전송을 통해 접근할 수 있습니다.
토크를 활성화하기 전에 각 모터의 제어 모드를 설정하세요.
motor torque를 비활성화하여 팔을 수동으로 이동할 수 있도록 합니다(읽기 전용 디버깅).
로봇에서 모터와 카메라를 분리합니다.
팔을 목표 관절 구성으로 명령합니다.
Positions는 도(degree) 단위로 표현됩니다. max_relative_target에 따라 상대 동작 크기가 클립될 수 있으므로, 실제로 전송된 동작이 항상 반환됩니다.
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 )
reBot B601 팔로워 로봇에 대한 등록된 구성입니다.
BiRebotB601Follower
class lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower
< source >( config: BiRebotB601FollowerConfig )
양손 조작용 Seeed Studio reBot B601 팔로워.
두 개의 단일 암 RebotB601Follower 인스턴스를 구성합니다. 각 암의 관찰 및 동작 키에는 left_ / right_ 접두사가 네임스페이스로 적용됩니다.
class 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 )
양손 조작용 reBot B601 팔로워 로봇의 구성 클래스입니다.
EarthRoverMiniPlus
class lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus
< source >( config: EarthRoverMiniPlusConfig )
Frodobots SDK HTTP API를 통해 제어되는 EarthRover Mini Plus 로봇.
이 로봇은 하드웨어를 직접 연결하는 대신 Frodobots SDK를 통해 클라우드 기반 제어를 사용합니다. 카메라는 Agora 클라우드를 통해 WebRTC로 스트리밍되며, 제어 명령은 HTTP POST 요청을 통해 전송됩니다.
로봇은 다음을 지원합니다:
- SDK HTTP 엔드포인트를 통해 액세스하는 듀얼 카메라(전면 및 후면)
- 선형 및 각속도 제어
- 배터리 및 방향 텔레메트리
SDK 기반 로봇에는 보정이 필요하지 않습니다.
로봇 구성 (SDK 기반 로봇의 경우 아무 작업도 수행하지 않음).
connect
< source >( calibrate: bool = True )
Frodobots SDK를 통해 로봇에 연결합니다.
로봇에서 연결을 해제합니다.
로봇을 정지하고 SDK와의 연결을 닫습니다.
get_observation
< source >( ) → RobotObservation
반환값
RobotObservation
다음 내용을 포함하는 관찰:
- front: RGB 형식의 전면 카메라 이미지 (480, 640, 3)
- rear: RGB 형식의 후면 카메라 이미지 (480, 640, 3)
- speed: float - 현재 속도 (원시 SDK 값)
- battery_level: float - 배터리 수준 (0-100)
- orientation: float - 도 단위(robot orientation)
- gps_latitude: float - GPS 위도 좌표
- gps_longitude: float - GPS 경도 좌표
- gps_signal: float - GPS 신호 강도(%)
- signal_level: float - 네트워크 신호 수준 (0-5)
- vibration: float - 진동 센서 측정값
- lamp: float - 램프 상태 (0=꺼짐, 1=켜짐)
- accelerometer_x/y/z: float - 가속도계 축 (원시 SDK 값)
- gyroscope_x/y/z: float - 자이로스코프 축 (원시 SDK 값)
- magnetometer_filtered_x/y/z: float - 자계계 축 (원시 SDK 값)
- wheel_rpm_0/1/2/3: float - 바퀴 RPM
다음 예외를 발생시킵니다
DeviceNotConnectedError
DeviceNotConnectedError— 로봇이 연결되지 않은 경우
SDK에서 현재 로봇 관측값을 가져옵니다.
카메라 프레임은 SDK 엔드포인트 /v2/front와 /v2/rear에서 가져옵니다. 프레임은 base64에서 디코딩되어 BGR 형식에서 RGB 형식으로 변환됩니다. 로봇 텔레메트리 데이터는 /data 엔드포인트에서 가져옵니다. 센서 배열(accels, gyros, mags, rpms) 각 항목은 [values…, timestamp] 형식의 항목을 포함하며, 각 배열의 최신 읽기 값이 사용됩니다.
Note: 카메라 프레임은 SDK 엔드포인트 /v2/front 및 /v2/rear에서 가져옵니다. 프레임은 base64에서 디코딩된 후 BGR에서 RGB 형식으로 변환됩니다. 로봇 텔레메트리 데이터는 /data 엔드포인트에서 가져옵니다. 모든 SDK 값은 데이터셋 기록에 적합한 범위로 정규화됩니다.
send_action
< source >( action: dict ) → RobotAction
SDK를 통해 로봇에 액션을 전송합니다.
Note: Actions are sent to SDK via POST /control endpoint. SDK expects commands in range [-1, 1].
class lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig
< source >( sdk_url: str = 'http://localhost:8000'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Frodobots SDK를 사용하여 EarthRover Mini Plus 로봇을 구성하는 설정입니다.
이 로봇은 Frodobots SDK HTTP API를 통해 클라우드 기반 제어를 사용합니다. 카메라 프레임은 SDK HTTP 엔드포인트를 통해 직접 접근합니다.