GithubHelp home page GithubHelp logo

mit-acl / mader Goto Github PK

View Code? Open in Web Editor NEW
457.0 15.0 76.0 125.74 MB

Trajectory Planner in Multi-Agent and Dynamic Environments

License: BSD 3-Clause "New" or "Revised" License

Shell 0.07% CMake 0.55% C++ 64.53% Mathematica 31.53% MATLAB 0.98% AMPL 0.36% Python 1.89% Dockerfile 0.10%
optimization path-planning trajectory-optimization multi-agent obstacle-avoidance minvo mader planner ros

mader's Introduction

MADER: Trajectory Planner in Multi-Agent and Dynamic Environments

Accepted for publication in the IEEE Transactions on Robotics (T-RO)

Single-Agent Multi-Agent
MADER: Trajectory Planner in Multi-Agent and Dynamic Environments MADER: Trajectory Planner in Multi-Agent and Dynamic Environments
MADER: Trajectory Planner in Multi-Agent and Dynamic Environments MADER: Trajectory Planner in Multi-Agent and Dynamic Environments

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.

mader's People

Contributors

cttdev avatar jtorde avatar kotakondo avatar shubham-shahh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mader's Issues

[Question] Are there any references to the basis transformations are calculated?

Hi there,

I checked https://github.com/mit-acl/minvo but could not find how these basis transformations were obtained

BSPLINE to MINVO POSITION

//////BSPLINE to MINVO POSITION/////////

BSPLINE to BEZIER POSITION

//////BSPLINE to MINVO POSITION/////////

if you can provide any hint, it would be great.

Thanks,

the input and output of mader

hello I have great interest in mader
so i want to know the input and output of mader in real world,such as depth image or lidar point cloud?

[ROS Noetic/NLopt] This should never happen: All complete paths are guaranteed to be feasible

I encountered this issue when trying to run mader in ROS Noetic and NLopt (I have not tested any other version). This issue can be reproduced in docker, as follows:

Create an empty directory containing the dockerfile Dockerfile with this content:

FROM ros:noetic

RUN apt update
RUN apt install git -y

WORKDIR /home/src

RUN git clone https://github.com/mit-acl/mader.git --recursive
WORKDIR /home

RUN export DEBIAN_FRONTEND=noninteractive && rosdep install --from-paths src/mader --ignore-src -r -y --rosdistro noetic

RUN apt install python3-catkin-tools libgmp3-dev libmpfr-dev wget -y

#CGAL
RUN wget https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-4.14.2/CGAL-4.14.2.tar.xz
RUN tar -xf CGAL-4.14.2.tar.xz
WORKDIR /home/CGAL-4.14.2
RUN cmake . -DCMAKE_BUILD_TYPE=Release
RUN make install
WORKDIR /home
RUN rm -rf CGAL-4.14.2 CGAL-4.14.2.tar.xz

#NLOPT
RUN wget https://github.com/stevengj/nlopt/archive/v2.6.2.tar.gz
RUN tar -xvzf v2.6.2.tar.gz
WORKDIR /home/nlopt-2.6.2
RUN cmake . && make install
WORKDIR /home
RUN rm -rf nlopt-2.6.2 v2.6.2.tar.gz

RUN . /opt/ros/noetic/setup.sh && catkin config -DCMAKE_BUILD_TYPE=Release && catkin build -DUSE_GUROBI=OFF

RUN apt install python-is-python3 ros-noetic-gazebo-msgs -y

In this directory, run docker build -t ros_mader . and afterwards run docker run -it ros_mader bash -c '. devel/setup.bash && roslaunch mader single_agent_simulation.launch'. This is the full logging output:

... logging to /root/.ros/log/f3df482a-6291-11ec-8558-0242ac110002/roslaunch-90861c4a2d98-1.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://90861c4a2d98:34169/

SUMMARY
========

