> ## Documentation Index
> Fetch the complete documentation index at: https://scaledfoundations-rebrand.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Robots & AirGen Client

AirGen currently supports two fundamental types of robots:

* **Aerial robots** including quadrotors, vertical takeoff/landing vehicles, *etc.*
* **Wheeled robots** including cars, forklifts, and other ground platforms.

Even though these robot categories have different methods for control, AirGen provides a common API structure for sensors, cameras, and planning.

<Note> Which robot types are initialized in the AirGen Simulation environment depends on the configuration as selected through the [session configuration GUI](/grid/open-grid/workspace/robot-config) for OpenGRID or defined through the [session configuration file](/simulation/airgen/features/config-settings#simulation-mode-and-settings) for GRID Enterprise </Note>

## AirGen Client

Upon the start of a session in GRID, a Python object associated with the API of the robot is pre-defined in the first cell of the notebook, named as `airgen_drone_0` or `airgen_car_0` by default, depending on the category of the robot.
For example, a drone may be defined as:

```Python
from grid.robot.aerial.airgen_drone import AirGenDrone
airgen_drone_0 = AirGenDrone()
```

This high-level object contains higher level functions which are described in the [Robot API Documentation](/robot-api/overview) as well as an AirGen `client` which enables low-level communication with the AirGen simulation environment.
The user can directly interact with the low-level AirGen API associated with the robot or the simulation through `airgen_<robot>_0.client`.
For example, the drone can be commanded to takeoff with

```Python
airgen_drone_0.client.takeoffAsync().join()
```

<Tip> For basic robot control, refer to the [Robot API Documentation](/robot-api/overview). </Tip>

The base class of the client is `VehicleClient`, with child classes `MultirotorClient` and `CarClient` for aerial and wheeled robots, respectively. Full documentation can be found in [VehicleClient](/simulation/airgen/reference/vehicle-client), [MultirotorClient](/simulation/airgen/reference/multirotor-client), and [CarClient](/simulation/airgen/reference/car-client) reference pages.

<Tip>
  A client can be instantiated independently of a GRID robot object, assuming that the simulation is running:

  ```Python
  import airgen
  client = airgen.VehicleClient()
  ```
</Tip>

### Ground Truth

The airgen client also allows access to simulation ground truth.
For example, we can access the pose and kinematics via

```Python
import airgen
client = airgen.VehicleClient
pose = client.simGetVehiclePose()
kinematics = client.simGetGroundTruthKinematics()
```

where `simGetVehiclePose` returns a [Pose object](/simulation/airgen/reference/datatypes#pose) consisting of 3D position and quaternion vectors, and `simGetGroundTruthKinematics` returns a [KinematicsState object](/simulation/airgen/reference/datatypes#kinematicsstate) made up of pose, twist, and acceleration.

### Environment

The client also provides access to the simulation environment, including object interactions, weather, time of day, *etc.* as detailed in the [Environment](/simulation/airgen/features/environment) section.

### Robot-Specific Interface

The `MultirotorClient` and `CarClient` classes provide additional, form-factor specific controls and functionality on top of `VehicleClient`.
These additional features are described in the [MultirotorClient](/simulation/airgen/reference/multirotor-client) and [CarClient](/simulation/airgen/reference/car-client) reference pages.
