LeRobot documentation

Processeurs d'environnement

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Processeurs d'environnement

Les processeurs d’environnement transforment les observations d’un environnement avant les processeurs propres à la politique, et les actions de la politique avant l’environnement. Chaque configuration d’environnement renvoie sa paire depuis get_env_processors(), et make_env_pre_post_processors les construit pour l’évaluation, l’évaluation pendant l’entraînement et un robot de simulation.

Les environnements simulés n’en ont pas besoin

Les environnements simulés fournissent déjà la politique sous forme canonique : les images sous observation.images.<camera> (ou observation.image), l’état sous un unique observation.state aplati, l’orientation des images et la composition de l’état de chaque simulateur étant gérées une seule fois par son intégration src/lerobot/sim/integrations/<simulator>.py, que ce soit pour l’évaluation, le déroulement ou l’enregistrement, en local ou servi (voir Simulation : local ou servi). Pour LIBERO, par exemple, son adaptateur d’observation inverse les deux caméras et construit l’état 8-D (position de l’effecteur terminal, orientation axe-angle, articulations de la pince), si bien que ses processeurs d’environnement sont identitaires.

Placez la correspondance des observations d’un nouveau simulateur dans son intégration et ses conventions de contrôle dans la méthode conventions() de cette intégration, plutôt que dans un processeur d’environnement, afin qu’un robot simulé et un environnement servi en bénéficient également (voir Ajouter un benchmark).

Lorsqu'un processeur d'environnement est toujours l'outil

  • Environnements hors de lerobot.sim. Isaac Lab Arena est exécuté via sa propre fonction make_env dans son dépôt, avec des observations torch par lot ; IsaaclabArenaProcessorStep sélectionne et concatène ses clés d’état et convertit ses caméras.
  • Adaptations d’environnement spécifiques à la politique. make_env_pre_post_processors permet à une politique de remplacer la paire d’environnement, comme le font XVLA et Cosmos3 pour LIBERO.

L’évaluation admet un point de contrôle sur ce que ses processeurs d’environnement produisent : l’observation après le préprocesseur et l’action après le postprocesseur, les deux étant lues depuis leur transform_features. Une étape déclare donc sa sortie là-bas en fonction de son entrée, de la même manière qu’elle se comporte à l’exécution, par exemple une étape qui construit l’état uniquement lorsque sa clé source est présente. L’inférence distante n’applique aucun processeur d’environnement, de sorte qu’un point de contrôle servi à cet endroit doit prendre l’observation du simulateur et commander lui-même son action.

L'ordre de traitement lors de l'évaluation est le suivant :

observation = env_preprocessor(observation)   # environment-specific
observation = preprocessor(observation)       # policy's saved preprocessing (normalization, ...)
action = postprocessor(policy.select_action(observation))
action = env_postprocessor(action)            # environment-specific

Écrire un

Un processeur d'environnement est une étape de processeur ordinaire, retournée par la configuration :

from dataclasses import dataclass

from lerobot.envs.configs import EnvConfig
from lerobot.processor import ObservationProcessorStep, PolicyProcessorPipeline, ProcessorStepRegistry


@dataclass
@ProcessorStepRegistry.register(name="myenv_processor")
class MyEnvProcessorStep(ObservationProcessorStep):
    def observation(self, observation):
        processed = observation.copy()
        processed["observation.state"] = processed.pop("observation.myenv_state")
        return processed

    def transform_features(self, features):
        return features  # update if names or shapes change


@EnvConfig.register_subclass("myenv")
@dataclass
class MyEnvConfig(EnvConfig):
    ...

    def get_env_processors(self):
        return PolicyProcessorPipeline(steps=[MyEnvProcessorStep()]), PolicyProcessorPipeline(steps=[])

Gardez les spécificités de l’environnement (disposition des touches, repères de coordonnées) et laissez la normalisation et les transformations spécifiques au modèle aux processeurs de la politique.

Update on GitHub