Hemisphere Coverage is a ROS 2 package implementing hemispherical coverage control for teams of multirotors using spherical Voronoi partitioning, geodesic motion, and optional Gaussian density weighting.
The node computes optimal viewpoints on a hemisphere and commands a swarm of PX4-controlled UAVs through ROS 2 Offboard velocity setpoints.
This framework supports real-time multi-UAV coordination. Robots autonomously distribute themselves over a hemispherical surface, enabling applications such as surveillance, inspection, environmental monitoring, and distributed sensing.
The coverage computation relies on a spherical Voronoi diagram, generated through an adaptation of Fortune’s sweep-line algorithm to a spherical surface.
This provides an overall O(n log n) complexity for Voronoi region generation, ensuring scalability as the number of UAVs increases.
The Voronoi implementation is conceptually inspired by the approach described here:
https://whenitsdone.org/2014/07/29/map-generation-on-spherical-planet-part-i/
Each drone is assigned a region on the hemisphere via the spherical Voronoi diagram and moves along geodesics toward its region centroid, ensuring optimal viewpoint distribution.
The package publishes PX4-compatible velocity commands (geometry_msgs/TwistStamped) to drive multiple drones in Offboard mode.
In addition to uniform coverage, the system can bias drone distribution using a Gaussian density model, causing agents to converge toward areas of higher importance on the hemisphere.
The following figure illustrates both uniform and Gaussian-biased coverage simulations:
- ROS 2 (tested on Humble)
- Dependencies:
rclcpp,nav_msgs,geometry_msgs,tf2_*,std_srvs,px4_msgs,hemisphere_interfaces, Eigen3 - C++17 compiler
This package integrates with PX4 through the ROS 2–PX4 Offboard bridge.
/<uav_name>/command/setVelocityAcceleration→ primary Offboard velocity control/<uav_name>/command/setPose→ optional pose reference
The node emits standard ROS 2 geometry messages, which PX4 consumes through its Offboard interface.
cd <ros2_ws>
colcon build --packages-select hemisphere_coverage
source install/setup.bashDefault configuration: config/hemisphere_config.yaml
Geometric tuning: config/coverage_geometric.json
| Parameter | Description |
|---|---|
uav_name |
UAV namespace (e.g., Drone1) |
uav_id |
Numeric drone ID |
neighbors |
Number of neighbor odometry topics |
geometric |
Enables uniform hemisphere coverage |
gaussian |
[x, y, z, sigma] parameters for Gaussian density bias |
velocity_control |
Enables PX4 velocity Offboard mode |
pid_yaw.* |
Yaw controller parameters |
hemi.cx, cy, cz |
Hemisphere center coordinates |
- UAV odometry
- Neighbor UAV odometry
- Gaussian parameters
- Hemisphere center/angles
- Mission/state commands
- Velocity setpoints for PX4 Offboard mode
- Pose setpoints
- UAV mission/coverage state
/<uav_name>/setGaussian— updates the Gaussian density model
-
hemisphere_coverage node
ROS 2 interface, PX4 Offboard control loop, parameter handling. -
Coverage core
Spherical Voronoi construction, centroid computation (geometric and Gaussian-weighted), geodesic motion generation. -
Configuration assets
YAML/JSON files for runtime tuning.
This package contributes to a broader research effort involving:
- Multi-agent hemispherical coverage
- Distributed control and optimization
- Swarm robotics with PX4-based aerial vehicles
- Density-biased view planning via Gaussian fields
- Real-time control architectures for UAV teams
The methodology has been validated in simulation and is compatible with real PX4 platforms.
This repository is provided for research and development purposes.
