path_planning/cspace/
mod.rs1mod euclidean;
4pub mod leader_follower;
5mod linear;
6
7pub use euclidean::*;
8pub use linear::*;
9
10use nalgebra::constraint::{SameNumberOfRows, ShapeConstraint};
13use nalgebra::storage::Storage;
14use nalgebra::{Const, Dim, SVector, Scalar, SimdRealField, Vector};
15
16use crate::params::FromParams;
17use crate::trajectories::{FullTraj, Trajectory};
18
19pub trait CSpace<X, const N: usize>: FromParams + Sized {
23 type Traj: Trajectory<X, N>;
24
25 fn volume(&self) -> X;
27
28 fn cost<R1, R2, S1, S2>(
33 &self,
34 start: &Vector<X, R1, S1>,
35 end: &Vector<X, R2, S2>,
36 ) -> X
37 where
38 X: SimdRealField,
39 R1: Dim,
40 R2: Dim,
41 S1: Storage<X, R1>,
42 S2: Storage<X, R2>,
43 ShapeConstraint: SameNumberOfRows<R1, R2>
44 + SameNumberOfRows<R1, Const<N>>
45 + SameNumberOfRows<R2, Const<N>>;
46
47 fn trajectory<S1, S2>(
51 &self,
52 start: Vector<X, Const<N>, S1>,
53 end: Vector<X, Const<N>, S2>,
54 ) -> Option<FullTraj<X, Self::Traj, S1, S2, N>>
55 where
56 X: Scalar,
57 S1: Storage<X, Const<N>>,
58 S2: Storage<X, Const<N>>;
59
60 fn is_free<S>(&self, state: &Vector<X, Const<N>, S>) -> bool
62 where
63 S: Storage<X, Const<N>>;
64
65 fn saturate(&self, a: &mut SVector<X, N>, b: &SVector<X, N>, delta: X);
68
69 fn sample(&mut self) -> SVector<X, N>;
71}