Skip to main content

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:

  1. Setup — the field is decomposed into rectilinear regions (via Fields2Cover), and up to eight boustrophedon sweep patterns are generated for each region.
  2. Ant Colony Optimisation (ACO) — a parallel ACO solver finds a high-quality visiting order over the sweep patterns, formulated as a GTSP.
  3. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

field_coverage-0.1.1.tar.gz (57.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

field_coverage-0.1.1-py3-none-any.whl (76.8 kB view details)

Uploaded Python 3

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

Hashes for field_coverage-0.1.1.tar.gz
Algorithm Hash digest
SHA256 da7201985a99c99ad0d822025db62ce97d24dd78caf87c8c760cabbac534e4de
MD5 dc1ff2a7306976c09e76faab53bb05cc
BLAKE2b-256 0b3e2d092581300e58ba54e9c257a6034001efd2cde2ce2fd1811d34dca5f172

See more details on using hashes here.

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

Hashes for field_coverage-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8d36ff0df360f30890e5ac7b941972ff6b9c0fea574c126bd8b19d3021d3640d
MD5 87aa45191713a588325ea2200baa8bfe
BLAKE2b-256 961c978db64b57f52503b6c4b83dbffed761d561a765a28f880f48ad4c9ed9e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page