-
 

fields2cover package from fields2cover repo

fields2cover

Package Summary

Tags No category tags.
Version 2.0.0
License BSD-3
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/Fields2Cover/fields2cover.git
VCS Type git
VCS Version main
Last Updated 2024-11-19
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

Robust and efficient coverage paths for autonomous agricultural vehicles. A modular and extensible Coverage Path Planning library

Additional Links

No additional links.

Maintainers

  • Gonzalo Mier

Authors

No additional authors.

Fields2Cover

Robust and efficient coverage paths for autonomous agricultural vehicles

Open in GitHub
Codespaces

DOI build CODECOV license Language-C++ Language-Python stars forks

image{.align-center}

The extended documentation is here.

The coverage path planning problem (CPP) aims to create a path to cover an area with one or several vehicles. CPP has many application as cleaning robots, surveillance, de-mining or agriculture. Each of the application has its own requirements. For example, in cleaning robots environment is usually unknown and the objective is improve the probability of cover the area. On the other hand, CPP in agriculture knows the area to cover, but the coverage has to be complete.

Fields2Cover library provides several algorithms to plan the coverage path on any kind of fields:

image{.align-center width=”500px”}

Although the development of this project is focused on offline planning of agricultural vehicles, the library accepts pull requests from other types of coverage planners.

F2C version 2.0

The version 2.0 of Fields2Cover comes with support for non-convex fields and fields with obstacles!! This has been huge request from the community and finally it's here.

A quick list of new additions to the library:

  1. Decomposition algorithms:
    • Trapezoidal and Boustrophedon decomposition. Those algorithms are useful to split any concave field into several convex sub-fields.
  2. Route planner:
    • Route optimizer using OR-tools can be used to order the swaths, instead of just using a known pattern.
    • Support for a point used as the start and end points of the route.
  3. Path planner:
    • Support for routes provided by the route optimizer.
  4. Swath generator:
    • Speed improvement on swath generation.
    • New cost function: [NSwathModified]{.title-ref}. It uses an approximation to compute the number of swaths, reducing computation costs.
  5. Many bugs fixed.

Citing

Please cite the following paper (https://ieeexplore.ieee.org/document/10050562) when using Fields2Cover for your research:

``` {.sourceCode .bibtex} @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} }


Why?
----

There are many CPP papers out there, but almost no code about their
implementation. Due to this, research about this topic is slow as you
need to implement every algorithm you want to compare with.

Fields2Cover provides a flexible structure and several algorithms to
compare with, so any developer can research about this topic easily.

Installation
------------

The Fields2Cover package has only been tested on Ubuntu 18.04, 20.04 and
22.04. If you are able to run it in other operative systems, open an
issue/PR and it will be added to this guide

### Requirements on Linux

Some packages are needed before compiling the package:

> `📝` If your OS is Ubuntu 18.04 or 20.04, you would need to do
> `sudo add-apt-repository ppa:ubuntugis/ppa`


``` {.sourceCode .console}
sudo apt-get update
sudo apt-get install --no-install-recommends software-properties-common
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install --no-install-recommends build-essential ca-certificates cmake \
     doxygen g++ git libeigen3-dev libgdal-dev libpython3-dev python3 python3-pip \
     python3-matplotlib python3-tk lcov libgtest-dev libtbb-dev swig libgeos-dev \
     gnuplot libtinyxml2-dev nlohmann-json3-dev
python3 -m pip install gcovr

Also, OR-tools for C++ is needed. Follow its installation process.

Compilation

First, clone this repository. Then, from the source code folder of the project:

``` {.sourceCode .console} mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=Release -DUSE_ORTOOLS_RELEASE=ON ..; make -j$(nproc);


Finally, you can install it as:


``` {.sourceCode .console}
sudo make install;

Add it to your projects

To add Fields2Cover into your CMakeLists.txt, it is as easy as:

``` {.sourceCode .console} find_package(Fields2Cover REQUIRED) target_link_libraries(«>> Fields2Cover)


### Compilation with python interface

Assuming you have satisfied the \"Requirements on Linux\" and completed
the initial \"Compilation\" step.

Install the packages required as:


``` {.sourceCode .console}
sudo apt install swig python3-pytest

Then, from the source code folder of the project, adjust the BUILD_PYTHON option of the existing build:

``` {.sourceCode .console} cd build; cmake -DBUILD_PYTHON=ON ..; make -j$(nproc); sudo make install;


To test if the compilation and installation of the python interface is
correct, run on python:


``` {.sourceCode .python}
import fields2cover

Or run on the main folder:

``` {.sourceCode .console} pytest-3 tests/python/

```

Stability

Fields2Cover is still in early development, so feedback and bug reports are appreciated. At the moment, it should expected that breaking changes may be introduced as new functionality is added, bugs are fixed, and APIs are streamlined.

Contribute

If you find any issue/bug/proposal, open an issue and we will try to solve/discuss it.

Pull requests are more than welcome. For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate.

Contributions can be easily made using Open in GitHub
Codespaces

License

Fields2Cover project is under BSD-3 license.

TODO

  • Support small obstacles
  • Headland coverage
  • Create SWIG interface with Lua/R
  • ...

Credits and more info

This library is only possible thanks to GDAL who provides the basic types of this library. Other great libraries that made Fields2Cover possible are OR-tools, hbanzhaf/steering_functions, nlohmann/json, leethomason/tinyxml2, joshhooker/CubicSplineClass and alandefreitas/matplotplusplus

This code repository is part of the project Fields2Cover which is (partly) financed by the Dutch Research Council (NWO).

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.0.0] - 07-02-2024

  • Route planner travelling through the headlands

