AirLab · Carnegie Mellon University

Build the autonomy,
not the scaffolding.

AirStack is an open ROS 2 stack for aerial robots — simulator, ground control, and layered onboard autonomy that launch as one system.

zero → drones flying in sim
$ git clone --recursive -j8 [email protected]:castacks/AirStack.git && cd AirStack
$ ./airstack.sh install && ./airstack.sh setup
$ airstack up --play --wait

Background: three drones flying the real stack in Isaac Sim, the Foxglove GCS, and MS AirSim — recorded from this repo, unstaged.

One command brings up sim, robots, and ground control

airstack up starts the simulator, one container per robot, and a Foxglove-based ground control station, wired together over ROS 2. Flags select the simulator, scene, and fleet size — no launch-file surgery.

variants
airstack up --sim airsim --scene neighborhood
airstack up --sim isaac --robots 3 --scene full-warehouse
airstack up --fleet sim_three_mixed
airstack ready
Waiting for the AirStack stack to become flight-ready...
 robot containers running
 sim publishing /clock
 robot_1: autonomy nodes up
 robot_1: MAVROS connected to PX4
 robot_1: PX4 EKF ready (armable)
 robot_2 … robot_3 …
Stack is flight-ready (143s). Takeoff is available.

Actual airstack ready output from the 3-robot Isaac Sim bring-up shown in the hero video.

Isaac Sim: three robots, parallel TakeoffTask + FixedTrajectoryTask action goals — the same actions the GCS and system tests send.

Same code in sim and on the vehicle

The desktop dev container and the Jetson (L4T) onboard container extend one base service and launch the same stack entry point. What you test in simulation is what the vehicle runs.

robot/docker/docker-compose.yaml
robot-desktop:        # x86 dev machine + sim
  extends: {file: ./robot-base-docker-compose.yaml,
            service: robot_base}
robot-l4t:            # Jetson Orin, JetPack/L4T
  extends: {file: ./robot-base-docker-compose.yaml,
            service: robot_base}
# both dispatch the same entry launch:
#   stacks/full_default/launch/stack.launch.xml

CI flies the whole stack, not just unit tests

Pull requests run pytest campaigns against the live simulators on ephemeral GPU runners: bring-up, sensor rates, takeoff–hover–land, fixed trajectories with cross-track error, and waypoint navigation judged on the odometry track.

build_dockerimage builds
build_packagescolcon in every container
livelinesscontainers · /clock · nodes
sensorstopic Hz · RTF
takeoff_hover_landflight chain per robot
autonomytrajectories + path RMSE
waypoint_flightordered corridor arrival
run it yourself — or comment /pytest on a PR
airstack test -m takeoff_hover_land --sim isaacsim --num-robots 1 -v

Marks defined in tests/; simulation marks run on one-job ephemeral GPU workers, and metrics regressions fail the report.

AI agents can drive this repo

Module boundaries, an AGENTS.md contract, and 23 step-by-step skills give coding agents the same on-ramp as humans: scaffold a package, wire it into a stack, fly it in sim, document it.

Proof over promise: every video on this page was captured by an AI agent — it brought the stack up, scripted the flights through the task actions, implemented the Isaac viewport follow-camera it filmed with (pegasus_app.py), and edited the clips.

.agents/skills/
create-modulecreate-stack integrate-module-into-layeradd-ros2-package write-launch-filetest-in-simulation debug-moduleadd-unit-tests configure-multi-robotwrite-isaac-sim-scene visualize-in-foxgloveadd-behavior-tree-node +11 more

Real skill guides in the repo — each one a tested, end-to-end workflow an agent (or a new teammate) can follow.

The whole system on one screen

One workstation, one airstack up: Isaac Sim with the drone follow-camera, Foxglove tracing all three robots' trajectories live, and the CLI's flight-ready checklist. Layered autonomy — sensors, perception, planning, controls, interface — runs underneath, each module swappable behind standard ROS 2 topics (architecture docs).

Desktop screenshot: Isaac Sim warehouse with drones flying, Foxglove showing three live trajectory traces, and a terminal with the airstack ready checklist

Unedited desktop capture during the 3-robot mission recorded for this page — sim, ground control, and CLI, all live.

Built and flown by the AirLab

AirStack is developed at Carnegie Mellon University's Robotics Institute AirLab (PI: Sebastian Scherer), building on the lab's research in obstacle avoidance, multi-robot exploration, vision-based state estimation, and search-and-rescue field robotics. Contributors span students, researchers, and field teams.

Fly it tonight

No Linux box or GPU? Run AirStack on OSMO from any laptop.