Pathfinding for autonomous robots
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file field_coverage-0.1.1.tar.gz.
File metadata
- Download URL: field_coverage-0.1.1.tar.gz
- Upload date:
- Size: 57.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da7201985a99c99ad0d822025db62ce97d24dd78caf87c8c760cabbac534e4de
|
|
| MD5 |
dc1ff2a7306976c09e76faab53bb05cc
|
|
| BLAKE2b-256 |
0b3e2d092581300e58ba54e9c257a6034001efd2cde2ce2fd1811d34dca5f172
|
File details
Details for the file field_coverage-0.1.1-py3-none-any.whl.
File metadata
- Download URL: field_coverage-0.1.1-py3-none-any.whl
- Upload date:
- Size: 76.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d36ff0df360f30890e5ac7b941972ff6b9c0fea574c126bd8b19d3021d3640d
|
|
| MD5 |
87aa45191713a588325ea2200baa8bfe
|
|
| BLAKE2b-256 |
961c978db64b57f52503b6c4b83dbffed761d561a765a28f880f48ad4c9ed9e9
|