[1.3.0] - 21-04-2023

  • Add decomposition algorithms: trapezoidal, boustrophedon

[1.2.0] - 17-10-2022

Added

  • Tests to do cover < 90% functions

Changes

  • SG use the objective function as a parameter instead of a template.
  • RP do not save the swaths and modify them using the functions provided
  • PP do not save the robot and use the robot params with a param on the function.

Changes

  • Objectives are split for each of the modules.
  • Global objective renamed to SG objective.
  • Path objective renamed to RP objective.

Added

  • PP objective
  • HL objective

[1.1.0]

Added

  • On HL module: constant headland algorithm.
  • On SG module: brute force algorithm.
  • On RP module: Boustrophedon, custom, snake and spiral.
  • On PP module: Dubins and Reeds-Sheep with/without continuous curvature.
  • Objective functions are split between global and path cost functions.

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fields2cover at Robotics Stack Exchange

fields2cover package from fields2cover repo

fields2cover

Package Summary

Tags No category tags.
Version 2.0.0
License BSD-3
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/Fields2Cover/fields2cover.git
VCS Type git
VCS Version main
Last Updated 2024-11-19
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

Robust and efficient coverage paths for autonomous agricultural vehicles. A modular and extensible Coverage Path Planning library

Additional Links

No additional links.

Maintainers

  • Gonzalo Mier

Authors

No additional authors.

Fields2Cover

Robust and efficient coverage paths for autonomous agricultural vehicles

Open in GitHub
Codespaces

DOI build CODECOV license Language-C++ Language-Python stars forks

image{.align-center}

The extended documentation is here.

The coverage path planning problem (CPP) aims to create a path to cover an area with one or several vehicles. CPP has many application as cleaning robots, surveillance, de-mining or agriculture. Each of the application has its own requirements. For example, in cleaning robots environment is usually unknown and the objective is improve the probability of cover the area. On the other hand, CPP in agriculture knows the area to cover, but the coverage has to be complete.

Fields2Cover library provides several algorithms to plan the coverage path on any kind of fields:

image{.align-center width=”500px”}

Although the development of this project is focused on offline planning of agricultural vehicles, the library accepts pull requests from other types of coverage planners.

F2C version 2.0

The version 2.0 of Fields2Cover comes with support for non-convex fields and fields with obstacles!! This has been huge request from the community and finally it's here.

A quick list of new additions to the library:

  1. Decomposition algorithms:
    • Trapezoidal and Boustrophedon decomposition. Those algorithms are useful to split any concave field into several convex sub-fields.
  2. Route planner:
    • Route optimizer using OR-tools can be used to order the swaths, instead of just using a known pattern.
    • Support for a point used as the start and end points of the route.
  3. Path planner:
    • Support for routes provided by the route optimizer.
  4. Swath generator:
    • Speed improvement on swath generation.
    • New cost function: [NSwathModified]{.title-ref}. It uses an approximation to compute the number of swaths, reducing computation costs.
  5. Many bugs fixed.

