LeRobot documentation

Pemroses Lingkungan

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Pemroses Lingkungan

Environment processors mengubah observasi lingkungan sebelum prosesor milik policy, dan mengubah aksi policy sebelum lingkungan. Setiap konfigurasi lingkungan mengembalikan pasangannya dari get_env_processors(), dan make_env_pre_post_processors membangunnya untuk evaluasi, evaluasi saat pelatihan, dan robot simulasi.

Lingkungan simulasi tidak memerlukan apa pun

Lingkungan simulasi mencapai kebijakan dalam bentuk kanonik: gambar sebagai observation.images.<camera> (atau observation.image), dan keadaan sebagai satu observation.state datar, dengan orientasi gambar dan komposisi keadaan masing-masing simulator ditangani sekali oleh integrasi src/lerobot/sim/integrations/<simulator>.py-nya, baik untuk evaluasi, rollout, maupun perekaman, secara lokal maupun yang disajikan (lihat Simulasi: lokal atau disajikan). Untuk LIBERO, misalnya, adapter observasinya membalik kedua kamera dan membangun keadaan 8-D (posisi ujung efektor, orientasi sumbu-sudut, sendi gripper), sehingga pemroses lingkungannya bersifat identitas.

Letakkan pemetaan observasi simulator baru di integrasinya dan konvensi kendalinya di conventions() integrasi tersebut, bukan di environment processor, sehingga robot simulasi dan lingkungan yang disajikan juga menerimanya (lihat Menambahkan benchmark).

Ketika pemroses lingkungan masih menjadi alat

  • Lingkungan di luar lerobot.sim. Isaac Lab Arena dijalankan melalui make_env milik repositorinya sendiri, dengan observasi torch yang di-batch; IsaaclabArenaProcessorStep memilih dan menggabungkan kunci state-nya serta mengonversi kameranya.
  • Adaptasi lingkungan yang spesifik untuk kebijakan. make_env_pre_post_processors memungkinkan kebijakan mengganti pasangan lingkungan, seperti yang dilakukan XVLA dan Cosmos3 untuk LIBERO.

Evaluasi menerima checkpoint berdasarkan apa yang dihasilkan oleh pemroses lingkungannya: observasi setelah preprocessor dan aksi setelah postprocessor, keduanya dibaca dari transform_features mereka. Oleh karena itu, sebuah langkah menyatakan outputnya di sana sebagai fungsi dari inputnya, sesuai dengan perilakunya saat runtime, misalnya langkah yang membangun state hanya jika kunci sumbernya ada. Inferensi jarak jauh tidak menerapkan pemroses lingkungan, sehingga checkpoint yang disajikan di sana harus mengambil observasi simulator dan memerintahkan aksinya sendiri.

Urutan pemrosesan selama evaluasi adalah:

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

Menulis satu

Prosesor lingkungan adalah langkah prosesor biasa, yang dikembalikan dari konfigurasi:

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

Jadikan spesifik lingkungan (tata letak tombol, bingkai koordinat) dan serahkan normalisasi serta transformasi spesifik model ke prosesor kebijakan.

Update on GitHub