[Docker provided] How to build, install and run open-source exploration algorithms
Exploration-algorithms
- How to build, install and run open-source exploration algorithms
- The repo provides ready-to-go
Dockerimage - Algorithms are:
List
1. Volumetric mapping purpose only
| Name | Papers | Videos | Code | Main Group | |:-----------:|:---------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------:|:---------------------------:| | NBVP | 2016 ICRA | | git | ETHZ-ASL | | GBP | 2019 IROS, 2020 JFR | youtube, youtube2, youtube3 | Same with GBP2 | ETHZ-ASL+RSL / NTNU-ARL | | GBP2 | 2022 ICRA | youtube | git | ETHZ-ASL+RSL / NTNU-ARL | | MBP | 2020 ICRA | youtube, youtube2, youtube3 | git | ETHZ-ASL / NTNU-ARL | | AEP | 2019 RAL | youtube | git | LiU-AIICS / KTH-RPL | | UFOExplorer | 2022 RAL | youtube | git | KTH-RPL | | FUEL | 2021 RAL | youtube | git | HKUST Aerial Robotics Group | | DSVP | 2021 IROS | youtube | git | CMU Robotics Institute | | TARE | 2021 RSS, 2021 ICRA | youtube | git | CMU Robotics Institute |
2. Volumetric mapping + Considering pose estimation
| Name | Papers | Videos | Code | Main Group | |:------:|:-------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------:|:-------------------------------------------------------:|:----------:| | RHEM | 2017 ICRA, 2019 Autonomous Robots | youtube, youtube2 | git | NTNU-ARL | | GLocal | 2021 RAL | youtube | git | ETHZ-ASL |
3. Volumetric mapping + inspection/coverage path planning
| Name | Papers | Videos | Code | Main Group | |:---------:|:-------------------------------------------------------------:|:---------------------------------------:|:---------------------------------------------------------:|:---------------------------:| | OIPP | 2020 RAL | youtube | git | ETHZ-ASL | | PredRecon | 2023 ICRA (arXiv yet) | youtube | git | HKUST Aerial Robotics Group |
Option1: How to build and run with the ready-to-go docker image
Installation
0. Install docker, get image, and generate container
Unfold to see
- If you do not have
dockeryet, install it
curl -fsSL https://get.docker.com/ | sudo sh
sudo usermod -aG docker $USER
##### NVIDIA-Docker, GPU distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker
- Get the ready-to-go docker image with
dockerfile
dockerfile with the contents:
FROM ghcr.io/engcang/exploration_sota:v1.0
# nvidia-container-runtime ENV NVIDIAVISIBLEDEVICES \ ${NVIDIAVISIBLEDEVICES:-all} ENV NVIDIADRIVERCAPABILITIES \ ${NVIDIADRIVERCAPABILITIES:+$NVIDIADRIVERCAPABILITIES,}graphics
USER ubuntu WORKDIR /home/ubuntu CMD /bin/bash
+ Then, make the image with docker build -t exploration . - Generate a docker conatiner with
run.shfile
run.sh with the contents: #!/bin/sh
XSOCK=/tmp/.X11-unix XAUTH=/tmp/.docker.xauth touch $XAUTH xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
docker run --runtime=nvidia --privileged --gpus all --rm -it \ --volume=$XSOCK:$XSOCK:rw \ --volume=$XAUTH:$XAUTH:rw \ --volume=$HOME:$HOME \ --shm-size=4gb \ --env="XAUTHORITY=${XAUTH}" \ --env="DISPLAY=${DISPLAY}" \ --env=TERM=xterm-256color \ --env=QTX11NO_MITSHM=1 \ --net=host \ exploration:latest bash
+ Then run container as follows: chmod +x run.sh ./run.sh
1. How to run
Unfold to see
- In the
docker,
cd ~/
ls #see .sh files there
# NBVP ./nbvp.sh
# GBP ./gbp.sh !!Then, click "Start planner" in Rviz
# MBP ./mbp.sh !!Then, click "Start planner" in Rviz
# AEP ./aep_gazebo.sh ./aep.sh lidar #with lidar sensor ./aep.sh rgbd #with rgbd sensor rosservice call /mavros/cmd/arming "value: true" rosservice call /mavros/setmode "basemode: 0 custom_mode: 'OFFBOARD'"
# FUEL ./fuel.sh !!Start with "2D Nav Goal" in Rviz
# DSVP ./dsvptaresim.sh ./dsvp.sh
# TARE ./dsvptaresim.sh ./tare.sh
# OIPP ./oipp.sh rosservice call /planner/plannernode/togglerunning "data: true"
Option2: How to build and run on your local computer
Installation
0. Common dependencies
- ROS: all
- OctoMap: NBVP, GBP, MBP, AEP, DSVP
- Voxblox: MBP, GBP, OIPP
1. Install simulator (required)
Unfold to see
Note: When having PX4-SITL and RotorS Simulator at the same time
- They both use
libmav_msgs.sofile with the same name but different source codes. - If you have both simulators, do not forget to change the name of either one temporally.
PX4-Autopilot/build/px4sitldefault/buildgazebo/libmavmsgs.so
+ RotorS: <workspace>/build/rotorsgazeboplugins/libmav_msgs.so
1-1. Install PX4-SITL - for AEP
- Follow here
1-2. Install RotorS Simulator - for NBVP, GBP, MBP, OIPP
- Because of the version issuse, I recommend to install as here
- Get the code and build
cd ~/catkin_ws/src
git clone https://github.com/ethz-asl/rotors_simulator --recursive
rm -r rotorssimulator/rotorsdescription
rm -r rotorssimulator/rotorsgazebo
cd ~/catkin_ws git clone https://github.com/engcang/exploration-algorithms mv exploration-algorithms/rotorsdescription src/rotorssimulator/ mv exploration-algorithms/rotorsgazebo src/rotorssimulator/
catkin build -DCMAKEBUILDTYPE=Release
1-3. Install Autonomous Exploration Development Environment - for DSVP, TARE
- Follow here
2. Install algorithms
Note: When having NBVP, GBP, MBP at the same time
- They use different versions of
volumetricmapping,rotorssimulator,mavcomm,eigencatkin,eigen_checks, etc...
2-1. NBVP
Unfold to see
- Install dependencies and get the code
cd ~/catkin_ws/src
git clone https://github.com/ethz-asl/nbvplanner.git
cd nbvplanner
git submodule update --init --recursive
rm -r rotors # install it as above Section 1-2.
cd mav_comm && git pull origin master
- Change CMakeLists.txt and build the code
cd ~/catkin_ws/src/nbvplanner/nbvplanner
wget -O CMakeLists.txt https://raw.githubusercontent.com/engcang/exploration-algorithms/main/nbvp/nbvplanner/CMakeLists.txt
cd ~/catkinws/src/nbvplanner/interfacenbvp_rotors
wget -O CMakeLists.txt https://raw.githubusercontent.com/engcang/exploration-algorithms/main/nbvp/interfacenbvprotors/CMakeLists.txt
cd ~/catkin_ws catkin build -DCMAKEBUILDTYPE=Release
2-2. GBP2
Unfold to see
- Install dependencies and get the code
sudo apt install python-catkin-tools \
libgoogle-glog-dev \
ros-melodic-joy \
ros-melodic-twist-mux \
ros-melodic-interactive-marker-twist-server \
ros-melodic-octomap-ros
cd catkin_ws git clone https://github.com/ntnu-arl/gbplanner_ros.git -b gbplanner2
wstool init wstool merge ./gbplannerros/packagesssh.rosinstall wstool update
rm -r src/sim/rotors_simulator #install it as above Section 1-2.
- Build
cd ~/catkin_ws catkin build -DCMAKEBUILDTYPE=Release
2-3. GBP1
Unfold to see
- Clone and build the code
cd ~/catkin_ws
git clone https://github.com/ntnu-arl/gbplanner_ws.git
cd gbplanner_ws
git checkout origin/melodic
wstool init
wstool merge packages_https.rosinstall
wstool update
mv gbplannerws/src/* ~/catkinws/src/ cd ~/catkin_ws rm -r src/sim/rotors_simulator # install it as above Section 1-2.
- Change the path of
Eigenin
gbplanner_ros/gbplanner/include/gbplanner/params.h + gbplannerros/gbplanner/include/gbplanner/gbplannerrviz.h + gbplannerros/gbplanner/include/gbplanner/geofencemanager.h + gbplannerros/gbplanner/include/gbplanner/graphmanager.h + gbplannerros/gbplanner/include/gbplanner/mapmanager.h + gbplanner_ros/gbplanner/include/gbplanner/rrg.h ++ //#include <eigen3/Eigen/Dense> #include <Eigen/Dense> - Build
cd ~/catkin_ws catkin build -DCMAKEBUILDTYPE=Release
!Optionally, for use with OctoMap catkin build -DCMAKEBUILDTYPE=Release -DUSE_OCTOMAP=1
2-4. MBP
Unfold to see
- Get the code and build
git clone https://github.com/ntnu-arl/mbplanner_ws.git
cd mbplanner_ws
git checkout melodic-devel
wstool init
wstool merge packages_https.rosinstall
wstool update
mv mbplannerws/src/* ~/catkinws/src/ cd ~/catkin_ws rm -r src/sim/rotors_simulator # install it as above Section 1-2.
- Fix the code error
exploration/mbplanner/mbplannerros/plannercommon/src/params.cpp + Line 847 (in MBParams::loadParams(std::string ns)) ++ // Add return true; - Change the path of
Eigeninexploration/mbplannerros/plannercommon/include/planner_common/visualizer.h
++ //#include <eigen3/Eigen/Dense> #include <Eigen/Dense> - Build
cd ~/catkin_ws catkin build -DCMAKEBUILDTYPE=Release
!Optionally, for use with OctoMap catkin build -DCMAKEBUILDTYPE=Release -DUSE_OCTOMAP=1
- Trouble shooting for
planner_common
opencv path errors from image_proc, + Change the directory of opencv in /opt/ros/melodic/share/imageproc/cmake/imageprocConfig.cmake
2-5. AEP
Unfold to see
- Install dependencies and build the code
sudo apt install ros-melodic-octomap*
sudo apt-get install libspatialindex-dev
python2 -m pip install rtree
cd ~/catkin_ws/src/ git clone https://github.com/catkin/catkin_simple.git git clone https://github.com/mseln/aeplanner.git cd .. catkin build -DCMAKEBUILDTYPE=Release
## If PCL errors in rpl_exploration, ## change compiler to newer than c++14 ## in line 4 for CMakeLists.txt of rpl_exploration
2-6. FUEL
Unfold to see
- Install dependencies
sudo apt-get install libarmadillo-dev
sudo apt-get install libdw-dev
git clone https://github.com/stevengj/nlopt.git
cd nlopt
mkdir build && cd build
cmake ..
make
sudo make install
- Get the code and change
CMakeLists.txtofbsline_opt
cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/FUEL.git
cd FUEL/fuelplanner/bsplineopt
wget -O CMakeLists.txt https://raw.githubusercontent.com/engcang/exploration-algorithms/main/fuel/CMakeLists.txt
- Change compiler into
c++14in allCMakeLists.txtfiles
#set(CMAKECXXFLAGS "-std=c++11")
set(CMAKECXXFLAGS "-std=c++14")
- Fix the code error
FUEL/fuelplanner/pathsearching/src/kinodynamic_astar.cpp
+ Line 654 (in int KinodynamicAstar::timeToIndex(double time))
++
// Add
return idx;
- Build the code
cd ~/catkin_ws
catkin build -DCMAKEBUILDTYPE=Release
2-7. DSVP
Unfold to see
- Install dependencies and get the code
sudo apt install ros-melodic-octomap-ros libgoogle-glog-dev libgflags-dev
cd ~/catkin_ws/src git clone https://github.com/HongbiaoZ/dsv_planner.git cd dsv_planner git checkout origin/melodic
- Fix
CMakeLists.txtindsvplanner/src/volumetricmapping/octomap_world
#targetlinklibraries(octomapmanager ${PROJECTNAME} glog) targetlinklibraries(octomapmanager ${PROJECTNAME} glog gflags) - Fix
CMakeLists.txtindsv_planner/src/dsvplanner/dsvplanner
find_package(catkin REQUIRED COMPONENTS roscpp geometry_msgs visualization_msgs message_generation octomap_world tf kdtree std_msgs nav_msgs misc_utils graph_planner #ADDED graph_utils ) - Change the path of
Eigenin
dsvplanner/src/dsvplanner/dsvplanner/include/dsvplanner/drrtbase.h + dsv_planner/src/dsvplanner/dsvplanner/src/drrtp.cpp + dsvplanner/src/dsvplanner/dsvplanner/src/drrtpnode.cpp ++ //#include <eigen3/Eigen/Dense> #include <Eigen/Dense> - Build the code
cd ~/catkin_ws catkin build -DCMAKEBUILDTYPE=Release
2-8. TARE
Unfold to see
- Get and build the code
cd ~/catkin_ws/src
git clone https://github.com/caochao39/tare_planner.git
cd ..
sudo apt remove libflags* ### as it is using OR-Tools
catkin build -DCMAKEBUILDTYPE=Release
2-9. OIPP - without Unreal, Gazebo instead (thanks to Dongkyu Lee)
Unfold to see
- Get dependencies
sudo apt-get install python-wstool python-catkin-tools
sudo apt-get install ros-melodic-cmake-modules ros-melodic-control-toolbox ros-melodic-joy ros-melodic-octomap-ros ros-melodic-mavlink ros-melodic-geographic-msgs autoconf libyaml-cpp-dev protobuf-compiler libgoogle-glog-dev liblapacke-dev libgeographic-dev
cd ~/catkin_ws/src git clone https://github.com/ethz-asl/mavactive3d_planning wstool init wstool merge mavactive3dplanning/mavactive3dplanning_https.rosinstall wstool update
rm -r rotors_simulator # install it as above Section 1-2. rm -r yamlcppcatkin # prevent confliction
cd .. catkin build -DCMAKEBUILDTYPE=Release
Run Demos
1. NBVP
Unfold to see
- Important: Put
<plugin name="rosinterfaceplugin" filename="librotorsgazeborosinterfaceplugin.so"/>into Gazebo.worldfile - Run the demo
roslaunch interfacenbvprotors flat_exploration.launch
2. GBP2 - it does not work for me yet
Unfold to see
- Run the demo
roslaunch gbplanner rmf_sim.launch
or
roslaunch gbplanner smb_sim.launch
3. GBP1
Unfold to see
- Check
mapconfigfile, if it isoctomaporvoxblox
<arg name="mapconfigfile" default="$(arg octomapconfigfile)"/>
<arg name="mapconfigfile" default="$(arg voxbloxconfigfile)"/>
- Run the demo
roslaunch gbplanner gbplanner_sim.launch
rosservice call /plannercontrolinterface/stdsrvs/automaticplanning "{}"
4. MBP
Unfold to see
- Check
mapconfigfile, if it isoctomaporvoxblox
<arg name="mapconfigfile" default="$(arg octomapconfigfile)"/>
<arg name="mapconfigfile" default="$(arg voxbloxconfigfile)"/>
- Run the demo
roslaunch mbplanner mbplannerm100sim.launch
rosservice call /plannercontrolinterface/stdsrvs/automaticplanning "{}"
5. AEP (no official demo provided, I added environments)
Unfold to see
- Get config files and Gazebo models and build
git clone https://github.com/engcang/exploration-algorithms --recursive
mv exploration-algorithms/aep/oustergazeboplugins ~/catkin_ws/src/
mv exploration-algorithms/aep/gazeboenv ~/catkinws/src/
mv exploration-algorithms/aep/rplexploraiton ~/catkinws/src/aeplanner/
cd ~/catkin_ws catkin build -DCMAKEBUILDTYPE=Release
- Set Gazebo paths
cd ~/catkinws/src/gazeboenv/gazebo_maps/reconstruction tar -xf recon3.tar.xz
gedit ~/.bashrc
!Then, edit GAZEBOPLUGINPATH and GAZEBOMODELPATH!
export GAZEBOPLUGINPATH=:/home/$(whoami)/PX4-Autopilot/build/px4sitldefault/buildgazebo:$GAZEBOPLUGIN_PATH export GAZEBOMODELPATH=/home/$(whoami)/catkinws/src/gazeboenv/dronemodels:/home/$(whoami)/catkinws/src/gazeboenv/gazebomaps/reconstruction:/home/$(whoami)/PX4-Autopilot/Tools/sitlgazebo/models:$GAZEBOMODEL_PATH
- Run the demo
roslaunch rplexploration px4sitl_gazebo.launch # choose sensor roslaunch rplexploration rplexploration.launch sensor:=lidar roslaunch rplexploration rplexploration.launch sensor:=rgbd # arming & offboarding rosservice call /mavros/cmd/arming "value: true" rosservice call /mavros/setmode "basemode: 0 custom_mode: 'OFFBOARD'"
6. FUEL
Unfold to see
- Run the demo
roslaunch exploration_manager rviz.launch
roslaunch exploration_manager exploration.launch
- Start with
2D Nav Goalin Rviz
7. DSVP
Unfold to see
- Run the demo
roslaunch vehiclesimulator systemgarage.launch
roslaunch dsvplaunch exploregarage.launch
8. TARE
Unfold to see
- Run the demo
roslaunch vehiclesimulator systemgarage.launch
roslaunch tareplanner exploregarage.launch
- Trouble shooting
symbol lookup error: tareplanner/or-tools/lib/libortools.so: undefined symbol: ZN6gflags14FlagRegistererC1IiEEPKcS3S3PTS5
+ Check if libortools.so is referring the right libraries
+ If reffering wrong, delete or rename the wrong libraries temporarily
ldd tare_planner/or-tools/lib/ldd libortool.so
! wrong output libgflags.so.2.2 => sota_ws/devel/lib/libgflags.so.2.2 (0x00007f036830d000) libglog.so.0 => sota_ws/devel/lib/libglog.so.0 (0x00007f03680dc000)
! after delete/rename wrong files sudo ldconfig ldd tare_planner/or-tools/lib/ldd libortool.so ! correct output libgflags.so.2.2 => tareplanner/src/tareplanner/or-tools/lib/./libgflags.so.2.2 (0x00007fe6749e0000) libglog.so.0 => tareplanner/src/tareplanner/or-tools/lib/./libglog.so.0 (0x00007fe6747a3000)
9. OIPP without Unreal, Gazebo instead (thanks to Dongkyu Lee)
Unfold to see
- Get modified files for running without Unreal but Gazebo instead
git clone https://github.com/engcang/exploration-algorithms --recursive
cd exploration-algorithms/oipp
mv active3dplanningappreconstruction ~/catkinws/src/mavactive3dplanning/
mv active3dplanningcore ~/catkinws/src/mavactive3d_planning/
cd ~/catkin_ws catkin build -DCMAKEBUILDTYPE=Release
- Run demo
roslaunch active3dplanningappreconstruction nounrealrun_experiment.launch rosservice call /planner/plannernode/togglerunning "data: true"