Damage-Aware Coverage Path Planning
A Python library for damage-aware coverage path planning (DACPP) in rectilinear environments, with a focus on agricultural fields. Produces coverage paths that jointly minimise tile revisits and turns — both of which contribute to soil compaction in agricultural applications.
This library is the reference implementation for the paper "Damage-Aware Coverage Path Planning as a Generalised Travelling Salesperson" (Cutteridge, Frenkel, and Mansouri).
Overview
Classical coverage path planning minimises path length or completion time, treating revisits as an incidental side effect. In applications such as agricultural seeding, however, revisits are actively harmful: each additional pass crushes seedlings and compacts the soil. This library formalises coverage as an optimisation problem that explicitly penalises revisits and turns, and solves it as a Generalised Travelling Salesperson Problem (GTSP).
The solver has three stages:
- Setup — the field is decomposed into rectilinear regions (via Fields2Cover), and up to eight boustrophedon sweep patterns are generated for each region.
- Ant Colony Optimisation (ACO) — a parallel ACO solver finds a high-quality visiting order over the sweep patterns, formulated as a GTSP.
- Simulated Annealing (SA) — a refinement stage with a novel absorption operator, which removes revisits by reassigning shared tiles from connector paths into adjacent regions.
Evaluated on 200 real UK field geometries from the Sentinel-2 dataset, the algorithm achieves an average revisit rate of 4.2% and 33 turns per 100 tiles.
Repository Structure
| Directory | Contents |
|---|---|
field_coverage/ |
Core library (GTSP construction, ACO, SA, absorption operator) |
docs/ |
Architecture diagrams and flowcharts |
results/ |
Experimental data, CSV outputs, and figures from the paper |
data/ |
GeoJSON field geometries |
Note: This repository contains the backend library only. The AuTo-mato web interface used to produce Fig. 7 of the paper is not yet public.
Setup
This Docker image has been tested on ARM CPUs only; results on other architectures may differ.
1. Build the Fields2Cover container
From the root of field_coverage/:
docker build -f decomp/dockerfile -t fields2cover-api:v3 --platform linux/arm64 .
docker run -d -p 8000:8000 --platform linux/arm64 fields2cover-api:v3
2. Install the Python package
Install uv, then:
uv pip install -e .
If field_coverage is not installed automatically:
uv pip install field_coverage
3. Start the backend API
uvicorn coverage_api:app --reload --port 8000
Tests
pytest
Metadata
Release files for field-coverage 0.1.1
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 |
|---|---|---|---|---|
| field_coverage-0.1.1.tar.gz | 57.0 kB | Without provenance | Details for field_coverage-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| field_coverage-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for field_coverage-0.1.1-py3-none-any.whl |
Total release size: 133.9 kB
Release files / field_coverage-0.1.1.tar.gz
| Download URL | field_coverage-0.1.1.tar.gz |
|---|---|
| Size | 57.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
da7201985a99c99ad0d822025db62ce97d24dd78caf87c8c760cabbac534e4de
|
|
BLAKE2b-256 checksum How to use checksums |
0b3e2d092581300e58ba54e9c257a6034001efd2cde2ce2fd1811d34dca5f172
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Release files / field_coverage-0.1.1-py3-none-any.whl
| Download URL | field_coverage-0.1.1-py3-none-any.whl |
|---|---|
| Size | 76.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8d36ff0df360f30890e5ac7b941972ff6b9c0fea574c126bd8b19d3021d3640d
|
|
BLAKE2b-256 checksum How to use checksums |
961c978db64b57f52503b6c4b83dbffed761d561a765a28f880f48ad4c9ed9e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Security for field-coverage 0.1.1
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.