Citing

Please cite the following paper (https://ieeexplore.ieee.org/document/10050562) when using Fields2Cover for your research:

``` {.sourceCode .bibtex} @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} }


Why?
----

There are many CPP papers out there, but almost no code about their
implementation. Due to this, research about this topic is slow as you
need to implement every algorithm you want to compare with.

Fields2Cover provides a flexible structure and several algorithms to
compare with, so any developer can research about this topic easily.

Installation
------------

The Fields2Cover package has only been tested on Ubuntu 18.04, 20.04 and
22.04. If you are able to run it in other operative systems, open an
issue/PR and it will be added to this guide

### Requirements on Linux

Some packages are needed before compiling the package:

> `📝` If your OS is Ubuntu 18.04 or 20.04, you would need to do
> `sudo add-apt-repository ppa:ubuntugis/ppa`


``` {.sourceCode .console}
sudo apt-get update
sudo apt-get install --no-install-recommends software-properties-common
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install --no-install-recommends build-essential ca-certificates cmake \
     doxygen g++ git libeigen3-dev libgdal-dev libpython3-dev python3 python3-pip \
     python3-matplotlib python3-tk lcov libgtest-dev libtbb-dev swig libgeos-dev \
     gnuplot libtinyxml2-dev nlohmann-json3-dev
python3 -m pip install gcovr

Also, OR-tools for C++ is needed. Follow its installation process.

Compilation

First, clone this repository. Then, from the source code folder of the project:

``` {.sourceCode .console} mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=Release -DUSE_ORTOOLS_RELEASE=ON ..; make -j$(nproc);


Finally, you can install it as:


``` {.sourceCode .console}
sudo make install;

Add it to your projects

To add Fields2Cover into your CMakeLists.txt, it is as easy as:

``` {.sourceCode .console} find_package(Fields2Cover REQUIRED) target_link_libraries(«>> Fields2Cover)


### Compilation with python interface

Assuming you have satisfied the \"Requirements on Linux\" and completed
the initial \"Compilation\" step.

Install the packages required as:


``` {.sourceCode .console}
sudo apt install swig python3-pytest

Then, from the source code folder of the project, adjust the BUILD_PYTHON option of the existing build:

``` {.sourceCode .console} cd build; cmake -DBUILD_PYTHON=ON ..; make -j$(nproc); sudo make install;


To test if the compilation and installation of the python interface is
correct, run on python:


``` {.sourceCode .python}
import fields2cover

Or run on the main folder:

``` {.sourceCode .console} pytest-3 tests/python/

```

Stability

Fields2Cover is still in early development, so feedback and bug reports are appreciated. At the moment, it should expected that breaking changes may be introduced as new functionality is added, bugs are fixed, and APIs are streamlined.

Contribute

If you find any issue/bug/proposal, open an issue and we will try to solve/discuss it.

Pull requests are more than welcome. For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate.

Contributions can be easily made using Open in GitHub
Codespaces

License

Fields2Cover project is under BSD-3 license.

TODO

  • Support small obstacles
  • Headland coverage
  • Create SWIG interface with Lua/R
  • ...

Credits and more info

This library is only possible thanks to GDAL who provides the basic types of this library. Other great libraries that made Fields2Cover possible are OR-tools, hbanzhaf/steering_functions, nlohmann/json, leethomason/tinyxml2, joshhooker/CubicSplineClass and alandefreitas/matplotplusplus

This code repository is part of the project Fields2Cover which is (partly) financed by the Dutch Research Council (NWO).

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.0.0] - 07-02-2024

  • Route planner travelling through the headlands

[1.3.0] - 21-04-2023

  • Add decomposition algorithms: trapezoidal, boustrophedon

[1.2.0] - 17-10-2022

Added

  • Tests to do cover < 90% functions

Changes

  • SG use the objective function as a parameter instead of a template.
  • RP do not save the swaths and modify them using the functions provided
  • PP do not save the robot and use the robot params with a param on the function.

Changes

  • Objectives are split for each of the modules.
  • Global objective renamed to SG objective.
  • Path objective renamed to RP objective.

