• Stars
    star
    786
  • Rank 57,690 (Top 2 %)
  • Language
    C++
  • License
    MIT License
  • Created almost 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Library with search algorithms for task and path planning for multi robot/agent systems

Build

libMultiRobotPlanning

libMultiRobotPlanning is a library with search algorithms primarily for task and path planning for multi robot/agent systems. It is written in C++(14), highly templated for good performance, and comes with useful examples.

The following algorithms are currently supported:

  • Single-Robot Algorithms

    • A*
    • A* epsilon (also known as focal search)
    • SIPP (Safe Interval Path Planning)
  • Multi-Robot Algorithms

    • Conflict-Based Search (CBS)
    • Enhanced Conflict-Based Search (ECBS)
    • Conflict-Based Search with Optimal Task Assignment (CBS-TA)
    • Enhanced Conflict-Based Search with Optimal Task Assignment (ECBS-TA)
    • Prioritized Planning using SIPP (example code for SIPP)
  • Assignment Algorithms

    • Minimum sum-of-cost (flow-based; integer costs; any number of agents/tasks)
    • Best Next Assignment (series of optimal solutions)

Building

Tested on Ubuntu 16.04.

mkdir build
cd build
cmake ..
make

Targets

  • make: Build examples, only
  • make docs: build doxygen documentation
  • make clang-format: Re-format all source files
  • make clang-tidy: Run linter & static code analyzer
  • make run-test: Run unit-tests

Run specific tests

python3 ../test/test_next_best_assignment.py TestNextBestAssignment.test_1by2

Run example instances

ECBS

./ecbs -i ../benchmark/32x32_obst204/map_32by32_obst204_agents10_ex1.yaml -o output.yaml -w 1.3
python3 ../example/visualize.py ../benchmark/32x32_obst204/map_32by32_obst204_agents10_ex1.yaml output.yaml

Generalized Roadmaps

CBS works on generalized graphs, with a particular focus on optional wait actions (e.g., this can be used with motion primitives as well). However, the roadmap annotation and visualization step currently assume a 2D Euclidean embedding and straight-line edges.

python3 ../tools/annotate_roadmap.py ../test/mapf_simple1_roadmap_to_annotate.yaml mapf_simple1_roadmap_annotated.yaml
./cbs_roadmap -i mapf_simple1_roadmap_annotated.yaml -o output.yaml
python3 ../example/visualize_roadmap.py mapf_simple1_roadmap_annotated.yaml output.yaml