LeRobot documentation

Роботы

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Роботы

Каждый робот в 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

< >

( config: RobotConfig )

Параметры

  • config_class (RobotConfig) — Ожидаемый класс конфигурации для этого робота.
  • name (str) — Уникальное имя робота, используемое для идентификации этого типа робота.

Базовый абстрактный класс для всех роботов, совместимых с LeRobot.

Этот класс предоставляет стандартизированный интерфейс для взаимодействия с физическими роботами. Подклассы должны реализовать все абстрактные методы и свойства, чтобы быть пригодными для использования.

connect

< >

( calibrate: bool = True )

Параметры

  • calibrate (bool) — Если True, автоматически калибрует робота после подключения, если он не откалиброван или требует калибровки (зависит от аппаратной части).

Установите связь с роботом.

отключить

< >

( )

Отключитесь от робота и выполните необходимую очистку.

configure

< >

( )

Примените любую одноразовую или конфигурацию во время выполнения для робота. Это может включать в себя настройку параметров двигателей, режимов управления или начального состояния.

calibrate

< >

( )

Откалибруйте робота, если это применимо. В противном случае эта операция не должна ничего делать.

Этот метод должен собирать все необходимые данные (например, смещения моторов) и соответствующим образом обновлять словарь :pyattr:calibration.

get_observation

< >

( ) → RobotObservation

Возвращает

RobotObservation

Плоский словарь, представляющий текущее сенсорное состояние робота. Его структура должна соответствовать :pymeth:observation_features.

Получите текущее наблюдение от робота.

send_action

< >

( action: dict ) → RobotAction

Параметры

  • action (RobotAction) — словарь, описывающий требуемое действие. Его структура должна соответствовать :pymeth:action_features.

Возвращает

RobotAction

Действие, фактически отправленное на моторы, может быть обрезано или изменено, например, из-за ограничений безопасности по скорости.

Отправьте команду действия роботу.

observation_features

< >

( )

Словарь, описывающий структуру и типы наблюдений, создаваемых роботом. Его структура (ключи) должна соответствовать структуре того, что возвращает :pymeth:get_observation. Значения для словаря должны быть:

  • Тип значения, если это простое значение, например float для единичного проприоцептивного значения (позиция/скорость сустава)
  • Кортеж, представляющий форму, если значение имеет тип массива, например (height, width, channel) для изображений

Примечание: этот метод должен вызываться независимо от того, подключен ли робот или нет.

action_features

< >

( )

Словарь, описывающий структуру и типы действий, ожидаемых роботом. Его структура (ключи) должна соответствовать структуре данных, передаваемых в :pymeth:send_action. Значения в словаре должны указывать тип значения, если это простое значение, например float для одиночного проприоцептивного значения (целевая позиция/скорость сустава)

Примечание: этот метод должен вызываться независимо от того, подключен ли робот или нет.

is_connected

< >

( )

Указывает, подключён ли робот в данный момент. Если False, вызов :pymeth:get_observation или :pymeth:send_action должен вызывать ошибку.

is_calibrated

< >

( )

Указывает, откалиброван ли робот в данный момент. Если не применимо, должно всегда быть True

RobotConfig

класс lerobot.robots.RobotConfig

< >

( id: str | None = Nonecalibration_dir: pathlib.Path | None = None )

make_robot_from_config

lerobot.robots.make_robot_from_config

< >

( config: RobotConfig )

Следующие за SO-100 и SO-101

SO100Follower и SO101Follower являются псевдонимами одного и того же класса SOFollower; два манипулятора различаются своей конфигурацией, а не кодом управления. SO100FollowerConfig и SO101FollowerConfig аналогично являются псевдонимами SOFollowerRobotConfig.

класс lerobot.robots.so_follower.SOFollower

< >

( config: SOFollowerRobotConfig )

Базовый класс SO follower, реализующий общую функциональность для SO-100/101/10X. Предназначен для наследования с использованием config_class и name для каждой модели оборудования.

