# Ortam İşleyicileri

Ortam işleyicileri, politikanın kendi işleyicilerinden önce ortamın gözlemlerini, ortamdan önce ise politikanın eylemlerini dönüştürür. Her ortam yapılandırması, çiftini `get_env_processors()` üzerinden döndürür ve `make_env_pre_post_processors`, değerlendirme, eğitim sırasında değerlendirme ve sim robotu için bunları oluşturur.

## Simüle ortamların hiçbiri gerekmez

Simüle ortamlar, politika tarafından zaten kanonik olarak erişilir: görüntüler `observation.images.<camera>` (veya `observation.image`) olarak, durum ise tek bir düz `observation.state` olarak iletilir; her simülatörün görüntü yönelimi ve durum kompozisyonu, değerlendirme, rollout ve kayıt için, yerel veya sunulan (bkz. [Simülasyon: yerel veya sunulan](./simulation)) her durumda, bir kez `src/lerobot/sim/integrations/<simulator>.py` entegrasyonu tarafından ele alınır. Örneğin LIBERO için, gözlem adaptörü her iki kamerayı da çevirir ve 8 boyutlu durumu (uç efektor konumu, eksen-açı yönelimi, kavrama eklemeleri) oluşturur; bu nedenle ortam işleyicileri kimlik (identity) işlemidir.

Yeni bir simülatörün gözlem eşlemesini entegrasyonuna, kontrol kurallarını ise o entegrasyonun `conventions()` fonksiyonuna, bir ortam işleyicisine (environment processor) değil, yerleştirin; böylece sim robotu ve sunulan ortam da bunlardan yararlanır (bkz. [Bir benchmark ekleme](./adding_benchmarks)).

## Bir ortam işleyicisi hâlâ bir araçken

- **`lerobot.sim` dışındaki ortamlar.** Isaac Lab Arena, kendi deposundaki `make_env` üzerinden çalışır ve toplu (batched) torch gözlemleri kullanır; `IsaaclabArenaProcessorStep`, durum anahtarlarını seçip birleştirir ve kameralarını dönüştürür.
- **Politika bazlı ortam uyarlamaları.** `make_env_pre_post_processors`, bir politikanın ortamın çiftini değiştirmesini sağlar; XVLA ve Cosmos3, LIBERO için bunu yapar.

Evaluation, ortam işleyicilerinin ürettiklerini bir checkpoint üzerinde kabul eder: ön işleyiciden sonraki gözlem ve son işleyiciden sonraki eylem, her ikisi de `transform_features` içinden okunur. Bu nedenle bir adım, çalışma zamanındaki davranışını yansıtacak şekilde çıktısını girdisinin bir fonksiyonu olarak orada beyan eder; örneğin, kaynak anahtarı mevcut olduğunda durumu yalnızca o zaman oluşturan bir adım. Uzaktan çıkarım hiçbir ortam işleyicisi uygulamaz, bu nedenle orada sunulan bir checkpoint, simülatörün gözlem ve komutunu kendisi eylemine dönüştürmelidir.

Değerlendirme sırasında işleme sırası şudur:

```python
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
```

## Biri yazma

Bir ortam işlemcisi, yapılandırmadan döndürülen sıradan bir işlemci adımıdır:

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

Ortamla ilgili olanları (tuş düzenleri, koordinat çerçeveleri) koruyun ve normalizasyonu ile modele özgü dönüşümleri politikanın işleyicilerine bırakın.

