LeRobot documentation
Robôs
Robôs
Cada robô no LeRobot implementa a interface Robot: conectar, ler uma observação, enviar uma ação,
desconectar. Escrever uma política ou um script de gravação para essa interface significa que ele funciona com qualquer braço
suportado sem alterações.
Esta página é a referência gerada. Para instruções de fiação, calibração e primeira execução, comece pelos guias de hardware — SO-101, LeKiwi, Hope Jr, Reachy 2, OpenArm — ou Imitation Learning for Robots para o fluxo de trabalho de ponta a ponta. Para robôs mantidos pela comunidade fora do conjunto principal, consulte Third-Party Robots & Teleoperators. Para adicionar um robô próprio, consulte Bring Your Own Hardware.
Robô
A classe base abstrata. As subclasses implementam todos os métodos abaixo; o contrato descrito aqui é o que uma política ou um loop de gravação pode utilizar.
classe lerobot.robots.Robot
< source >( config: RobotConfig )
A classe abstrata base para todos os robôs compatíveis com LeRobot.
Esta classe fornece uma interface padronizada para interagir com robôs físicos. As subclasses devem implementar todos os métodos e propriedades abstratos para serem utilizáveis.
connect
< source >( calibrate: bool = True )
Estabeleça comunicação com o robô.
Desconecte-se do robô e execute as limpezas necessárias.
Aplique qualquer configuração de uso único ou em tempo de execução ao robô. Isso pode incluir a definição de parâmetros dos motores, modos de controle ou estado inicial.
Calibre o robô, se aplicável. Caso contrário, esta deve ser uma operação sem efeito.
Este método deve coletar quaisquer dados necessários (por exemplo, offsets do motor) e atualizar o dicionário
:pyattr:calibration de acordo.
get_observation
< source >( ) → RobotObservation
Retorna
RobotObservation
Um dicionário plano que representa o estado sensorial atual do robô. Sua estrutura deve corresponder a :pymeth:observation_features.
Obtenha a observação atual do robô.
send_action
< source >( action: dict ) → RobotAction
Envie um comando de ação para o robô.
Um dicionário que descreve a estrutura e os tipos das observações produzidas pelo robô.
Sua estrutura (chaves) deve corresponder à estrutura do que é retornado por :pymeth:get_observation.
Os valores do dicionário devem ser:
- O tipo do valor, caso seja um valor simples, por exemplo,
floatpara um valor proprioceptivo único (posição/velocidade de uma articulação) - Uma tupla representando a forma, se for um valor de tipo array, por exemplo,
(height, width, channel)para imagens
Observação: esta propriedade deve poder ser chamada independentemente de o robô estar conectado ou não.
Um dicionário que descreve a estrutura e os tipos das ações esperadas pelo robô. Sua estrutura (chaves) deve corresponder à estrutura do que é passado para :pymeth:send_action. Os valores do dicionário devem ser o tipo do valor, se for um valor simples, por exemplo, float para um valor proprioceptivo único (posição/velocidade de destino de uma articulação)
Observação: esta propriedade deve poder ser chamada independentemente de o robô estar conectado ou não.
Se o robô está atualmente conectado ou não. Se False, chamar :pymeth:get_observation ou
:pymeth:send_action deve gerar um erro.
Se o robô está atualmente calibrado ou não. Deve ser sempre True se não aplicável
RobotConfig
classe lerobot.robots.RobotConfig
< source >( id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
make_robot_from_config
Seguidores do SO-100 e do SO-101
SO100Follower e SO101Follower são aliases da mesma classe SOFollower; os dois braços diferem em sua
configuração, não em seu código de controle. SO100FollowerConfig e SO101FollowerConfig são, da mesma forma, aliases
de SOFollowerRobotConfig.
Base genérica de seguidor SO que implementa a funcionalidade comum para SO-100/101/10X.
Projetada para ser subclasseada com uma config_class e um name específicos para cada modelo de hardware.
Assumimos que, no momento da conexão, o braço está em uma posição de repouso e que o torque pode ser desativado com segurança para executar a calibração.
send_action
< source >( action: dict ) → RobotAction
Retorna
RobotAction
a ação enviada aos motores, possivelmente limitada.
Exceções
RobotDeviceNotConnectedError
RobotDeviceNotConnectedError— se o robô não estiver conectado.
Comando o braço para se mover para uma configuração de juntas de destino.
A magnitude relativa da ação pode ser limitada (clipped) dependendo do parâmetro de configuração max_relative_target. Nesse caso, a ação enviada difere da ação original.
Portanto, esta função sempre retorna a ação efetivamente enviada.
classe 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
Dois seguidores de SO acionados como um único robô bimanual.
Braços seguidores SO bimanuais projetados por TheRobotStudio
classe 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 )
Classe de configuração para robôs Bi SO Follower.
KochFollower
- Koch v1.0, com e sem a expansão do punho ao cotovelo, desenvolvido por Alexander Koch da Tau Robotics
- Koch v1.1 desenvolvido por Jess Moss
Assumimos que, no momento da conexão, o braço está em uma posição de repouso e que o torque pode ser desativado com segurança para executar a calibração.
send_action
< source >( action: dict ) → RobotAction
Comando o braço para se mover para uma configuração de juntas de destino.
A magnitude relativa da ação pode ser limitada (clipped) dependendo do parâmetro de configuração max_relative_target. Nesse caso, a ação enviada difere da ação original.
Portanto, esta função sempre retorna a ação efetivamente enviada.
classe 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 roda no próprio robô. LeKiwiClient é o proxy do lado do host que se comunica com ele pela rede
e apresenta a mesma interface Robot.
O robô inclui uma base móvel com três rodas omni e um braço seguidor remoto. O braço líder é conectado localmente (no laptop) e as posições de suas juntas são registradas e, em seguida, transmitidas para o braço seguidor remoto (após a aplicação de um limite de segurança). Em paralelo, a teleoperação por teclado é usada para gerar comandos de velocidade bruta para as rodas.
send_action
< source >( action: dict ) → RobotAction
Retorna
RobotAction
a ação enviada aos motores, possivelmente limitada.
Exceções
RobotDeviceNotConnectedError
RobotDeviceNotConnectedError— se o robô não estiver conectado.
Comande o lekiwi para se mover para uma configuração de juntas de destino.
A magnitude relativa da ação pode ser limitada (clipped) dependendo do parâmetro de configuração max_relative_target. Nesse caso, a ação enviada difere da ação original.
Portanto, esta função sempre retorna a ação efetivamente enviada.
classe 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 )
Estabelece sockets ZMQ com o robô móvel remoto
Limpa as comunicações ZMQ
Capture observações do robô remoto: posições atuais dos braços seguidores, velocidades atuais das rodas (convertidas para velocidades no referencial do corpo: x, y, theta) e um quadro da câmera. Recebe via ZMQ, converte para velocidades no referencial do
send_action
< source >( action: dict ) → np.ndarray
Comande o lekiwi para se mover até uma configuração de juntas de destino. Traduz para o espaço do motor + envia via ZMQ
classe 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
Robô OpenArms Follower que usa comunicação via barramento CAN para controlar um braço de 7 graus de liberdade com uma garra. O braço usa motores Damiao no modo de controle MIT.
Execute o procedimento de calibração para o robô OpenArms.
O procedimento de calibração:
- Desativar torque
- Peça ao usuário para posicionar os braços na posição suspensa com os garras fechadas
- Defina isso como posição zero
- Registre a amplitude de movimento de cada articulação
- Salvar calibração
Configure os motores com as configurações apropriadas.
Conecte-se ao robô e, opcionalmente, calibre.
Assumimos que, no momento da conexão, os braços estão em uma posição de repouso segura e que o torque pode ser desativado com segurança para executar a calibração, se necessário.
Desconectar do robô.
Obtém a observação atual do robô, incluindo posição, velocidade e torque.
Lê todos os estados dos motores (pos/vel/torque) em um único ciclo de atualização CAN, em vez de 3 leituras separadas.
send_action
< source >( action: dictcustom_kp: dict[str, float] | None = Nonecustom_kd: dict[str, float] | None = None )
Parâmetros
Envie um comando de ação para o robô.
A magnitude da ação pode ser limitada com base em limites de segurança.
classe 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
classe lerobot.robots.bi_openarm_follower.BiOpenArmFollower
< source >( config: BiOpenArmFollowerConfig )
Braços Seguidores Bimanuais OpenArm
classe 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> )
Classe de configuração para robôs Bi OpenArm Follower.
OmxFollower
Para robôs OMX que vêm pré-calibrados:
- Se a calibração padrão do pacote não corresponder aos motores, leia dos motores e salve
- Isso permite o uso de robôs pré-calibrados sem calibração manual
- Se nenhum arquivo de calibração existir, use os valores padrão de fábrica (homing_offset=0, range_min=0, range_max=4095)
send_action
< source >( action: dict ) → RobotAction
Comando o braço para se mover para uma configuração de juntas de destino.
A magnitude relativa da ação pode ser limitada (clipped) dependendo do parâmetro de configuração max_relative_target. Nesse caso, a ação enviada difere da ação original.
Portanto, esta função sempre retorna a ação efetivamente enviada.
classe 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, da Pollen Robotics.
classe 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
classe 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
O humanoide Hope Jr é exposto como dois robôs independentes, um braço e uma mão.
Assumimos que, no momento da conexão, o braço está em uma posição de repouso e que o torque pode ser desativado com segurança para executar a calibração.
classe 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 )
classe 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
classe lerobot.robots.rebot_b601_follower.RebotB601Follower
< source >( config: RebotB601FollowerRobotConfig )
Braço seguidor Seeed Studio reBot B601 (6-DOF + garra, motores CAN).
A comunicação com o motor é gerenciada pelo pacote motorbridge por meio de um barramento CAN, acessado seja através de uma ponte serial Damiao ou do transporte CAN nativo do MotorBridge.
Defina o modo de controle de cada motor antes de habilitar o torque.
Desative o torque do motor para que o braço possa ser movido à mão (depuração somente leitura).
Desconecte os motores e as câmeras do robô.
Comande o braço para uma configuração de juntas de destino.
As posições são expressas em graus. A magnitude da ação relativa pode ser
limitada dependendo de max_relative_target, portanto a ação efetivamente enviada é
sempre retornada.
classe 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 )
Configuração registrada para o robô seguidor reBot B601.
BiRebotB601Follower
classe lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower
< source >( config: BiRebotB601FollowerConfig )
Seguidor bimanual Seeed Studio reBot B601.
Compõe duas instâncias de RebotB601Follower de braço único. As chaves de observação e ação de cada braço são namespaced com o prefixo left_ / right_.
classe 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 )
Classe de configuração para o robô seguidor bimanual reBot B601.
EarthRoverMiniPlus
classe lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus
< source >( config: EarthRoverMiniPlusConfig )
Robô EarthRover Mini Plus controlado via API HTTP do Frodobots SDK.
Este robô usa controle baseado em nuvem por meio do Frodobots SDK, em vez de uma conexão direta com o hardware. As câmeras transmitem via WebRTC pela nuvem da Agora, e os comandos de controle são enviados por meio de requisições HTTP POST.
O robô suporta:
- Câmeras duplas (frontal e traseira) acessadas por meio de endpoints HTTP do SDK
- Controle de velocidade linear e angular
- Telemetria de bateria e orientação
Calibração não é necessária para robôs baseados em SDK.
Configure o robô (sem operação para robôs baseados em SDK).
connect
< source >( calibrate: bool = True )
Conecte-se ao robô via Frodobots SDK.
disconnect
< source >( )
Exceções
DeviceNotConnectedError
DeviceNotConnectedError— Se o robô não estiver conectado
Desconectar do robô.
Interrompe o robô e fecha a conexão com o SDK.
get_observation
< source >( ) → RobotObservation
Retorna
RobotObservation
Observação contendo:
- front: Imagem da câmera frontal (480, 640, 3) no formato RGB
- rear: Imagem da câmera traseira (480, 640, 3) no formato RGB
- speed: float - Velocidade atual (valor bruto do SDK)
- battery_level: float - Nível da bateria (0-100)
- orientation: float - Orientação do robô em graus
- gps_latitude: float - coordenada de latitude do GPS
- gps_longitude: float - coordenada de longitude do GPS
- gps_signal: float - intensidade do sinal GPS (porcentagem)
- signal_level: float - Nível do sinal da rede (0-5)
- vibration: float - Leitura do sensor de vibração
- lamp: float - Estado da lâmpada (0=desligado, 1=ligado)
- accelerometer_x/y/z: float - Eixos do acelerômetro (valor bruto da SDK)
- gyroscope_x/y/z: float - Eixos do giroscópio (valor bruto da SDK)
- magnetometer_filtered_x/y/z: float - Eixos do magnetômetro (valor bruto da SDK)
- wheel_rpm_0/1/2/3: float - RPMs das rodas
Exceções
DeviceNotConnectedError
DeviceNotConnectedError— Se o robô não estiver conectado
Obtenha a observação atual do robô do SDK.
Os quadros da câmera são obtidos dos endpoints de SDK /v2/front e /v2/rear. Os quadros são decodificados de base64 e convertidos do formato BGR para RGB. A telemetria do robô é obtida do endpoint /data. Os arrays de sensores (accels, gyros, mags, rpms) contêm cada um entradas de [values…, timestamp]; a leitura mais recente de cada array é utilizada.
Nota: Os quadros da câmera são obtidos dos endpoints /v2/front e /v2/rear do SDK. Os quadros são decodificados de base64 e convertidos do formato BGR para RGB. A telemetria do robô é obtida do endpoint /data. Todos os valores do SDK são normalizados para os intervalos apropriados para o registro do conjunto de dados.
send_action
< source >( action: dict ) → RobotAction
Parâmetros
- action — Dicionário de ação com as chaves:
- linear_velocity: Velocidade linear alvo (-1 a 1)
- angular_velocity: Velocidade angular alvo (-1 a 1)
Retorna
RobotAction
A ação que foi enviada (corresponde às chaves de action_features)
Exceções
DeviceNotConnectedError
DeviceNotConnectedError— Se o robô não estiver conectado
Envie ação para o robô via SDK.
Nota: As ações são enviadas ao SDK por meio do endpoint POST /control. O SDK espera comandos no intervalo [-1, 1].
classe lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig
< source >( sdk_url: str = 'http://localhost:8000'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Configuração para o robô EarthRover Mini Plus usando o SDK da Frodobots.
Este robô usa controle baseado em nuvem por meio da API HTTP do Frodobots SDK. Os quadros da câmera são acessados diretamente por meio dos endpoints HTTP do SDK.