Forked FUEL project used in the GRADE project.
WORKING IN UBUNTU 20.04 WITH PCL 1.10 AND ROS NOETIC.
Edits:
- nlopt as submodule. PLEASE UNINSTALL THE UBUNTU-SHIPPED VERSION (
sudo apt purge ros-noetic-nlopt
) - FSM with manual goal is possible
- 360 rotation behaviour if no goal is reachable
- Multi node edits for topics based on namespace separation
- Publishing the bspline trajectory in a
rotors_simulator
compliant format
Please note that this is a TAILORED FUEL that is usable only as an autonomous exploration system based on a simulation environment different than the one created by the original authors.
If you want to use the original simulation or other parts of the code please check commit 5d61a8 and rollback ALL changes related to TOPICS. An example:
In this way you will be able to use the original version of the code while still maintaining the edits on the FSM.
My settings can be run with
roslaunch exploration_manager my_exploration.launch
As you can see in the launch file the main ROS namespace is set to the mav_name
(defaulting to my_robot_0
).
The custom_joint_controller
can be easily commented (although you can find it here). It serves as a bridge between the nmpc
and the simulation
for robots controlled by 6 indipendent Joints (x,y,z,roll,pitch,yaw).
mav_nonlinear_mpc
used is the drone nmpc
from ethz-asl/rotors_simulator
(here). You can change this with whatever you want. In my implementation takes in input the bspline-adapted trajectory and computes the relative drone trajectory.
The other arguments are as the previous FUEL implementation.
News:
- Aug 24, 2021: The CPU-based simulation is released, CUDA is no longer required. Richer exploration environments are provided.
FUEL is a powerful framework for Fast UAV ExpLoration. Our method is demonstrated to complete challenging exploration tasks 3-8 times faster than state-of-the-art approaches at the time of publication. Central to it is a Frontier Information Structure (FIS), which maintains crucial information for exploration planning incrementally along with the online built map. Based on the FIS, a hierarchical planner plans frontier coverage paths, refine local viewpoints, and generates minimum-time trajectories in sequence to explore unknown environment agilely and safely. Try Quick Start to run a demo in a few minutes!
Recently, we further develop a fully decentralized approach for exploration tasks using a fleet of quadrotors. The quadrotor team operates with asynchronous and limited communication, and does not require any central control. The coverage paths and workload allocations of the team are optimized and balanced in order to fully realize the system's potential. The associated paper is under review, so code of this part will be released in the future.
Complete videos: video1, video2.
Authors: Boyu Zhou and Shaojie Shen from the HUKST Aerial Robotics Group.
Please cite our paper if you use this project in your research:
- FUEL: Fast UAV Exploration using Incremental Frontier Structure and Hierarchical Planning, Boyu Zhou, Yichen Zhang, Xinyi Chen, Shaojie Shen, IEEE Robotics and Automation Letters (RA-L) with ICRA 2021 option
@article{zhou2021fuel,
title={FUEL: Fast UAV Exploration Using Incremental Frontier Structure and Hierarchical Planning},
author={Zhou, Boyu and Zhang, Yichen and Chen, Xinyi and Shen, Shaojie},
journal={IEEE Robotics and Automation Letters},
volume={6},
number={2},
pages={779--786},
year={2021},
publisher={IEEE}
}
Please kindly star ⭐ this project if it helps you. We take great efforts to develope and maintain it 😁😁.
This project has been tested on Ubuntu 16.04(ROS Kinetic) and 18.04(ROS Melodic). Take Ubuntu 18.04 as an example, run the following commands to install required tools:
sudo apt-get install libarmadillo-dev ros-melodic-nlopt
Then simply clone and compile our package (using ssh here):
cd ${YOUR_WORKSPACE_PATH}/src
git clone git@github.com:HKUST-Aerial-Robotics/FUEL.git
cd ../
catkin_make
After compilation you can start a sample exploration demo. Firstly run Rviz
for visualization:
source devel/setup.bash && roslaunch exploration_manager rviz.launch
then run the simulation (run in a new terminals):
source devel/setup.bash && roslaunch exploration_manager exploration.launch
By default you can see an office-like environment. Trigger the quadrotor to start exploration by the 2D Nav Goal
tool in Rviz
. A sample is shown below, where unexplored structures are shown in grey and explored ones are shown in colorful voxels. The FoV and trajectories of the quadrotor are also displayed.
The exploration environments in our simulator are represented by .pcd files. We provide several sample environments, which can be selected in simulator.xml:
<!-- Change office.pcd to specify the exploration environment -->
<!-- We provide office.pcd, office2.pcd, office3.pcd and pillar.pcd in this repo -->
<node pkg ="map_generator" name ="map_pub" type ="map_pub" output = "screen" args="$(find map_generator)/resource/office.pcd"/>
Other examples are listed below.
office2.pcd:
office3.pcd:
pillar.pcd:
If you want to use your own environments, simply place the .pcd files in map_generator/resource, and follow the comments above to specify it. You may also need to change the bounding box of explored space in exploration.launch:
<arg name="box_min_x" value="-10.0"/>
<arg name="box_min_y" value="-15.0"/>
<arg name="box_min_z" value=" 0.0"/>
<arg name="box_max_x" value="10.0"/>
<arg name="box_max_y" value="15.0"/>
<arg name="box_max_z" value=" 2.0"/>
To create your own .pcd environments easily, check the next section.
We provide a simple tool to create .pcd environments. First, run:
rosrun map_generator click_map
Then in Rviz
, use the 2D Nav Goal
tool (shortcut G) to create your map. Two consecutively clicked points form a wall.
An example is illustrated:
After you've finished, run the following node to save the map in another terminal:
rosrun map_generator map_recorder ~/
Normally, a file named tmp.pcd will be saved at ~/
. You may replace ~/
with any locations you want.
Lastly, you can use this file for exploration, as mentioned here.
We use NLopt for non-linear optimization and use LKH for travelling salesman problem.