PARAMETERS
 * /SQ01s/mader/Ra: 4.0
 * /SQ01s/mader/a_max: [20.0, 20.0, 9.6]
 * /SQ01s/mader/a_star_bias: 1.0
 * /SQ01s/mader/a_star_fraction_voxel_size: 0.5
 * /SQ01s/mader/a_star_samp_x: 5
 * /SQ01s/mader/a_star_samp_y: 5
 * /SQ01s/mader/a_star_samp_z: 5
 * /SQ01s/mader/allow_infeasible_guess: True
 * /SQ01s/mader/alpha: 0.0
 * /SQ01s/mader/alpha_filter_dyaw: 0
 * /SQ01s/mader/alpha_shrink: 0.95
 * /SQ01s/mader/basis: MINVO
 * /SQ01s/mader/beta: 0.0
 * /SQ01s/mader/color_type: vel
 * /SQ01s/mader/dc: 0.01
 * /SQ01s/mader/deg_pol: 3
 * /SQ01s/mader/dist_factor_alloc_close: 2.0
 * /SQ01s/mader/drone_radius: 0.05
 * /SQ01s/mader/epsilon_tol_constraints: 1e-06
 * /SQ01s/mader/factor_alloc: 1.0
 * /SQ01s/mader/factor_alloc_close: 1.5
 * /SQ01s/mader/factor_alpha: 1.5
 * /SQ01s/mader/fov_depth: 4.5
 * /SQ01s/mader/fov_horiz_deg: 100
 * /SQ01s/mader/fov_vert_deg: 100
 * /SQ01s/mader/ftol_rel: 1e-10
 * /SQ01s/mader/gamma: 0.1
 * /SQ01s/mader/goal_radius: 0.15
 * /SQ01s/mader/j_max: [30.0, 30.0, 30.0]
 * /SQ01s/mader/kappa: 0.4
 * /SQ01s/mader/lower_bound_runtime_snlopt: 0.05
 * /SQ01s/mader/mu: 0.4
 * /SQ01s/mader/n_agents: 16
 * /SQ01s/mader/num_pol: 4
 * /SQ01s/mader/res_plot_traj: 15.0
 * /SQ01s/mader/solver: LD_MMA
 * /SQ01s/mader/upper_bound_runtime_snlopt: 0.35
 * /SQ01s/mader/use_ff: True
 * /SQ01s/mader/v_max: [3.5, 3.5, 3.5]
 * /SQ01s/mader/visual: True
 * /SQ01s/mader/w_max: 2.5
 * /SQ01s/mader/weight: 1000.0
 * /SQ01s/mader/x_max: 10000000000.0
 * /SQ01s/mader/x_min: -1000000000.0
 * /SQ01s/mader/xtol_rel: 1e-13
 * /SQ01s/mader/y_max: 1000000000.0
 * /SQ01s/mader/y_min: -1000000000.0
 * /SQ01s/mader/z_max: 1000000000.0
 * /SQ01s/mader/z_min: -1000000000.0
 * /SQ01s/perfect_tracker/x: 0
 * /SQ01s/perfect_tracker/y: 0
 * /SQ01s/perfect_tracker/yaw: 0.0
 * /SQ01s/perfect_tracker/z: 1.0
 * /SQ01s/rosconsole_overlay_text/nodes: /SQ01s/mader
 * /SQ01s/rosconsole_overlay_text/reverse_lines: False
 * /rosdistro: noetic
 * /rosversion: 1.15.13

NODES
  /
    behavior_selector (behavior_selector/behavior_selector_node.py)
    dynamic_corridor (mader/dynamic_corridor.py)
    rviz (rviz/rviz)
  /SQ01s/
    mader (mader/mader_node)
    mader_commands (mader/mader_commands.py)
    perfect_tracker (mader/perfect_controller.py)
    rosconsole_overlay_text (jsk_rviz_plugins/rosconsole_overlay_text.py)
    vicon2world (tf/static_transform_publisher)

auto-starting new master
process[master]: started with pid [50]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to f3df482a-6291-11ec-8558-0242ac110002
process[rosout-1]: started with pid [60]
started core service [/rosout]
process[SQ01s/mader_commands-2]: started with pid [67]
process[SQ01s/vicon2world-3]: started with pid [68]
process[SQ01s/perfect_tracker-4]: started with pid [69]
process[behavior_selector-5]: started with pid [70]
process[rviz-6]: started with pid [76]
process[dynamic_corridor-7]: started with pid [77]
process[SQ01s/mader-8]: started with pid [78]
process[SQ01s/rosconsole_overlay_text-9]: started with pid [79]
qt.qpa.xcb: could not connect to display 
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Parameters obtained
Parameters obtained, checking them...
Parameters checked
In the SolverNlopt Constructor
initial_state= 
Pos, Vel, Accel, Jerk= -4  1 -2 -1.3  0.6  1.5 0 0 0 0 0 0
final_state= 
Pos, Vel, Accel, Jerk= 4 2 3 0 0 0 0 0 0 0 0 0
[NL] Running A* from-4  1 -2 to 4 2 3, allowing time = 0 ms
[A*] Running...
[A*] Max Runtime was reached
[A*] choosing closest complete path as solution
complete_closest_dist_so_far_= 1.27
velocity constraint for vi is not satisfied, i=0
N_=10
qa= -4  1 -2
qb= -4.17  1.08  -1.8
qc= -4.51  1.24 -1.41
qd= 4.35 1.47 2.31
Vbs= 
-1.3 -1.3 22.4
 0.6  0.6  0.6
 1.5  1.5 9.41
V_newbasis= 
-1.3 -1.3 22.4
 0.6  0.6  0.6
 1.5  1.5 9.41
v_max_= 
10
10
10
Using matrix 
1 0 0
0 1 0
0 0 1
velocity constraint for vi is not satisfied, i=1
N_=10
qa= -4.17  1.08  -1.8
qb= -4.51  1.24 -1.41
qc= 4.35 1.47 2.31
qd= 3.83 1.71  2.9
Vbs= 
-1.3 22.4 -1.3
 0.6  0.6  0.6
 1.5 9.41  1.5
V_newbasis= 
-1.3 22.4 -1.3
 0.6  0.6  0.6
 1.5 9.41  1.5
