Brady Moon1 · Nayana Suvarna1 · Andrew Jong1 · Satrajit Chatterjee2 · Junbin Yuan1 · Muqing Cao1 · Sebastian Scherer1
1 Carnegie Mellon University · 2 University at Pennsylvania
Paper | Project Page | Video
ROS1 (Noetic) workspace for planner, simple simulation, and metrics/benchmark runs.
- Ubuntu: run ROS natively and use RViz (best experience).
- macOS: run in Docker and use Foxglove Bridge (most reliable).
- macOS RViz via noVNC is available, but treat it as optional/experimental.
This repository is the catkin workspace root:
src/contains ROS packagesbuild/,devel/,logs/are generated artifacts
Clone with submodules:
git clone --recurse-submodules <repo-url>If already cloned, run:
git submodule update --init --recursivePrereqs: Ubuntu 20.04 + ROS Noetic.
From repo root:
source /opt/ros/noetic/setup.bash
sudo apt update
sudo apt install -y \
python3-empy \
python3-catkin-tools \
python3-rosdep \
python3-vcstool
sudo rosdep init || true
rosdep update
rosdep install --from-paths src --ignore-src -r -y
catkin config --extend /opt/ros/noetic --cmake-args -DCMAKE_BUILD_TYPE=Release -DCATKIN_ENABLE_TESTING=OFF -Wno-dev
catkin build --no-status --summarize
source devel/setup.bashFor platforms without native ROS Noetic or when running headless, use Docker with Foxglove for visualization.
Install Foxglove first:
Start the container:
cd /home/moon/code/ia-tigris
docker compose -f src/ipp_planners/docker-compose.yml up -d rosBuild the workspace (first time only):
docker compose -f src/ipp_planners/docker-compose.yml exec ros bash
# Inside container:
cd /workspace
catkin config --extend /opt/ros/noetic
catkin build --no-status --summarize
source devel/setup.bashRun the demo:
# Inside the container (or in a new exec session):
roslaunch ipp_planners main.launch \
config:=fixed-wing \
planner:=tigris \
sim:=simple \
rviz:=false \
foxglove:=trueConnect Foxglove to: ws://localhost:8765
In Foxglove:
- Open Foxglove Desktop (or Web App).
- Click
Open connection. - Choose
WebSocket. - Enter
ws://localhost:8765. - Start streaming and add panels as needed (for example, 3D and Raw Messages).
Send a plan request (in another terminal):
docker compose -f src/ipp_planners/docker-compose.yml exec ros bash -c \
"source /workspace/devel/setup.bash && rosrun planner_map_interfaces pub_plan_request_from_yaml.py \$(rospack find planner_map_interfaces)/config/fixed-wing/plan_requests/benchmarks/search_scenario_1.yaml"The workspace is mounted as a volume (../../:/workspace), so build artifacts (build/, devel/, logs/) appear on the host.
RViz is enabled by default in main.launch.
roslaunch ipp_planners main.launch \
config:=fixed-wing \
planner:=tigris \
sim:=simpleIn a second terminal:
source devel/setup.bash
rosrun planner_map_interfaces pub_plan_request_from_yaml.py \
$(rospack find planner_map_interfaces)/config/fixed-wing/plan_requests/aug_workshop_demos/search-track_scenario.yamlSee Docker Setup section above for the complete workflow.
Key points:
- Use
rviz:=false foxglove:=truewhen launching - Connect to
ws://localhost:8765in Foxglove - Foxglove bridge is already exposed via compose on port 8765
From repo root on host:
ENABLE_HEADLESS_DISPLAY=1 docker compose -f src/ipp_planners/docker-compose.yml --profile vnc up -d
docker compose -f src/ipp_planners/docker-compose.yml exec ros bashNotes:
ENABLE_HEADLESS_DISPLAY=1is required for RViz/noVNC mode.- Apple Silicon (M1/M2/M3): the
novncimage islinux/amd64, so it runs via emulation. If Docker asks, enable x86/amd64 emulation (Rosetta) in Docker Desktop settings.
Inside container:
roslaunch ipp_planners main.launch \
config:=fixed-wing \
planner:=tigris \
sim:=simpleOpen:
http://localhost:8080
docker compose -f src/ipp_planners/docker-compose.yml exec ros bash
roslaunch metrics sim_mc_runs.launch \
config:=fixed-wing \
sim:=simple \
include_cpu_mem_monitor:=trueFor isolated testing, reproducibility, or CI (platforms without native ROS), use the benchmark script:
src/ipp_planners/scripts/build_test_benchmark.shThis builds an isolated Docker image with the full workspace (no host artifacts), runs unit tests and benchmarks, and saves results to src/ipp_planners/test_results/<timestamp>/.
Options:
-b true/false- Build image from scratch-u true/false- Run unit tests-t true/false- Run benchmarks-l true/false- Run tests locally (no Docker)
- Active image: src/ipp_planners/Dockerfile (used by src/ipp_planners/docker-compose.yml and src/ipp_planners/scripts/build_test_benchmark.sh).
Default output directory is configured in:
src/ipp_metrics/launch/sim_mc_runs.launch