UAV Coverage Path Planner
A standalone Python library and CLI for constraint-aware UAV area-coverage route planning. It creates lawnmower routes inside a polygon and uses a deterministic genetic algorithm to jointly optimize:
- heading angle;
- lane spacing;
- cruise speed.
The optimizer derives feasible lane-spacing and speed bounds from generic camera geometry, desired ground sampling distance (GSD), overlap requirements, capture interval, aircraft speed, range, flight time and reserve energy. It contains no maps, hardware drivers, user data, model files, branding assets, or application code.
中文说明见 README_zh-CN.md。
Install
python -m pip install uav-coverage-path-planner
For development:
git clone https://github.com/luoyuejun9/uav-coverage-path-planner.git
cd uav-coverage-path-planner
python -m pip install -e ".[dev]"
pytest
Quick start
from uav_coverage_path_planner import PlanningProblem, optimize_coverage_route
problem = PlanningProblem(
boundary=((0, 0), (160, 10), (180, 110), (95, 145), (10, 105)),
takeoff_point=(-25, -30),
task_height_m=55,
)
result = optimize_coverage_route(problem)
print(result.optimized.heading_deg)
print(result.optimized.lane_spacing_m)
print(result.optimized.cruise_speed_mps)
local_xy is the default coordinate system and uses metres. Set coordinate_system="wgs84" to pass (longitude, latitude) points; the library internally applies a local equirectangular projection and returns the route in WGS84 again.
CLI
uav-route-optimize examples/synthetic_mission.json --output output
This writes only runtime results to output/:
result.json— full optimization result;route.geojson— coverage polyline;convergence.csv— generation history;population.csv— final population sample;analysis.png— four-panel diagnostic chart.
The included mission is a synthetic local-metre example. It contains no real locations.
Model
For a chromosome x = [heading, lane_spacing, cruise_speed], the algorithm minimizes:
J(x) = w_geometry × J_geometry + w_time × J_time + w_energy × J_energy + w_quality × J_quality + w_speed × J_speed
subject to GSD, side-overlap, forward-overlap, capture-interval, speed, range and reserve-energy constraints. Infeasible individuals are ranked behind feasible individuals and carry a violation penalty. The default population is 50, with two deterministic restarts and early stopping after stagnant generations.
fine, balanced, efficient, and custom profiles only change objective weights and quality constraints supplied by the caller; they do not encode a specific aircraft or commercial platform.
Reproducibility
Pass OptimizationConfig(seed=...) for a repeatable run. If no seed is supplied, a stable seed is derived from the mission definition.
Safety note
This package is a planning aid, not a flight controller. Validate all routes, geofencing, terrain clearance, communications, local aviation rules and aircraft limits before operating a UAV.
License
MIT. See LICENSE.
Metadata
Release files for uav-coverage-path-planner 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| uav_coverage_path_planner-1.0.0.tar.gz | 93.9 kB | Without provenance | Details for uav_coverage_path_planner-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| uav_coverage_path_planner-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for uav_coverage_path_planner-1.0.0-py3-none-any.whl |
Total release size: 109.1 kB
Release files / uav_coverage_path_planner-1.0.0.tar.gz
| Download URL | uav_coverage_path_planner-1.0.0.tar.gz |
|---|---|
| Size | 93.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
675d8473974d4d0dd18218ef85d7e5f089c822d0a001c3357b8091a1daa2837d
|
|
BLAKE2b-256 checksum How to use checksums |
df9661cf65c18bb80871c882968c1413297cb1a06902fa92dfe6083df03ee2d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / uav_coverage_path_planner-1.0.0-py3-none-any.whl
| Download URL | uav_coverage_path_planner-1.0.0-py3-none-any.whl |
|---|---|
| Size | 15.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8df29cd92e5e34cfec77f825776b9f95ea3e2ccf56e3a1043f1bc1e33104e656
|
|
BLAKE2b-256 checksum How to use checksums |
c26638bbc6e5f4f62a56c30423893df206fcd3ab582e42424a9a22a2719d9222
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for uav-coverage-path-planner 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.