Quickstart
Sim-first onboarding for the UAV framework.
Prerequisites
- ROS 2 Humble sourced on the machine
- A built workspace
- A PX4-Autopilot checkout, usually at
~/PX4-Autopilot - For sim, Gazebo and
MicroXRCEAgentavailable onPATH pydantic>=2,<3installed in the Python environment that will runuav
Build And Source
source /opt/ros/humble/setup.bash
cd /home/ubuntu/monorepo/controls/sae_2025_ws
colcon build --packages-select sim uav payload
source install/setup.bash
If your environment is missing the UAV runtime dependency, install it before launch:
python3 -m pip install "pydantic>=2,<3"
Single Vehicle
Launch the default single-vehicle stack:
ros2 launch uav main.launch.py
Useful overrides on the legacy single-vehicle path:
- mission_name:=hover
- vehicle_name:=uav
- px4_path:=~/PX4-Autopilot
- params_file:=$(pwd)/src/uav/launch/launch_params_hardware.yaml
What success looks like:
- Gazebo starts
- the selected mission loads
- the mission node appears under /<vehicle>/mission
- UAV missions start PX4 SITL when sim:=true
- logs move past startup and the mode manager begins running the mission
Fleet Launch
Launch a multi-vehicle sim fleet by passing a fleet YAML file:
ros2 launch uav fleet.launch.py \
fleet_file:=$(pwd)/src/uav/uav/fleets/example_fleet.yaml
What success looks like: - the sim backend/world starts once - each managed vehicle starts in its own namespace - UAV entries attach to backend controllables and start PX4 SITL - payload entries start payload runtime only - missions that need camera or vision bring up the required camera pipeline - missions with service-based CV also launch the relevant vision nodes
Where Things Live
- Missions:
src/uav/uav/missions/*.yaml - Sim stages:
src/sim/sim/simulations/<world>/<stage>.yaml - Fleet YAMLs:
src/uav/uav/fleets/*.yaml
Notes
main.launch.pyis the legacy single-vehicle compatibility pathfleet.launch.pyis the entry point for multi-vehicle orchestrationvehicle_nameis the namespace/identity used by the runtime