LeRobot documentation
Pemroses Lingkungan
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 melaluimake_envmilik repositorinya sendiri, dengan observasi torch yang di-batch;IsaaclabArenaProcessorStepmemilih dan menggabungkan kunci state-nya serta mengonversi kameranya. - Adaptasi lingkungan yang spesifik untuk kebijakan.
make_env_pre_post_processorsmemungkinkan 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-specificMenulis 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