If you use this code in your academic work, please cite (PDF):
@inproceedings{bartolomei2023multi,
title={Fast Multi-UAV Decentralized Exploration of Forests},
author={Bartolomei, Luca and Teixeira, Lucas and Chli, Margarita},
booktitle={IEEE Robotics and Automation Letters},
year={2023}
}
This project is released under a GPLv3 license.
The pipeline has been built and tested in Ubuntu 20.04 LTS and ROS Noetic.
- Install dependencies:
sudo apt install libarmadillo-dev libelf-dev libdw-dev python3-wstool python3-catkin-tools python3-pip
- Install python dependencies:
pip install pandas
- Install NLopt (check here):
$ git clone https://github.com/stevengj/nlopt.git --branch v2.7.1 $ cd nlopt && mkdir build && cd build $ cmake .. $ make -j8 $ sudo make install
- Install dependencies as described here:
$ wget http://akira.ruc.dk/~keld/research/LKH-3/LKH-3.0.6.tgz $ tar xvfz LKH-3.0.6.tgz $ cd LKH-3.0.6 $ make $ sudo cp LKH /usr/local/bin $ cd .. $ rm LKH-3.0.6.tgz
- Create a catkin workspace:
$ mkdir -p catkin_ws/src $ cd catkin_ws $ catkin init
Once the dependencies are installed, the code can be compiled as follows:
$ cd catkin_ws
$ source /opt/ros/noetic.bash
$ catkin_make
The list of valid models can be found (as series of yaml
files) in exploration_manager/config/maps
. The names of the models still need to be changed to match the ones in the paper. For the moment, this list can be used:
forest_50x50_01_200.pcd
corresponds toSparse Forest (0.1 trees / m^2)
forest_50x50_01_300.pcd
corresponds toMid-density Forest (0.15 trees / m^2)
forest_50x50_100_denser_3.pcd
corresponds toDense Forest (0.2 trees / m^2)
forest_4_densities_50_40_20_10.pcd
corresponds toMulti-density Forest
To run Unit Tests, run the following command:
$ catkin_make run_tests_exploration_manager
To run an experiment with a planner, run the following commands in separate terminals (possible planner_type
: fame
and racer
):
$ roscore
$ roslaunch exploration_manager rviz.launch
$ roslaunch exploration_manager swarm_exploration.launch model:=${model_name} drone_num:=${num_drones} planner_type:=fame
To start the exploration, use the 2D Nav Goal
tool in Rviz
.
A sequence of experiments in all the environments can be launch by running the scripts in automatic_runs
. In this case, the experiments will be trigger automatically and a logging node will dump all the statistics.
Note: The experiments with 8 and 10 agents were run on EC2 instance on the cloud. The type of the instance was m4.4xlarge
(16-core CPU and 64GB of RAM)
To evaluate the results of an experiment, run the scripts here:
- Evaluate a series of runs:
$ python3 plot_series.py
(use flag-h
to check how to pass arguments)
To evaluate a folder with runs in multiple models, use the script in automatic_runs/evaluation
:
$ cd automatic_runs/evaluation
$ . evaluate_multiple_models.sh ${path_to_results_folder} ${num_runs_per_exp}
Run the following launch file to create a random map with 4 areas with different densities:
$ roslaunch exploration_manager multi_density.launch
Run the following launch file to create a random map:
$ roslaunch exploration_manager gen_map_denser.launch
Our software is based the open-source project RACER.
Contributions that help to improve the code are welcome. In case you want to contribute, please adapt to the Google C++ coding style and run bash clang-format-all .
on your code before any commit.