Skip to main content
AirGen exposes dedicated motion APIs for each robot family. Every call runs asynchronously and returns a msgpackrpc.future.Future; invoke .join() to block until completion or .get() to fetch the result. Use the pages below to deep dive into flight, driving, and locomotion patterns.
Review the Data Types page for a refresher on Vector3r, Quaternionr, and Pose before scripting trajectories.

Enable API Control

Before any robot will respond to commands you must claim control with enableApiControl(True). This hands the vehicle over to the AirGen client so it can accept autonomy commands instead of manual inputs. Remember to release control with enableApiControl(False) when you are done so the simulator can return to its default state (or accept teleop again).
import airgen

drone = airgen.MultirotorClient()
drone.enableApiControl(True)
drone.armDisarm(True)  # multirotor and legged robots require arming

car = airgen.CarClient()
car.enableApiControl(True)

quadruped = airgen.LeggedClient()
quadruped.enableApiControl(True, robot_name="quadruped0")
quadruped.armDisarm(True, robot_name="quadruped0")
Failing to enable API control (or to arm platforms that require it) leaves motion commands queued but ignored. Issue the calls above once per session before sending trajectories. You can safely toggle control mid-run if you need to switch between autonomous and manual operations.

Choose Your Robot

  • Multirotor Movement – world-frame, body-frame, and waypoint commands for drones and VTOL craft.
  • Car Movement – throttle/steering control, cruise regulation, and waypoint following for wheeled robots.
  • Legged Movement – velocity and step primitives for quadrupeds with body-frame helpers.