Added

  • PP objective
  • HL objective

[1.1.0]

Added

  • On HL module: constant headland algorithm.
  • On SG module: brute force algorithm.
  • On RP module: Boustrophedon, custom, snake and spiral.
  • On PP module: Dubins and Reeds-Sheep with/without continuous curvature.
  • Objective functions are split between global and path cost functions.

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fields2cover at Robotics Stack Exchange

fields2cover package from fields2cover repo

fields2cover

Package Summary

Tags No category tags.
Version 2.0.0
License BSD-3
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/Fields2Cover/fields2cover.git
VCS Type git
VCS Version main
Last Updated 2024-11-19
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

Robust and efficient coverage paths for autonomous agricultural vehicles. A modular and extensible Coverage Path Planning library

Additional Links

No additional links.

Maintainers

  • Gonzalo Mier

Authors

No additional authors.

Fields2Cover

Robust and efficient coverage paths for autonomous agricultural vehicles

Open in GitHub
Codespaces

DOI build CODECOV license Language-C++ Language-Python stars forks

image{.align-center}

The extended documentation is here.

The coverage path planning problem (CPP) aims to create a path to cover an area with one or several vehicles. CPP has many application as cleaning robots, surveillance, de-mining or agriculture. Each of the application has its own requirements. For example, in cleaning robots environment is usually unknown and the objective is improve the probability of cover the area. On the other hand, CPP in agriculture knows the area to cover, but the coverage has to be complete.

Fields2Cover library provides several algorithms to plan the coverage path on any kind of fields:

image{.align-center width=”500px”}

Although the development of this project is focused on offline planning of agricultural vehicles, the library accepts pull requests from other types of coverage planners.

F2C version 2.0

The version 2.0 of Fields2Cover comes with support for non-convex fields and fields with obstacles!! This has been huge request from the community and finally it's here.

A quick list of new additions to the library:

  1. Decomposition algorithms:
    • Trapezoidal and Boustrophedon decomposition. Those algorithms are useful to split any concave field into several convex sub-fields.
  2. Route planner:
    • Route optimizer using OR-tools can be used to order the swaths, instead of just using a known pattern.
    • Support for a point used as the start and end points of the route.
  3. Path planner:
    • Support for routes provided by the route optimizer.
  4. Swath generator:
    • Speed improvement on swath generation.
    • New cost function: [NSwathModified]{.title-ref}. It uses an approximation to compute the number of swaths, reducing computation costs.
  5. Many bugs fixed.

Citing

