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.

Which robot types are initialized in the AirGen Simulation environment depends on the configuration as selected through the session configuration GUI for OpenGRID or defined through the session configuration file for GRID Enterprise

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:

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

airgen_drone_0.client.takeoffAsync().join()
For basic robot control, refer to the Robot API Documentation.

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, MultirotorClient, and CarClient reference pages.

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

import airgen
client = airgen.VehicleClient()

Ground Truth

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

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

where simGetVehiclePose returns a Pose object consisting of 3D position and quaternion vectors, and simGetGroundTruthKinematics returns a KinematicsState object 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 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 and CarClient reference pages.

Was this page helpful?