Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://kei18.github.io/sssp/

Quick Multi-Robot Motion Planning by Combining Sampling and Search (IJCAI-23)
https://kei18.github.io/sssp/

mapf motion-planning multi-agent-pathfinding multi-robot path-planning sssp

Last synced: 3 months ago
JSON representation

Quick Multi-Robot Motion Planning by Combining Sampling and Search (IJCAI-23)

Awesome Lists containing this project

README

        

sssp
===
[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENCE.txt)
[![CI](https://github.com/Kei18/sssp-private/actions/workflows/ci.yaml/badge.svg)](https://github.com/Kei18/sssp-private/actions/workflows/ci.yaml)

The code repository of the paper "[Quick Multi-Robot Motion Planning by Combining Sampling and Search](https://kei18.github.io/sssp/)" (SSSP; IJCAI-23).

![](./assets/demo_reduced.gif)

- It is written in Julia (≥v1.8).
- The accompanied solvers are PRM [1], RRT [2], RRT-Connect [3], PP (PRM-based) [4], CBS (PRM-based) [5], and SSSP.

## Setup

```sh
git clone https://github.com/Kei18/sssp.git && cd sssp
julia --project=. -e 'using Pkg; Pkg.instantiate()'
```

## Minimum Example

Here, I give a minimal example of the MRMP library. You can implement the below with RELP or JupyterLab.

#### Enter RELP
```sh
julia --project=.
```

#### Open JupyterLab

```sh
julia --project=. -e "using IJulia; jupyterlab()"
```

### Step 1. Generate Instance
```jl
import Random: seed!
using MRMP

seed!(46)
ins = MRMP.gen_random_instance_StatePoint2D(;
N = 5,
rad = 0.1,
num_obs = 3,
rad_obs = 0.1,
)
config_init, config_goal, obstacles, ins_params... = ins # example of ins_params: radius, base positions of arms
```

The first time may take time for JIT compiling.
You can visualize the generated instance as follows:

```jl
MRMP.plot_instance!(ins...)
```

![](./assets/minimum-example-ins.png)

### Step 2. Define Utility Functions
```jl
connect = gen_connect(config_init[1], obstacles, ins_params...) # connection checker
collide = gen_collide(config_init[1], ins_params...) # collision checker
check_goal = gen_check_goal(config_goal) # goal judge
```

### Step 3. Solve Problem
```jl
@time solution, roadmaps = MRMP.Solvers.SSSP(
config_init,
config_goal,
connect,
collide,
check_goal;
TIME_LIMIT = 10,
)
validate(config_init, connect, collide, check_goal, solution) # check validity of solution
```

### Step 4. Refine Solution
```jl
(TPG, solution, cost) = smoothing(solution, connect, collide; VERBOSE=1)
println(cost)
```

### Step 5. Visualize Solution
```jl
plot_anim!(config_init, config_goal, obstacles, ins_params...; solution=solution, interpolate_depth=3, fps=30)
```

You now get `tmp.gif` like below.

![](./assets/minimum-example.gif)

## Utilities

#### Test
```sh
julia --project -e 'using Pkg; Pkg.test()'
```

#### Formatting
```sh
julia --project=. -e 'using JuliaFormatter; format(".")'
```

## Reproduction

[![v1.2](https://img.shields.io/badge/tag-v1.2-blue.svg?style=flat)](https://github.com/Kei18/sssp/releases/tag/v1.2)

```sh
julia --project=. --threads=auto
```

### benchmark generation
```jl
include("scripts/benchmark_gen.jl"); @time main("scripts/config/bench/capsule3d", "num_instances=50")
```

### hyperparameter optimization with [Hyperopt.jl](https://github.com/baggepinnen/Hyperopt.jl)
```jl
include("scripts/hypraopt.jl"); @time main("scripts/config/hypra/params.yaml", "scripts/config/hypra/point2d.yaml")
```

### evaluate algorithms

```jl
include("./scripts/eval.jl"); @time main("./scripts/config/exp/point2d.yaml", "time_limit_sec=300")
```

## Notes
- Several planning examples are available in `./notebooks`.
- Dubins paths are computed by [Dubins.jl](https://github.com/kaarthiksundar/Dubins.jl).

## Licence
This software is released under the MIT License, see [LICENSE.txt](LICENCE.txt).

## Reference
1. Kavraki, L. E., Svestka, P., Latombe, J. C., & Overmars, M. H. (1996).
Probabilistic roadmaps for path planning in high-dimensional configuration spaces.
IEEE transactions on Robotics and Automation.
1. LaValle, S. M. (1998). Rapidly-exploring random trees: A new tool for path planning.
1. Kuffner, J. J., & LaValle, S. M. (2000).
RRT-connect: An efficient approach to single-query path planning.
In ICRA.
1. Erdmann, M., & Lozano-Perez, T. (1987). On multiple moving objects. Algorithmica.
1. Sharon, G., Stern, R., Felner, A., & Sturtevant, N. R. (2015).
Conflict-based search for optimal multi-agent pathfinding.
Artificial Intelligence (AIJ).