Please cite the following paper (https://ieeexplore.ieee.org/document/10050562) when using Fields2Cover for your research:

``` {.sourceCode .bibtex} @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} }


Why?
----

There are many CPP papers out there, but almost no code about their
implementation. Due to this, research about this topic is slow as you
need to implement every algorithm you want to compare with.

Fields2Cover provides a flexible structure and several algorithms to
compare with, so any developer can research about this topic easily.

Installation
------------

The Fields2Cover package has only been tested on Ubuntu 18.04, 20.04 and
22.04. If you are able to run it in other operative systems, open an
issue/PR and it will be added to this guide

### Requirements on Linux

Some packages are needed before compiling the package:

> `📝` If your OS is Ubuntu 18.04 or 20.04, you would need to do
> `sudo add-apt-repository ppa:ubuntugis/ppa`


``` {.sourceCode .console}
sudo apt-get update
sudo apt-get install --no-install-recommends software-properties-common
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install --no-install-recommends build-essential ca-certificates cmake \
     doxygen g++ git libeigen3-dev libgdal-dev libpython3-dev python3 python3-pip \
     python3-matplotlib python3-tk lcov libgtest-dev libtbb-dev swig libgeos-dev \
     gnuplot libtinyxml2-dev nlohmann-json3-dev
python3 -m pip install gcovr

Also, OR-tools for C++ is needed. Follow its installation process.

Compilation

First, clone this repository. Then, from the source code folder of the project:

``` {.sourceCode .console} mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=Release -DUSE_ORTOOLS_RELEASE=ON ..; make -j$(nproc);


Finally, you can install it as:


``` {.sourceCode .console}
sudo make install;

Add it to your projects

To add Fields2Cover into your CMakeLists.txt, it is as easy as:

``` {.sourceCode .console} find_package(Fields2Cover REQUIRED) target_link_libraries(«>> Fields2Cover)


### Compilation with python interface

Assuming you have satisfied the \"Requirements on Linux\" and completed
the initial \"Compilation\" step.

Install the packages required as:


``` {.sourceCode .console}
sudo apt install swig python3-pytest

Then, from the source code folder of the project, adjust the BUILD_PYTHON option of the existing build:

``` {.sourceCode .console} cd build; cmake -DBUILD_PYTHON=ON ..; make -j$(nproc); sudo make install;


To test if the compilation and installation of the python interface is
correct, run on python:


``` {.sourceCode .python}
import fields2cover

Or run on the main folder:

``` {.sourceCode .console} pytest-3 tests/python/

```

Stability

Fields2Cover is still in early development, so feedback and bug reports are appreciated. At the moment, it should expected that breaking changes may be introduced as new functionality is added, bugs are fixed, and APIs are streamlined.

Contribute

If you find any issue/bug/proposal, open an issue and we will try to solve/discuss it.

Pull requests are more than welcome. For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate.

Contributions can be easily made using Open in GitHub
Codespaces

License

Fields2Cover project is under BSD-3 license.

TODO

  • Support small obstacles
  • Headland coverage
  • Create SWIG interface with Lua/R
  • ...

Credits and more info

This library is only possible thanks to GDAL who provides the basic types of this library. Other great libraries that made Fields2Cover possible are OR-tools, hbanzhaf/steering_functions, nlohmann/json, leethomason/tinyxml2, joshhooker/CubicSplineClass and alandefreitas/matplotplusplus

This code repository is part of the project Fields2Cover which is (partly) financed by the Dutch Research Council (NWO).

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.0.0] - 07-02-2024

  • Route planner travelling through the headlands

[1.3.0] - 21-04-2023

  • Add decomposition algorithms: trapezoidal, boustrophedon

[1.2.0] - 17-10-2022

Added

  • Tests to do cover < 90% functions

Changes

  • SG use the objective function as a parameter instead of a template.
  • RP do not save the swaths and modify them using the functions provided
  • PP do not save the robot and use the robot params with a param on the function.

Changes

  • Objectives are split for each of the modules.
  • Global objective renamed to SG objective.
  • Path objective renamed to RP objective.

Added

  • PP objective
  • HL objective

[1.1.0]

Added

  • On HL module: constant headland algorithm.
  • On SG module: brute force algorithm.
  • On RP module: Boustrophedon, custom, snake and spiral.
  • On PP module: Dubins and Reeds-Sheep with/without continuous curvature.
  • Objective functions are split between global and path cost functions.

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fields2cover at Robotics Stack Exchange

fields2cover package from fields2cover repo

fields2cover

Package Summary

Tags No category tags.
Version 2.0.0
License BSD-3
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/Fields2Cover/fields2cover.git
VCS Type git
VCS Version main
Last Updated 2024-11-19
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

Robust and efficient coverage paths for autonomous agricultural vehicles. A modular and extensible Coverage Path Planning library

Additional Links

No additional links.

Maintainers

  • Gonzalo Mier

Authors

No additional authors.

Fields2Cover

Robust and efficient coverage paths for autonomous agricultural vehicles

Open in GitHub
Codespaces

DOI build CODECOV license Language-C++ Language-Python stars forks

image{.align-center}

The extended documentation is here.

The coverage path planning problem (CPP) aims to create a path to cover an area with one or several vehicles. CPP has many application as cleaning robots, surveillance, de-mining or agriculture. Each of the application has its own requirements. For example, in cleaning robots environment is usually unknown and the objective is improve the probability of cover the area. On the other hand, CPP in agriculture knows the area to cover, but the coverage has to be complete.

Fields2Cover library provides several algorithms to plan the coverage path on any kind of fields:

image{.align-center width=”500px”}

Although the development of this project is focused on offline planning of agricultural vehicles, the library accepts pull requests from other types of coverage planners.

F2C version 2.0

The version 2.0 of Fields2Cover comes with support for non-convex fields and fields with obstacles!! This has been huge request from the community and finally it's here.

