Robust and efficient coverage paths for autonomous agricultural vehicles
Documentation • Installation • Quick Start • Tutorials • API • Paper
Fields2Cover is an open-source C++ library with Python bindings that solves the Coverage Path Planning problem for agriculture: given a field and a vehicle, it computes a complete coverage path — headlands, swaths, an optimized route, and a drivable path with feasible turns. It also provides a common, extensible framework to implement and compare coverage path planning algorithms, so researchers don't have to re-implement every algorithm they want to compare against. The API is still evolving, so expect occasional breaking changes between releases.
Core features
- Modular pipeline: headland generation, swath generation, route planning and path planning as interchangeable modules — or a single call to
planCovPath. - Non-convex fields and obstacles, handled by trapezoidal and boustrophedon decomposition.
- Route optimization with OR-tools, plus classic patterns like boustrophedon, snake and spiral.
- Kinematically feasible turns using Dubins and Reeds-Shepp curves, with or without continuous curvature.
- C++17 core, Python bindings, and a ROS 2 integration via opennav_coverage.
Quick Start
Fields2Cover builds on GDAL, GEOS and OR-tools, which need to be installed first (details in the installation guide):
# Ubuntu
sudo apt install build-essential libgdal-dev libgeos-dev libeigen3-dev libboost-dev \
libtbb-dev libtinyxml2-dev nlohmann-json3-dev libpython3-dev gnuplot
# plus OR-tools for C++: https://developers.google.com/optimization/install/cpp
# macOS
brew install gdal geos or-tools tinyxml2 eigen tbb boost gnuplot
C++
#include "fields2cover.h"
int main() {
F2CField field = f2c::Parser::importFieldGml("data/test1.xml");
F2CRobot robot(2.0, 6.0, 0.5, 0.2);
F2CPath path = f2c::planCovPath(robot, field, false);
f2c::Visualizer::figure();
f2c::Visualizer::plot(field.getCellsAbsPosition());
f2c::Visualizer::plot(path);
f2c::Visualizer::show();
return 0;
}
find_package(Fields2Cover REQUIRED)
target_link_libraries(<your_target> Fields2Cover)
Python
pip install fields2cover
import fields2cover as f2c
field = f2c.Parser().importFieldGml("data/test1.xml")
robot = f2c.Robot(2.0, 6.0, 0.5, 0.2)
path = f2c.planCovPath(robot, field, False)
f2c.Visualizer.figure()
f2c.Visualizer.plot(field.getCellsAbsPosition())
f2c.Visualizer.plot(path)
f2c.Visualizer.show()
Installation
- Python:
pip install fields2cover— the package is built from source on your machine, so the system dependencies above must be installed. - C++ / from source: clone this repository and build with CMake — full walkthrough in the installation guide.
- ROS 2: see opennav_coverage, a Nav2-compatible coverage task server built on Fields2Cover.
Documentation
The extended documentation lives at fields2cover.github.io:
- Tutorials — step through every module of the pipeline, in C++ and Python
- API reference
- Migration guide v1 → v2
- FAQ
Contributing
If you find an issue, a bug or have a proposal, open an issue. Pull requests are more than welcome; for major changes, please open an issue first to discuss what you would like to change, and make sure to update tests as appropriate. A one-click development environment is available:
Citing
Please cite this paper when using Fields2Cover for your research:
@article{Mier_Fields2Cover_An_open-source_2023,
author={Mier, Gonzalo and Valente, João and de Bruin, Sytze},
journal={IEEE Robotics and Automation Letters},
title={Fields2Cover: An Open-Source Coverage Path Planning Library for Unmanned Agricultural Vehicles},
year={2023},
volume={8},
number={4},
pages={2166-2172},
doi={10.1109/LRA.2023.3248439}
}
License & credits
Fields2Cover is released under the BSD-3 license. It stands on the shoulders of GDAL, OR-tools, steering_functions, nlohmann/json, tinyxml2, CubicSplineClass and matplotplusplus. The project is (partly) financed by the Dutch Research Council (NWO).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file fields2cover-2.1.0.tar.gz.
File metadata
- Download URL: fields2cover-2.1.0.tar.gz
- Upload date:
- Size: 110.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
756ed60234dd9b0b1ba19d3cf4f8e1ade18744754bba548c3742b2c30a37e640
|
|
| MD5 |
5cf26d7d00ee5b675ca247d04a681c4c
|
|
| BLAKE2b-256 |
9d3d48c8a6da510ec222bc560be44d2c164d704ec8c706a1a1505d99c1fd9a40
|
Provenance
The following attestation bundles were made for fields2cover-2.1.0.tar.gz:
Publisher:
pypi.yml on Fields2Cover/Fields2Cover
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fields2cover-2.1.0.tar.gz -
Subject digest:
756ed60234dd9b0b1ba19d3cf4f8e1ade18744754bba548c3742b2c30a37e640 - Sigstore transparency entry: 2703671669
- Sigstore integration time:
-
Permalink:
Fields2Cover/Fields2Cover@011e4159cd633ee3adf82122dd030153b94da0fa -
Branch / Tag:
refs/tags/v2.1.0 - Owner: https://github.com/Fields2Cover
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@011e4159cd633ee3adf82122dd030153b94da0fa -
Trigger Event:
release
-
Statement type: