mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-18 15:33:34 +08:00
ROS 2 package for coordinating PX4 SIH multi-drone swarm missions via XRCE-DDS. Includes: - swarm_controller.py: orchestrates N drones through 6 phases (EV lock, arm/takeoff, grid hold, circle transition, circle hold, kamikaze dive) with DDS cross-talk filtering for multi-instance XRCE-DDS setups - vision_provider.py: publishes noisy VehicleOdometry from ground truth for EKF2 external vision fusion (placeholder for non-GPS) - swarm_launch.py: ROS 2 launch file for N vision providers + controller - run_swarm.sh: Docker entrypoint that launches PX4 instances, XRCE-DDS agent, and ROS 2 nodes - Dockerfile + build_docker.sh: containerized build with ROS 2 Jazzy, px4_msgs from PX4 source, and the swarm package Validated with 4 drones: all phases complete, 4/4 impacts, ULogs generated per instance (~16 MB each). Signed-off-by: Ramon Roche <mrpollo@gmail.com>
36 lines
1.1 KiB
Bash
Executable File
36 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build the px4-swarm-ros2 Docker image with px4_msgs matching this PX4 commit.
|
|
# Run from anywhere; the script locates PX4 root automatically.
|
|
#
|
|
# Usage: ./build_docker.sh
|
|
|
|
set -eo pipefail
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
PX4_ROOT="$( cd "${SCRIPT_DIR}/../../.." && pwd )"
|
|
|
|
echo "PX4 root: ${PX4_ROOT}"
|
|
echo "Staging px4_msgs definitions from this PX4 commit..."
|
|
|
|
# Stage msg/srv files into the Docker build context
|
|
STAGING_DIR="${SCRIPT_DIR}/_px4_msgs_defs"
|
|
rm -rf "${STAGING_DIR}"
|
|
mkdir -p "${STAGING_DIR}/msg" "${STAGING_DIR}/srv"
|
|
|
|
cp "${PX4_ROOT}"/msg/*.msg "${STAGING_DIR}/msg/"
|
|
cp "${PX4_ROOT}"/msg/versioned/*.msg "${STAGING_DIR}/msg/"
|
|
cp "${PX4_ROOT}"/srv/*.srv "${STAGING_DIR}/srv/"
|
|
|
|
echo "Staged $(ls "${STAGING_DIR}/msg/" | wc -l | tr -d ' ') .msg files and $(ls "${STAGING_DIR}/srv/" | wc -l | tr -d ' ') .srv files"
|
|
echo ""
|
|
echo "Building Docker image..."
|
|
|
|
docker build -t px4-swarm-ros2 "${SCRIPT_DIR}"
|
|
|
|
# Clean up staged files
|
|
rm -rf "${STAGING_DIR}"
|
|
|
|
echo ""
|
|
echo "Done. Run with:"
|
|
echo " docker run -it --rm -v ${PX4_ROOT}:/px4 px4-swarm-ros2 bash /px4/Tools/simulation/swarm_ros2/run_swarm.sh 4"
|