v_max_= 
10
10
10
Using matrix 
1 0 0
0 1 0
0 0 1
velocity constraint for vi is not satisfied, i=2
N_=10
qa= -4.51  1.24 -1.41
qb= 4.35 1.47 2.31
qc= 3.83 1.71  2.9
qd= 3.32 1.95  3.5
Vbs= 
22.4 -1.3 -1.3
 0.6  0.6  0.6
9.41  1.5  1.5
V_newbasis= 
22.4 -1.3 -1.3
 0.6  0.6  0.6
9.41  1.5  1.5
v_max_= 
10
10
10
Using matrix 
1 0 0
0 1 0
0 0 1
This should never happen: All complete paths are guaranteed to be feasible
=====================================================
[rviz-6] process has died [pid 76, exit code -6, cmd /opt/ros/noetic/lib/rviz/rviz -d /home/src/mader/mader/rviz_cfgs/mader.rviz __name:=rviz __log:=/root/.ros/log/f3df482a-6291-11ec-8558-0242ac110002/rviz-6.log].
log file: /root/.ros/log/f3df482a-6291-11ec-8558-0242ac110002/rviz-6*.log
********************************
['/home/src/mader/mader/scripts/dynamic_corridor.py', '80', '__name:=dynamic_corridor', '__log:=/root/.ros/log/f3df482a-6291-11ec-8558-0242ac110002/dynamic_corridor-7.log']
Starting perfect tracker node for: /SQ01s/
Starting behavior selector
80
[SQ01s/mader-8] process has died [pid 78, exit code -6, cmd /home/devel/lib/mader/mader_node ~state:=state ~who_plans:=who_plans ~term_goal:=term_goal ~traj:=traj ~goal:=goal ~setpoint:=setpoint __name:=mader __log:=/root/.ros/log/f3df482a-6291-11ec-8558-0242ac110002/SQ01s-mader-8.log].
log file: /root/.ros/log/f3df482a-6291-11ec-8558-0242ac110002/SQ01s-mader-8*.log

parameters for goal reaching Paths

Hi,
Which parameters need to be modified to ensure that the algorithm consistently calculates a path that reaches the final goal?
( I'm using nlopt if it matters)
Thanks!

Jerk bounds

Hi,

I was curious as to why you didn't add jerk bounds in the optimization formulation to further guarantee feasability. Is it possible with the current formulation? Am I missing something? Is the cost function minimizing the jerk sufficient?

Cheers,
CT

'snapstack_msgs.msg' file missing

I followed the setup steps in the description, however, an error occured when running 'bash src/mader/install_and_compile.sh'.

The error is :
'Could not find a package configuration file provided by "snapstack_msgs" with any of the following names:
snapstack_msgsConfig.cmake
snastack_msgs-config.cmake '

And this directly led to building failure of the package named "decomp_test_node"
Could anyone please help me with this one?

Using NLOPT optimizer

Hi,
I'm interested in running Mader with the NLOPT optimizer. Could you advise me on the most suitable commit version to use for this purpose? Your assistance would be greatly appreciated.
Best, Hadar.

Issue with new version of GUROBI

Hi,
Thank you for this fantastic package.
I had the following error while running the package with ROS Noetic on Ubuntu 20.04.

Screenshot from 2022-12-07 18-28-56

there is nothing in my terminal when i use docker

Hello, I followed the tutorial to simulate, but when I run it, my terminal doesn't seem to change? I'm not familiar with docker because docker doesn't have a visualization function. Here's what I've typed, along with feedback
1704810521800
1704810548872

agent stuck at static obstacles

As shown in the figure, I have modified the dimensions of the static obstacles and the agents stuck in avoiding them. It seems the agents don't have the perception capabilities and straight goes towards the obstacles rather avoiding them. Can you please let me know if I am making any mistakes or if I need to change any parameters?

P.S. The dimension of the static obstacle is modified only in the class MovingForest initialization of the dynamic_forest.py script.
Thanks
Screenshot from 2023-01-02 18-46-14

single_agent_simulation

I can successfully make the package of mader, but when I run the follow cmd, I encountered a fetal problem.
roslaunch mader single_agent_simulation.launch

[SQ01s/mader-8] process has died [pid 30973, exit code -6, cmd /home/dzp/mader_ws/devel/lib/mader/mader_node ~state:=state ~who_plans:=who_plans ~term_goal:=term_goal ~traj:=traj ~goal:=goal ~setpoint:=setpoint __name:=mader __log:=/home/dzp/.ros/log/497f92e2-8a1f-11ee-bb0b-e89c257f2e5e/SQ01s-mader-8.log].
log file: /home/dzp/.ros/log/497f92e2-8a1f-11ee-bb0b-e89c257f2e5e/SQ01s-mader-8*.log

Screenshot from 2023-11-23 16-44-38

Gurobi implementation of QCQP

Hi,

Firstly, thanks for this wonderful package. Upon looking into the codes, I realize that the Gurobi version does not implement the original QCQP problem introduced in the paper, but instead it uses the initial guesses of the plane parameters as constants. I would like to ask, is this purely for efficiency reasons, or it is because Gurobi is not capable of solving this type of problem? From Gurobi documentation it seems capable of solving QCQP, but it requires the problem to be convex.
Thank you!

Best Regards,
Mq

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.