connect

< >

( calibrate: bool = True )

Мы предполагаем, что в момент подключения рука находится в покое, и момент вращения можно безопасно отключить для выполнения калибровки.

send_action

< >

( action: dict ) → RobotAction

Возвращает

RobotAction

действие, отправляемое на моторы, возможно, обрезанное.

Исключения

RobotDeviceNotConnectedError

  • RobotDeviceNotConnectedError — если робот не подключен.

Команда для перемещения манипулятора в целевую конфигурацию суставов.

Относительная величина действия может быть ограничена в зависимости от параметра конфигурации max_relative_target. В этом случае отправляемое действие отличается от исходного. Поэтому эта функция всегда возвращает действие, которое было фактически отправлено.

класс lerobot.robots.so_follower.SOFollowerRobotConfig

< >

( 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, управляемые как единый двуручный робот.

класс lerobot.robots.bi_so_follower.BiSOFollower

< >

( config: BiSOFollowerConfig )

Двуручные манипуляторы SO Follower Arms, разработанные TheRobotStudio

класс lerobot.robots.bi_so_follower.BiSOFollowerConfig

< >

( left_arm_config: SOFollowerConfigright_arm_config: SOFollowerConfigcameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )

Класс конфигурации для роботов Bi SO Follower.

KochFollower

класс lerobot.robots.koch_follower.KochFollower

< >

( config: KochFollowerConfig )

  • Koch v1.0, с расширением от запястья до локтя и без него, разработанное Александром Кохом из Tau Robotics
  • Koch v1.1, разработанный Джесс Мосс

connect

< >

( calibrate: bool = True )

Мы предполагаем, что в момент подключения рука находится в покое, и момент вращения можно безопасно отключить для выполнения калибровки.

send_action

< >

( action: dict ) → RobotAction

Параметры

  • action (RobotAction) — Целевые положения для моторов.

Возвращает

RobotAction

Действие, отправляемое на моторы, возможно, обрезанное.

Команда для перемещения манипулятора в целевую конфигурацию суставов.

Относительная величина действия может быть ограничена в зависимости от параметра конфигурации max_relative_target. В этом случае отправляемое действие отличается от исходного. Поэтому эта функция всегда возвращает действие, которое было фактически отправлено.

класс lerobot.robots.koch_follower.KochFollowerConfig

< >

( 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.

class lerobot.robots.lekiwi.LeKiwi

< >

( config: LeKiwiConfig )

Робот включает в себя мобильную базу с тремя омниколесами и удалённую ведомую манипуляторную руку. Ведущая рука подключена локально (к ноутбуку), её положения суставов записываются, а затем передаются на удалённую ведомую руку (после применения ограничителя безопасности). Параллельно для генерации сырых команд скорости для колёс используется телеуправление с клавиатуры.

send_action

< >

( action: dict ) → RobotAction

Возвращает

RobotAction

действие, отправляемое на моторы, возможно, обрезанное.

Исключения

RobotDeviceNotConnectedError

  • RobotDeviceNotConnectedError — если робот не подключен.

Команда lekiwi для перемещения в целевую конфигурацию суставов.

Относительная величина действия может быть ограничена в зависимости от параметра конфигурации max_relative_target. В этом случае отправляемое действие отличается от исходного. Поэтому эта функция всегда возвращает действие, которое было фактически отправлено.

класс lerobot.robots.lekiwi.LeKiwiConfig

< >

( 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 )

класс lerobot.robots.lekiwi.LeKiwiClient

< >

( config: LeKiwiClientConfig )

connect

< >

( )

Устанавливает сокеты ZMQ с удалённым мобильным роботом

отключить

< >

( )

Очистка ZMQ-соединений

get_observation

< >

( )

Получение наблюдений от удалённого робота: текущие позиции звеньев манипулятора, текущие скорости колёс (преобразованные в скорости в системе координат корпуса: x, y, theta), и кадр с камеры. Получение по ZMQ, преобразование в скорости в системе

send_action

< >

( action: dict ) → np.ndarray

Параметры

  • action (RobotAction) — массив, содержащий целевые положения для моторов.

Возвращает

np.ndarray

действие, отправляемое на моторы, возможно, обрезанное.

Исключения

RobotDeviceNotConnectedError

  • RobotDeviceNotConnectedError — если робот не подключен.

Команда lekiwi для перемещения в целевую конфигурацию суставов. Преобразует в пространство моторов + отправляет через ZMQ

класс lerobot.robots.lekiwi.LeKiwiClientConfig

< >

( 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

класс lerobot.robots.openarm_follower.OpenArmFollower

< >

( config: OpenArmFollowerConfig )

Робот-последователь OpenArms Follower, использующий связь по шине CAN для управления 7-осевой рукой с захватом. Рука использует моторы Damiao в режиме управления MIT.

calibrate

< >

( )

Запустите процедуру калибробот OpenArms.

Процедура калибровки:

  1. Отключить крутящий момент
  2. Попросите пользователя расположить руки в подвешенном положении со сжатыми захватами
  3. Установите это как нулевую позицию
  4. Запишите диапазон движения для каждого сустава
  5. Сохранить калибровку

configure

< >

( )

Настройте моторы с соответствующими параметрами.

connect

< >

( calibrate: bool = True )

Подключитесь к роботу и при необходимости выполните калибровку.

Мы предполагаем, что в момент подключения манипуляторы находятся в безопасном положении покоя, а момент вращения может быть безопасно отключен для выполнения калибровки при необходимости.

отключить

< >

( )

Отключитесь от робота.

get_observation

< >

( )

Получить текущее наблюдение от робота, включая позицию, скорость и момент силы.

Читает все состояния моторов (pos/vel/torque) за один цикл обновления CAN, а не тремя отдельными чтениями.

send_action

< >

( 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

< >

( 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

< >

( config: BiOpenArmFollowerConfig )

Двуручные манипуляторы OpenArm Follower

класс lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig

< >

( id: str | None = 'bi_openarm_follower'calibration_dir: pathlib.Path | None = Noneleft_arm_config: OpenArmFollowerConfigBaseright_arm_config: OpenArmFollowerConfigBasecameras: dict = <factory> )

Класс конфигурации для роботов Bi OpenArm Follower.

OmxFollower

класс lerobot.robots.omx_follower.OmxFollower

< >

( config: OmxFollowerConfig )

  • OMX, расширение, разработанное Woojin Wie и Junha Cha из ROBOTIS

connect

< >

( calibrate: bool = True )

Для роботов OMX, поставляемых с заводской калибровкой:

  • Если калибровка по умолчанию из пакета не соответствует моторам, считайте данные с моторов и сохраните их
  • Это позволяет использовать предварительно откалиброванных роботов без ручной калибровки
  • Если файл калибровки не существует, используйте значения по умолчанию (homing_offset=0, range_min=0, range_max=4095)

send_action

< >

( action: dict ) → RobotAction

Параметры

  • action (RobotAction) — Целевые положения для моторов.

Возвращает

RobotAction

Действие, отправляемое на моторы, возможно, обрезанное.

Команда для перемещения манипулятора в целевую конфигурацию суставов.

Относительная величина действия может быть ограничена в зависимости от параметра конфигурации max_relative_target. В этом случае отправляемое действие отличается от исходного. Поэтому эта функция всегда возвращает действие, которое было фактически отправлено.

класс lerobot.robots.omx_follower.OmxFollowerConfig

< >

( 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

класс lerobot.robots.reachy2.Reachy2Robot

< >

( config: Reachy2RobotConfig )

Reachy 2 от Pollen Robotics.

класс lerobot.robots.reachy2.Reachy2RobotConfig

< >

( 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.UnitreeG1

< >

( config: UnitreeG1Config )

класс lerobot.robots.unitree_g1.UnitreeG1Config

< >

( 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.HopeJrArm

< >

( config: HopeJrArmConfig )

connect

< >

( calibrate: bool = True )

Мы предполагаем, что в момент подключения рука находится в покое, и момент вращения можно безопасно отключить для выполнения калибровки.

класс lerobot.robots.hope_jr.HopeJrArmConfig

< >

( 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.HopeJrHand

< >

( config: HopeJrHandConfig )

класс lerobot.robots.hope_jr.HopeJrHandConfig

< >

( 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

< >

( config: RebotB601FollowerRobotConfig )

Рука-последователь Seeed Studio reBot B601 (6 степеней свободы + захват, CAN-двигатели).

Обмен с моторами осуществляется через пакет motorbridge по шине CAN, доступной либо через последовательный мост Damiao, либо через собственный CAN-транспорт MotorBridge.

configure

< >

( )

Установите режим управления для каждого двигателя перед включением момента.

disable_torque

< >

( )

Отключите момент двигателя, чтобы можно было перемещать руку вручную (отладка только для чтения).

отключить

< >

( )

Отключите моторы и камеры от робота.

send_action

< >

( action: dict )

Установите манипулятор в целевую конфигурацию суставов.

Позиции выражаются в градусах. Относительная величина действия может быть ограничена в зависимости от max_relative_target, поэтому всегда возвращается фактически отправленное действие.

класс lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig

< >

( 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

< >

( config: BiRebotB601FollowerConfig )

Двуручный последователь Seeed Studio reBot B601.

Составляет два экземпляра RebotB601Follower с одним манипулятором. Ключи наблюдений и действий каждого манипулятора именуются с префиксом left_ / right_.

класс lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig

< >

( 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

< >

( config: EarthRoverMiniPlusConfig )

Параметры

  • config — конфигурация робота
  • sdk_base_url — Базовый URL сервера Frodobots SDK, полученный из config.sdk_url (по умолчанию: http://localhost:8000)

Робот EarthRover Mini Plus, управляемый через HTTP API Frodobots SDK.

Этот робот использует облачное управление через Frodobots SDK вместо прямого подключения к аппаратному обеспечению. Камеры транслируют видео через облако Agora по протоколу WebRTC, а команды управления отправляются с помощью HTTP POST-запросов.

Робот поддерживает:

  • Две камеры (передняя и задняя), доступные через HTTP-эндпоинты SDK
  • Управление линейной и угловой скоростью
  • Телеметрия батареи и ориентации

calibrate

< >

( )

Калибровка не требуется для роботов на базе SDK.

configure

< >

( )

Настройка робота (пустая операция для робота на базе SDK).

connect

< >

( calibrate: bool = True )

Параметры

  • calibrate — не используется для роботов на базе SDK (сохранено для совместимости API)

Исключения

DeviceAlreadyConnectedError или DeviceNotConnectedError

  • DeviceAlreadyConnectedError — если робот уже подключен
  • DeviceNotConnectedError — если не удалось подключиться к серверу SDK

Подключитесь к роботу через Frodobots SDK.

отключить

< >

( )

Исключения

DeviceNotConnectedError

  • DeviceNotConnectedError — если робот не подключен

Отключитесь от робота.

Останавливает робота и закрывает соединение с SDK.

get_observation

< >

( ) → 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

< >

( 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

< >

( sdk_url: str = 'http://localhost:8000'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )

Параметры

  • sdk_url — URL сервера Frodobots SDK (по умолчанию: http://localhost:8000)

Конфигурация для робота EarthRover Mini Plus с использованием Frodobots SDK.

Этот робот использует облачное управление через HTTP API Frodobots SDK. Кадров с камеры можно получить напрямую через HTTP-эндпоинты SDK.

Update on GitHub