> ## Documentation Index
> Fetch the complete documentation index at: https://docs.generalrobotics.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Session Configuration

An AirGen session is described by one config file: which robot, which scene,
what the cameras look like, and what the world conditions are. The CLI writes a
working config when you start a session — you edit it when you need something
the picker doesn't offer.

## Robot and scene

```yaml theme={null}
scenario:
  id: substation
robots:
  - id: astro
    name: drone
    pose:
      position: [0.0, 0.0, -5.0]
      orientation_rpy_deg: [0.0, 0.0, 90.0]
```

`id` values come from the catalogs in [Robots](/simulation/airgen/robots) and
[Scenes](/simulation/airgen/scenes). `name` is what you address the vehicle by
from Python.

<Warning>
  Poses are in the **NED frame** — X north, Y east, Z **down**. A negative Z is
  above the ground. This is an aviation convention and it is a common source of
  confusion if you are coming from Isaac, which is Z-up.
</Warning>

Orientation is either `orientation_rpy_deg` (roll, pitch, yaw in degrees) or
`rotation_wxyz` (quaternion). Set one, not both.

## Cameras

```yaml theme={null}
cameras:
  - name: front
    streams:
      - type: rgb
        width: 1280
        height: 720
      - type: depth
        width: 640
        height: 480
```

Each camera can carry several streams, so one physical viewpoint yields RGB and
depth together.

### Noise overlay

Cameras support a noise overlay for testing perception against degraded video —
sensor grain, horizontal wave distortion, and scan-line artifacts:

```yaml theme={null}
cameras:
  - name: front
    noise:
      enabled: true
      rand_contrib: 0.2
      rand_size: 0.01
      horz_wave_contrib: 0.1
      horz_wave_strength: 0.05
```

Every field is optional; the ones you omit keep the engine default.

## World conditions

### Geographic origin

Anchor the world origin to real coordinates so GPS output matches a real site:

```yaml theme={null}
extensions:
  origin_geopoint:
    latitude: 47.641468
    longitude: -122.140165
    altitude: 122.0
```

### Time of day

Sun position is driven by a wall-clock datetime:

```yaml theme={null}
extensions:
  time_of_day:
    enabled: true
    start_datetime: "2026-06-21 06:30:00"
    utc_offset: -7.0
    celestial_clock_speed: 1.0
```

`celestial_clock_speed` multiplies how fast the sun moves — raise it to sweep a
whole day of lighting in a short run.

### Viewport

```yaml theme={null}
extensions:
  view_mode: SpringArmChase
```

Accepted values: `Fpv`, `GroundObserver`, `FlyWithMe`, `Manual`,
`SpringArmChase`, `Backup`, `NoDisplay`, `Front`. This controls only what the
streamed viewport shows — it has no effect on the robot or on
`getImage()` output.

<Note>
  The config is validated strictly: an unknown key is an error rather than a
  silently ignored line, so a typo fails the session start instead of quietly
  doing nothing.
</Note>


## Related topics

- [Common FAQs](/faq/common-faqs.md)
- [Session Config Overview](/simulation/isaac/session_configuration/overview.md)
- [VR Teleop Guide](/simulation/isaac/teleoperation/vr-teleop-guide.md)
- [Environment Config](/simulation/isaac/session_configuration/env.md)
- [Workflow Config](/simulation/isaac/session_configuration/workflow.md)