A quick list of new additions to the library:

  1. Decomposition algorithms:
    • Trapezoidal and Boustrophedon decomposition. Those algorithms are useful to split any concave field into several convex sub-fields.
  2. Route planner:
    • Route optimizer using OR-tools can be used to order the swaths, instead of just using a known pattern.
    • Support for a point used as the start and end points of the route.
  3. Path planner:
    • Support for routes provided by the route optimizer.
  4. Swath generator:
    • Speed improvement on swath generation.
    • New cost function: [NSwathModified]{.title-ref}. It uses an approximation to compute the number of swaths, reducing computation costs.
  5. Many bugs fixed.

Citing

Please cite the following paper (https://ieeexplore.ieee.org/document/10050562) when using Fields2Cover for your research:

``` {.sourceCode .bibtex} @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} }


Why?
----

There are many CPP papers out there, but almost no code about their
implementation. Due to this, research about this topic is slow as you
need to implement every algorithm you want to compare with.

Fields2Cover provides a flexible structure and several algorithms to
compare with, so any developer can research about this topic easily.

Installation
------------

The Fields2Cover package has only been tested on Ubuntu 18.04, 20.04 and
22.04. If you are able to run it in other operative systems, open an
issue/PR and it will be added to this guide

### Requirements on Linux

Some packages are needed before compiling the package:

> `📝` If your OS is Ubuntu 18.04 or 20.04, you would need to do
> `sudo add-apt-repository ppa:ubuntugis/ppa`


``` {.sourceCode .console}
sudo apt-get update
sudo apt-get install --no-install-recommends software-properties-common
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install --no-install-recommends build-essential ca-certificates cmake \
     doxygen g++ git libeigen3-dev libgdal-dev libpython3-dev python3 python3-pip \
     python3-matplotlib python3-tk lcov libgtest-dev libtbb-dev swig libgeos-dev \
     gnuplot libtinyxml2-dev nlohmann-json3-dev
python3 -m pip install gcovr

Also, OR-tools for C++ is needed. Follow its installation process.

Compilation

First, clone this repository. Then, from the source code folder of the project:

``` {.sourceCode .console} mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=Release -DUSE_ORTOOLS_RELEASE=ON ..; make -j$(nproc);


Finally, you can install it as:


``` {.sourceCode .console}
sudo make install;

Add it to your projects

To add Fields2Cover into your CMakeLists.txt, it is as easy as:

``` {.sourceCode .console} find_package(Fields2Cover REQUIRED) target_link_libraries(«>> Fields2Cover)


### Compilation with python interface

Assuming you have satisfied the \"Requirements on Linux\" and completed
the initial \"Compilation\" step.

Install the packages required as:


``` {.sourceCode .console}
sudo apt install swig python3-pytest

Then, from the source code folder of the project, adjust the BUILD_PYTHON option of the existing build:

``` {.sourceCode .console} cd build; cmake -DBUILD_PYTHON=ON ..; make -j$(nproc); sudo make install;


To test if the compilation and installation of the python interface is
correct, run on python:


``` {.sourceCode .python}
import fields2cover

Or run on the main folder:

``` {.sourceCode .console} pytest-3 tests/python/

```

Stability

Fields2Cover is still in early development, so feedback and bug reports are appreciated. At the moment, it should expected that breaking changes may be introduced as new functionality is added, bugs are fixed, and APIs are streamlined.

Contribute

If you find any issue/bug/proposal, open an issue and we will try to solve/discuss it.

Pull requests are more than welcome. For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate.

Contributions can be easily made using Open in GitHub
Codespaces

License

Fields2Cover project is under BSD-3 license.

TODO

  • Support small obstacles
  • Headland coverage
  • Create SWIG interface with Lua/R
  • ...

Credits and more info

This library is only possible thanks to GDAL who provides the basic types of this library. Other great libraries that made Fields2Cover possible are OR-tools, hbanzhaf/steering_functions, nlohmann/json, leethomason/tinyxml2, joshhooker/CubicSplineClass and alandefreitas/matplotplusplus

This code repository is part of the project Fields2Cover which is (partly) financed by the Dutch Research Council (NWO).

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.0.0] - 07-02-2024

  • Route planner travelling through the headlands

