This is the install recipe for the development host. We’re using Ubuntu 24.04 LTS (because ROS 2 Jazzy is tied to it) on D2 (RTX 5070, 64 GB RAM, NVMe SSD). The same recipe works on any reasonably modern x86-64 Linux machine with at least 16 GB RAM and ~50 GB free disk; without an NVIDIA GPU you’ll be CPU-bound for RL training but everything else works.
Prerequisites
A clean Ubuntu 24.04 install. Don’t try this on 22.04 — ROS 2 Jazzy doesn’t support it. Don’t try it on a non-LTS Ubuntu either; you’ll be fighting package versions.
Step 1 — System dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake git python3-pip python3-venv \
curl wget locales gnupg lsb-release
Step 2 — ROS 2 Jazzy
Follow the official ROS 2 install guide for the apt-repo setup, then:
sudo apt install -y ros-jazzy-desktop python3-colcon-common-extensions \
python3-rosdep ros-jazzy-rmw-cyclonedds-cpp
sudo rosdep init && rosdep update
Add the source-line to your shell rc:
echo 'source /opt/ros/jazzy/setup.bash' >> ~/.bashrc
source ~/.bashrc
Verify:
printenv ROS_DISTRO # should print: jazzy
ros2 doctor # should mostly print OK
Step 3 — Gazebo Harmonic
sudo apt install -y ros-jazzy-ros-gz
This pulls Gazebo Harmonic (gz-sim8) as a dependency. Verify:
gz sim --version # expect Gazebo Sim, version 8.x
Step 4 — ArduPilot SITL
ArduPilot SITL is built from source — distros don’t ship recent versions.
cd ~/git
git clone https://github.com/ArduPilot/ardupilot
cd ardupilot
git submodule update --init --recursive
./Tools/environment_install/install-prereqs-ubuntu.sh -y
. ~/.profile # picks up newly-set PATH
./waf configure --board sitl
./waf copter
Build takes ~10 minutes on D2. After it finishes:
./Tools/autotest/sim_vehicle.py -v ArduCopter -f gazebo-iris --console --map
If MAVProxy shows Mode STABILIZE within ~10 seconds, the install worked.
Step 5 — claudeDrone repos
cd ~/git/proj/aerosearch
git clone <claudedrone-git-url>
cd claudedrone-git/simulation
colcon build --symlink-install
source install/setup.bash
--symlink-install is important — it means Python file changes don’t require a rebuild.
Step 6 — Smoke test
cd ~/git/proj/aerosearch/claudedrone-git/simulation
./help_scripts/launch.sh --sim --headless -d -log
Within ~30 seconds you should see ArduPilot heartbeats arriving over MAVLink. If you see MAVProxy: Waiting for heartbeat from tcp:127.0.0.1:5760 and it never resolves, head to SITL “Waiting for heartbeat” — three causes — that’s the most-likely-to-bite issue on a fresh install.
What’s next
- ROS 2 Jazzy workspace bootstrap — building your first node from scratch
- SITL waiting for heartbeat — the canonical first-time bring-up problem
- Simulation environment overview — what you’ve just installed, conceptually