openrr/rrt

RRT (Rapidly-exploring Random Tree) library in Rust

41

stars

87

commits

Rust

primary language

Dec 23, 2025

updated

algorithm
pathfinding
pathplan
robotics
rrt
rust
search

README

rrt

Build Status crates.io docs discord

RRT (Rapidly-exploring Random Tree) library in Rust.

Only Dual RRT Connect is supported.

Examples

There is an example to solve collision avoid problem.

cargo run --release --example collision_avoid

Below is the simplest example. It search the path from [-1.2, 0.0] to [1.2, 0.0] avoiding [-1, -1] - [1, 1] region. There are only one function dual_rrt_connect, which takes start, goal, is free function, random generation function, unit length of extend, max repeat num.

use rand::distributions::{Distribution, Uniform};
let result = rrt::dual_rrt_connect(
    &[-1.2, 0.0],
    &[1.2, 0.0],
    |p: &[f64]| !(p[0].abs() < 1.0 && p[1].abs() < 1.0),
    || {
        let between = Uniform::new(-2.0, 2.0);
        let mut rng = rand::thread_rng();
        vec![between.sample(&mut rng), between.sample(&mut rng)]
    },
    0.2,
    1000,
)
.unwrap();
println!("{result:?}");
assert!(result.len() >= 4);

OpenRR Community

Here is a discord server for OpenRR users and developers.

Contributors

taiki-e

56 commits

OTL

22 commits

ssr-yuki

2 commits

openrr/rrt

RRT (Rapidly-exploring Random Tree) library in Rust

41

stars

87

commits

Rust

primary language

Dec 23, 2025

updated

algorithm
pathfinding
pathplan
robotics
rrt
rust
search

README

rrt

Build Status crates.io docs discord

RRT (Rapidly-exploring Random Tree) library in Rust.

Only Dual RRT Connect is supported.

Examples

There is an example to solve collision avoid problem.

cargo run --release --example collision_avoid

Below is the simplest example. It search the path from [-1.2, 0.0] to [1.2, 0.0] avoiding [-1, -1] - [1, 1] region. There are only one function dual_rrt_connect, which takes start, goal, is free function, random generation function, unit length of extend, max repeat num.

use rand::distributions::{Distribution, Uniform};
let result = rrt::dual_rrt_connect(
    &[-1.2, 0.0],
    &[1.2, 0.0],
    |p: &[f64]| !(p[0].abs() < 1.0 && p[1].abs() < 1.0),
    || {
        let between = Uniform::new(-2.0, 2.0);
        let mut rng = rand::thread_rng();
        vec![between.sample(&mut rng), between.sample(&mut rng)]
    },
    0.2,
    1000,
)
.unwrap();
println!("{result:?}");
assert!(result.len() >= 4);

OpenRR Community

Here is a discord server for OpenRR users and developers.

Contributors

taiki-e

56 commits

OTL

22 commits

ssr-yuki

2 commits

Languages

Rust

63.4%

Shell

36.6%