[1.3.0] - 21-04-2023

  • Add decomposition algorithms: trapezoidal, boustrophedon

[1.2.0] - 17-10-2022

Added

  • Tests to do cover < 90% functions

Changes

  • SG use the objective function as a parameter instead of a template.
  • RP do not save the swaths and modify them using the functions provided
  • PP do not save the robot and use the robot params with a param on the function.

Changes

  • Objectives are split for each of the modules.
  • Global objective renamed to SG objective.
  • Path objective renamed to RP objective.

Added

  • PP objective
  • HL objective

[1.1.0]

Added

  • On HL module: constant headland algorithm.
  • On SG module: brute force algorithm.
  • On RP module: Boustrophedon, custom, snake and spiral.
  • On PP module: Dubins and Reeds-Sheep with/without continuous curvature.
  • Objective functions are split between global and path cost functions.

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Dependant Packages

No known dependants.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fields2cover at Robotics Stack Exchange

fields2cover package from fields2cover repo

fields2cover

Package Summary

Tags No category tags.
Version 2.0.0
License BSD-3
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/Fields2Cover/fields2cover.git
VCS Type git
VCS Version main
Last Updated 2024-11-19
Dev Status DEVELOPED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

Robust and efficient coverage paths for autonomous agricultural vehicles. A modular and extensible Coverage Path Planning library

Additional Links

No additional links.

Maintainers

  • Gonzalo Mier

Authors

No additional authors.

Fields2Cover

Robust and efficient coverage paths for autonomous agricultural vehicles

Open in GitHub
Codespaces

DOI build CODECOV license Language-C++ Language-Python stars forks

image{.align-center}

The extended documentation is here.

The coverage path planning problem (CPP) aims to create a path to cover an area with one or several vehicles. CPP has many application as cleaning robots, surveillance, de-mining or agriculture. Each of the application has its own requirements. For example, in cleaning robots environment is usually unknown and the objective is improve the probability of cover the area. On the other hand, CPP in agriculture knows the area to cover, but the coverage has to be complete.

Fields2Cover library provides several algorithms to plan the coverage path on any kind of fields:

image{.align-center width=”500px”}

Although the development of this project is focused on offline planning of agricultural vehicles, the library accepts pull requests from other types of coverage planners.

F2C version 2.0

The version 2.0 of Fields2Cover comes with support for non-convex fields and fields with obstacles!! This has been huge request from the community and finally it's here.

A quick list of new additions to the library:

  1. Decomposition algorithms:
    • Trapezoidal and Boustrophedon decomposition. Those algorithms are useful to split any concave field into several convex sub-fields.
  2. Route planner:
    • Route optimizer using OR-tools can be used to order the swaths, instead of just using a known pattern.
    • Support for a point used as the start and end points of the route.
  3. Path planner:
    • Support for routes provided by the route optimizer.
  4. Swath generator:
    • Speed improvement on swath generation.
    • New cost function: [NSwathModified]{.title-ref}. It uses an approximation to compute the number of swaths, reducing computation costs.
  5. Many bugs fixed.

Citing

