A motion planner searches for a path in a planning space. The type of the

- planning space is generally user defined and depends on the robot and the

- planning problem. This library does not distinguish between configuration

- space and state space planning. A member of a planning space is called a {b

+ planning space is user defined and depends on the robot and the planning

+ problem. This library does not distinguish between configuration space and

+ state space planning. A member of a planning space is called a {b

configuration} regardless of the nature of the planning.

Planning spaces may support a number of operations discussed in modules such

type 'a t = 'a -> 'a -> float -> 'a

(** Interpolation function for a planning space.

- An interpolation function [interpolate] returns a configuration [x =

- interpolate s a b] on the path connecting [a] to [b]. The interpolation

- parameter [s] must be in the range [\[0, 1\]].

+ An interpolation function [interpolate] called as [x = interpolate s a b]

+ returns a configuration [x] on the movement connecting [a] to [b]. The

+ interpolation parameter [s] must be in the range [\[0, 1\]].

type 'a intermediary_t = 'a -> 'a -> 'a BatEnum.t

+(** Splitting of a movement into intermediary configurations.

+ A function [intermediary] called as [intermediary a b] returns a stream of

+ configurations on the movement from [a] to [b]. Algorithms that use such

+ functions generally expect [intermediary a b] not to include [a] and [b] in

'a t -> 'a PaplMetric.threshold_t -> 'a intermediary_t

-(** If [i~~t~~ = intermediary_steps ip (metric, eps)] then [i~~t~~ a b] are the

+(** If [im = intermediary_steps ip (metric, eps)] then [im a b] are the

intermediary steps of length [eps] connecting [a] to [b].

[a] and [b] are not explicitly included in the stream (but they can be if

(** Planning space for floats.

- Configurations are floats.

Floats are interpolated linearly.

val interpolate : float t

- val flip_interpolate : float -> float -> float -> float

(** {2 Int planning space} *)

+(** Planning space for integers.

+ The integers are interpolated linearly as if they were floats and then

+ rounded to the nearest integer.

(** {2 Tuple planning spaces} *)

-(** Planning space for tuples.

+(** Planning spaces for tuples.

- Tuples can contain values of seperate types. Each coordinate is interpolated

- using a seperate interpolation function.

+ Tuples coordinates can have separate types. Each coordinate is interpolated

+ with its own interpolation function.

Each coordinate is interpolated independently.

- The lists must be of the same length when interpolated.

+ Lists that are interpolated must have the same length; otherwise

+ [Invalid_argument] is raised.

val interpolate : 'a t -> 'a list t

Each coordinate is interpolated independently.

- Arrays being interpolated must be of the same length.

+ Arrays that are interpolated must have the same length; otherwise

+ [Invalid_argument] is raised.

val interpolate : 'a t -> 'a array t