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 )
Установите связь с роботом.
Отключитесь от робота и выполните необходимую очистку.
Примените любую одноразовую или конфигурацию во время выполнения для робота. Это может включать в себя настройку параметров двигателей, режимов управления или начального состояния.
Откалибруйте робота, если это применимо. В противном случае эта операция не должна ничего делать.
Этот метод должен собирать все необходимые данные (например, смещения моторов) и соответствующим образом обновлять словарь
:pyattr:calibration.
get_observation
< source >( ) → RobotObservation
Возвращает
RobotObservation
Плоский словарь, представляющий текущее сенсорное состояние робота. Его структура должна соответствовать :pymeth:observation_features.
Получите текущее наблюдение от робота.
send_action
< source >( action: dict ) → RobotAction
Отправьте команду действия роботу.
Словарь, описывающий структуру и типы наблюдений, создаваемых роботом.
Его структура (ключи) должна соответствовать структуре того, что возвращает :pymeth:get_observation.
Значения для словаря должны быть:
- Тип значения, если это простое значение, например
floatдля единичного проприоцептивного значения (позиция/скорость сустава) - Кортеж, представляющий форму, если значение имеет тип массива, например
(height, width, channel)для изображений
Примечание: этот метод должен вызываться независимо от того, подключен ли робот или нет.
Словарь, описывающий структуру и типы действий, ожидаемых роботом. Его структура (ключи) должна соответствовать структуре данных, передаваемых в :pymeth: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 follower, реализующий общую функциональность для SO-100/101/10X.
Предназначен для наследования с использованием config_class и name для каждой модели оборудования.
Мы предполагаем, что в момент подключения рука находится в покое, и момент вращения можно безопасно отключить для выполнения калибровки.
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, управляемые как единый двуручный робот.
Двуручные манипуляторы SO Follower Arms, разработанные TheRobotStudio
класс 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
- Koch v1.0, с расширением от запястья до локтя и без него, разработанное Александром Кохом из Tau Robotics
- Koch v1.1, разработанный Джесс Мосс
Мы предполагаем, что в момент подключения рука находится в покое, и момент вращения можно безопасно отключить для выполнения калибровки.
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 — это прокси на стороне хоста, который взаимодействует с ним по сети
и предоставляет тот же интерфейс Robot.
Робот включает в себя мобильную базу с тремя омниколесами и удалённую ведомую манипуляторную руку. Ведущая рука подключена локально (к ноутбуку), её положения суставов записываются, а затем передаются на удалённую ведомую руку (после применения ограничителя безопасности). Параллельно для генерации сырых команд скорости для колёс используется телеуправление с клавиатуры.
send_action
< source >( action: dict ) → RobotAction
Возвращает
RobotAction
действие, отправляемое на моторы, возможно, обрезанное.
Исключения
RobotDeviceNotConnectedError
RobotDeviceNotConnectedError— если робот не подключен.
Команда lekiwi для перемещения в целевую конфигурацию суставов.
Относительная величина действия может быть ограничена в зависимости от параметра конфигурации max_relative_target. В этом случае отправляемое действие отличается от исходного.
Поэтому эта функция всегда возвращает действие, которое было фактически отправлено.
класс 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
класс 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
Робот-последователь OpenArms Follower, использующий связь по шине CAN для управления 7-осевой рукой с захватом. Рука использует моторы Damiao в режиме управления MIT.
Запустите процедуру калибробот OpenArms.
Процедура калибровки:
- Отключить крутящий момент
- Попросите пользователя расположить руки в подвешенном положении со сжатыми захватами
- Установите это как нулевую позицию
- Запишите диапазон движения для каждого сустава
- Сохранить калибровку
Настройте моторы с соответствующими параметрами.
Подключитесь к роботу и при необходимости выполните калибровку.
Мы предполагаем, что в момент подключения манипуляторы находятся в безопасном положении покоя, а момент вращения может быть безопасно отключен для выполнения калибровки при необходимости.
Отключитесь от робота.
Получить текущее наблюдение от робота, включая позицию, скорость и момент силы.
Читает все состояния моторов (pos/vel/torque) за один цикл обновления CAN, а не тремя отдельными чтениями.
send_action
< source >( action: dictcustom_kp: dict[str, float] | None = Nonecustom_kd: dict[str, float] | None = None )
Параметры
- action — словарь с позициями приводов (например, “joint_1.pos”, “joint_2.pos”)
- custom_kp — Необязательные пользовательские коэффициенты усиления kp для каждого мотора (например, {“joint_1”: 120.0, “joint_2”: 150.0})
- custom_kd — Необязательные пользовательские коэффициенты усиления kd для каждого мотора (например, {“joint_1”: 1.5, “joint_2”: 2.0})
Отправить команду действия роботу.
Амплитуда действия может быть ограничена в соответствии с предельными значениями безопасности.
класс 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
класс lerobot.robots.bi_openarm_follower.BiOpenArmFollower
< source >( config: BiOpenArmFollowerConfig )
Двуручные манипуляторы OpenArm Follower
класс 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
Reachy 2 от Pollen Robotics.
класс 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 представлен в виде двух независимых роботов: руки и кисти.
Мы предполагаем, что в момент подключения рука находится в покое, и момент вращения можно безопасно отключить для выполнения калибровки.
класс 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 )
класс 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
класс lerobot.robots.rebot_b601_follower.RebotB601Follower
< source >( config: RebotB601FollowerRobotConfig )
Рука-последователь Seeed Studio reBot B601 (6 степеней свободы + захват, CAN-двигатели).
Обмен с моторами осуществляется через пакет motorbridge по шине CAN, доступной либо через последовательный мост Damiao, либо через собственный CAN-транспорт MotorBridge.
Установите режим управления для каждого двигателя перед включением момента.
Отключите момент двигателя, чтобы можно было перемещать руку вручную (отладка только для чтения).
Отключите моторы и камеры от робота.
Установите манипулятор в целевую конфигурацию суставов.
Позиции выражаются в градусах. Относительная величина действия может быть ограничена в зависимости от max_relative_target, поэтому всегда возвращается фактически отправленное действие.
класс 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
класс lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower
< source >( config: BiRebotB601FollowerConfig )
Двуручный последователь Seeed Studio reBot B601.
Составляет два экземпляра RebotB601Follower с одним манипулятором. Ключи наблюдений и действий каждого манипулятора именуются с префиксом left_ / right_.
класс 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
класс lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus
< source >( config: EarthRoverMiniPlusConfig )
Робот EarthRover Mini Plus, управляемый через HTTP API Frodobots SDK.
Этот робот использует облачное управление через Frodobots SDK вместо прямого подключения к аппаратному обеспечению. Камеры транслируют видео через облако Agora по протоколу WebRTC, а команды управления отправляются с помощью HTTP POST-запросов.
Робот поддерживает:
- Две камеры (передняя и задняя), доступные через HTTP-эндпоинты SDK
- Управление линейной и угловой скоростью
- Телеметрия батареи и ориентации
Калибровка не требуется для роботов на базе SDK.
Настройка робота (пустая операция для робота на базе SDK).
connect
< source >( calibrate: bool = True )
Подключитесь к роботу через Frodobots SDK.
отключить
< source >( )
Исключения
DeviceNotConnectedError
DeviceNotConnectedError— если робот не подключен
Отключитесь от робота.
Останавливает робота и закрывает соединение с SDK.
get_observation
< source >( ) → RobotObservation
Возвращает
RobotObservation
Наблюдение, содержащее:
- front: изображение с фронтальной камеры (480, 640, 3) в формате RGB
- rear: изображение с задней камеры (480, 640, 3) в формате RGB
- speed: float - Текущая скорость (сырое значение SDK)
- battery_level: float - Уровень заряда батареи (0-100)
- orientation: float - Ориентация робота в градусах
- 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 - Обороты колес
Исключения
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
Параметры
- action — Словарь действия с ключами:
- linear_velocity: целевая линейная скорость (от -1 до 1)
- angular_velocity: Целевая угловая скорость (от -1 до 1)
Возвращает
RobotAction
Действие, которое было отправлено (совпадает с ключами action_features)
Исключения
DeviceNotConnectedError
DeviceNotConnectedError— если робот не подключен
Отправьте действие роботу через SDK.
Note: Действия отправляются в SDK через эндпоинт POST /control. SDK ожидает команды в диапазоне [-1, 1].
класс lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig
< source >( sdk_url: str = 'http://localhost:8000'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Конфигурация для робота EarthRover Mini Plus с использованием Frodobots SDK.
Этот робот использует облачное управление через HTTP API Frodobots SDK. Кадров с камеры можно получить напрямую через HTTP-эндпоинты SDK.