Please cite the following paper (https://ieeexplore.ieee.org/document/10050562) when using Fields2Cover for your research:

``` {.sourceCode .bibtex} @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} }


Why?
----

There are many CPP papers out there, but almost no code about their
implementation. Due to this, research about this topic is slow as you
need to implement every algorithm you want to compare with.

Fields2Cover provides a flexible structure and several algorithms to
compare with, so any developer can research about this topic easily.

Installation
------------

The Fields2Cover package has only been tested on Ubuntu 18.04, 20.04 and
22.04. If you are able to run it in other operative systems, open an
issue/PR and it will be added to this guide

### Requirements on Linux

Some packages are needed before compiling the package:

> `📝` If your OS is Ubuntu 18.04 or 20.04, you would need to do
> `sudo add-apt-repository ppa:ubuntugis/ppa`


``` {.sourceCode .console}
sudo apt-get update
sudo apt-get install --no-install-recommends software-properties-common
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install --no-install-recommends build-essential ca-certificates cmake \
     doxygen g++ git libeigen3-dev libgdal-dev libpython3-dev python3 python3-pip \
     python3-matplotlib python3-tk lcov libgtest-dev libtbb-dev swig libgeos-dev \
     gnuplot libtinyxml2-dev nlohmann-json3-dev
python3 -m pip install gcovr

Also, OR-tools for C++ is needed. Follow its installation process.

Compilation

First, clone this repository. Then, from the source code folder of the project:

``` {.sourceCode .console} mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=Release -DUSE_ORTOOLS_RELEASE=ON ..; make -j$(nproc);


Finally, you can install it as:


``` {.sourceCode .console}
sudo make install;

Add it to your projects

To add Fields2Cover into your CMakeLists.txt, it is as easy as:

``` {.sourceCode .console} find_package(Fields2Cover REQUIRED) target_link_libraries(«>> Fields2Cover)


### Compilation with python interface

Assuming you have satisfied the \"Requirements on Linux\" and completed
the initial \"Compilation\" step.

Install the packages required as:


``` {.sourceCode .console}
sudo apt install swig python3-pytest

Then, from the source code folder of the project, adjust the BUILD_PYTHON option of the existing build:

``` {.sourceCode .console} cd build; cmake -DBUILD_PYTHON=ON ..; make -j$(nproc); sudo make install;


To test if the compilation and installation of the python interface is
correct, run on python:


``` {.sourceCode .python}
import fields2cover

Or run on the main folder:

``` {.sourceCode .console} pytest-3 tests/python/

```

Stability

Fields2Cover is still in early development, so feedback and bug reports are appreciated. At the moment, it should expected that breaking changes may be introduced as new functionality is added, bugs are fixed, and APIs are streamlined.

Contribute

If you find any issue/bug/proposal, open an issue and we will try to solve/discuss it.

Pull requests are more than welcome. For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate.

Contributions can be easily made using Open in GitHub
Codespaces

License

Fields2Cover project is under BSD-3 license.

TODO

  • Support small obstacles
  • Headland coverage
  • Create SWIG interface with Lua/R
  • ...

Credits and more info

This library is only possible thanks to GDAL who provides the basic types of this library. Other great libraries that made Fields2Cover possible are OR-tools, hbanzhaf/steering_functions, nlohmann/json, leethomason/tinyxml2, joshhooker/CubicSplineClass and alandefreitas/matplotplusplus

This code repository is part of the project Fields2Cover which is (partly) financed by the Dutch Research Council (NWO).

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.0.0] - 07-02-2024

  • Route planner travelling through the headlands

[1.3.0] - 21-04-2023

  • Add decomposition algorithms: trapezoidal, boustrophedon

[1.2.0] - 17-10-2022

Added

  • Tests to do cover < 90% functions

Changes

  • SG use the objective function as a parameter instead of a template.
  • RP do not save the swaths and modify them using the functions provided
  • PP do not save the robot and use the robot params with a param on the function.

Changes

  • Objectives are split for each of the modules.
  • Global objective renamed to SG objective.
  • Path objective renamed to RP objective.

Added

  • PP objective
  • HL objective

[1.1.0]

Added

  • On HL module: constant headland algorithm.
  • On SG module: brute force algorithm.
  • On RP module: Boustrophedon, custom, snake and spiral.
  • On PP module: Dubins and Reeds-Sheep with/without continuous curvature.
  • Objective functions are split between global and path cost functions.

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fields2cover at Robotics Stack Exchange

No version for distro ardent. Known supported distros are highlighted in the buttons above.
No version for distro bouncy. Known supported distros are highlighted in the buttons above.
No version for distro crystal. Known supported distros are highlighted in the buttons above.
No version for distro eloquent. Known supported distros are highlighted in the buttons above.
No version for distro dashing. Known supported distros are highlighted in the buttons above.
No version for distro galactic. Known supported distros are highlighted in the buttons above.
No version for distro foxy. Known supported distros are highlighted in the buttons above.
No version for distro lunar. Known supported distros are highlighted in the buttons above.
No version for distro jade. Known supported distros are highlighted in the buttons above.
No version for distro indigo. Known supported distros are highlighted in the buttons above.
No version for distro hydro. Known supported distros are highlighted in the buttons above.
No version for distro kinetic. Known supported distros are highlighted in the buttons above.
No version for distro melodic. Known supported distros are highlighted in the buttons above.