LeRobot documentation

Процессоры среды

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Процессоры среды

Процессоры среды преобразуют наблюдения среды до применения собственных процессоров политики, а действия политики — до передачи в среду. Каждая конфигурация среды возвращает свою пару из get_env_processors(), а make_env_pre_post_processors создаёт их для оценки, оценки во время обучения и симулированного робота.

Симулированные среды не требуют этого

Симулированные среды передают политику уже канонические данные: изображения в виде observation.images.<camera> (или observation.image), состояние — как одно плоское observation.state. Ориентация изображений и состав состояния для каждого симулятора обрабатываются единожды в его интеграции src/lerobot/sim/integrations/<simulator>.py — как для оценки, так и для rollout и записи, будь то локальный запуск или серверный режим (см. Симуляция: локально или через сервер). Например, для LIBERO адаптер наблюдений переворачивает изображения с обеих камер и формирует 8-мерное состояние (позиция конечного эффектора, ориентация в виде оси-угла, суставы захвата), поэтому процессоры среды для него являются тождественными.

Разместите отображение наблюдений нового симулятора в его интеграции, а соглашения о управлении — в методе conventions() этой интеграции, а не в процессоре среды, чтобы симулируемый робот и обслуживаемая среда также получали эти настройки (см. Добавление бенчмарка).

Когда процессор среды по-прежнему является инструментом

  • Среды, отличные от lerobot.sim. Isaac Lab Arena работает через собственный make_env из своего репозитория, с батчами наблюдений torch; IsaaclabArenaProcessorStep выбирает и конкатенирует свои ключи состояния и преобразует свои камеры.
  • Адаптация окружения, специфичная для политики. make_env_pre_post_processors позволяет политике заменить пару окружения, как это делают XVLA и Cosmos3 для LIBERO.

Оценка допускает контрольную точку на основе того, что производят процессоры окружения: наблюдение после предобработчика и действие после постобработчика, оба считываются из их transform_features. Таким образом, шаг объявляет свой вывод там как функцию от входа, отражая его поведение во время выполнения, например, шаг, который формирует состояние только при наличии исходного ключа. Удалённый вывод не применяет процессоры окружения, поэтому контрольная точка, обслуживаемая там, должна сама принимать наблюдение симулятора и отдавать его действие.

Порядок обработки при оценке:

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

Создание одного

Процессор среды — это обычный шаг процессора, возвращаемый из конфигурации:

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=[])

Держите специфичные для окружения детали (раскладки клавиатуры, системы координат) и передавайте нормализацию и специфичные для модели преобразования процессорам политики.

Update on GitHub