MADER: Trajectory Planner in Multi-Agent and Dynamic Environments
Accepted for publication in the IEEE Transactions on Robotics (T-RO)
Single-Agent | Multi-Agent |
---|---|
Citation
When using MADER, please cite MADER: Trajectory Planner in Multi-Agent and Dynamic Environments (pdf, video):
@article{tordesillas2020mader,
title={{MADER}: Trajectory Planner in Multi-Agent and Dynamic Environments},
author={Tordesillas, Jesus and How, Jonathan P},
journal={IEEE Transactions on Robotics},
year={2021},
publisher={IEEE}
}
General Setup
Not Using Docker
The backend optimizer is Gurobi. Please install the Gurobi Optimizer, and test your installation typing gurobi.sh
in the terminal. Have a look at this section if you have any issues.
Then simply run this commands:
cd ~/ && mkdir ws && cd ws && mkdir src && cd src
git clone https://github.com/mit-acl/mader.git
cd ..
bash src/mader/install_and_compile.sh
The script install_and_compile.sh will install CGAL v4.12.4, GLPK and other ROS packages (check the script for details). It will also compile the repo. This bash script assumes that you already have ROS installed in your machine.
Using Docker
Install Docker using this steps, and remove the need of sudo
following these steps. Then follow these steps:
cd ~/ && mkdir ws && cd ws && mkdir src && cd src
git clone https://github.com/mit-acl/mader.git
For Gurobi, you need to download gurobi.lic file from Gurobi Web License Manager (more info here). A gurobi.lic not obtained through WLS will not work on docker. Place your gurobi.lic in docker folder and execute these commands:
cd ./mader/mader/docker
docker build -t mader . #This will probably take several minutes
Once built, docker run --volume=$PWD/gurobi.lic:/opt/gurobi/gurobi.lic:ro -it mader
Useful Docker commands
docker container ls -a #Show a list of the containers
docker rm $(docker ps -aq) #remove all the containers
docker image ls #Show a lis of the images
docker image rm XXX #remove a specific image
Running Simulations
Single-agent
roslaunch mader single_agent_simulation.launch #If you are using docker, you may want to add rviz:=false (to disable the visualization)
Now you can press G
(or click the option 2D Nav Goal
on the top bar of RVIZ) and click any goal for the drone.
With Docker
In Docker, you can do this by running docker exec -it [ID of the container] bash
in a new terminal (you can find the ID with docker container ls -a
), and then running rostopic pub /SQ01s/term_goal geometry_msgs/PoseStamped '{header: {stamp: now, frame_id: "world"}, pose: {position: {x: 10, y: 0, z: 1}, orientation: {w: 1.0}}}'
To run many single-agent simulations in different random environments, you can go to the scripts
folder and execute python run_many_sims_single_agent.py
.
Multi-agent
Note: For a high number of agents, the performance of MADER improves with the number of CPUs available in your computer.
Open four terminals and run these commands:
roslaunch mader mader_general.launch type_of_environment:="dynamic_forest"
roslaunch mader many_drones.launch action:=start
roslaunch mader many_drones.launch action:=mader
roslaunch mader many_drones.launch action:=send_goal
(if you want to modify the drone radius, you can do so in mader.yaml
). For the tables shown in the paper, the parameters (drone radius, max vel,...) used are also detailed in the corresponding section of the paper
Octopus Search
You can run the octopus search with a dynamic obstacle by simply running
roslaunch mader octopus_search.launch
And you should obtain this:
(note that the octopus search has some randomness in it, so you may obtain a different result each time you run it).
Issues when installing Gurobi:
If you find the error:
βgurobi_continuous.cpp:(.text.startup+0x74): undefined reference to
`GRBModel::set(GRB_StringAttr, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)'β
The solution is:
cd /opt/gurobi800/linux64/src/build #Note that the name of the folder gurobi800 changes according to the Gurobi version
sudo make
sudo cp libgurobi_c++.a ../../lib/
Credits:
This package uses some C++ classes from the DecompROS repo (included in the thirdparty
folder).
Note
We strongly recommend the use of Gurobi
as the backend optimizer. Alternatively, you can use NLOPT
by setting USE_GUROBI
to OFF
in the CMakeList.txt, and then running bash src/mader/install_nlopt.sh
before running bash src/mader/install_and_compile.sh
.
Approval for release: This code was approved for release by The Boeing Company in December 2020.