Workspace for the Peregrine aerial autonomy stack using ROS 2 + PX4 for both simulation and real hardware (Jetson Orin / RPi5 companion setups).
peregrine/
├── src/
│ ├── peregrine_core/
│ ├── peregrine_app_nav/ # app repo (submodule)
│ ├── peregrine_app_vision/# app repo (submodule)
│ └── px4_msgs/ # PX4 messages (submodule)
├── docker/
│ ├── docker/ # Dockerfiles
│ ├── compose/ # compose stacks by target
│ ├── config/ # entrypoint scripts
│ ├── .env # version pins
│ └── Makefile # operational commands
└── .devcontainer/
Run commands from docker/:
cd docker
make build-sim
make shell-simAll targets mount the entire repo workspace into ${ROS_WS} (ROS_WS default: /ros2_ws), so code and colcon artifacts persist on host.
make shell-sim is the preferred persistent dev shell; make dev is disposable (run --rm).
Use make sim / make jetson / make rpi5 when you want attached service logs in the terminal.
Containers run as a non-root user mapped to host UID/GID (CONTAINER_USER, USER_UID, USER_GID in docker/.env).
This workspace is a Git super-repo with submodules under src/.
Clone with:
git clone --recurse-submodules <super-repo-url>
cd peregrineIf already cloned without submodules:
git submodule update --init --recursiveAdd a new app repo as a submodule:
git submodule add <app-repo-url> src/peregrine_app_<name>
git commit -m "Add app submodule: peregrine_app_<name>"Update submodules to tracked branches (.gitmodules):
git submodule update --remote --recursive
git add src
git commit -m "Bump submodule pointers"Open this repo root in VS Code, then use Dev Containers: Reopen in Container.
The configuration in .devcontainer/devcontainer.json reuses the simulation compose service with the same workspace bind mount and non-root container user.
See docs/WORKSPACE_AND_IMAGE_STRATEGY.md for:
- Sim vs Jetson vs RPi behavior
- Core vs app package layout
- Current local image naming and operational workflow