Two types of motion planners have been implemented in Move3D, using two different strategies.
The function void p3d_learn(in NMAX) builts a roadmap for the current robot in the current environnement, using the current planning strategy, but without trying to connect the current and goal configurations of the robot. The function int p3d_specific _learn(double *qs, double *qg) builts the same type of graph until the configurations qs and qg are in the same connected component.
Of course, those two motion planners need a termination criterion, to decide if a roadmap is sufficient or if the two configurations can not be connected. This criterion depends on the planning strategy chosen.
Th first strategy, that will be called basic strategy, is the one described in [Svestka 97]. Each free configuration generated is added to the graph and linked to one or several connected componants. The function int p3d_add_basic_node(p3d_graph *G, p3d_rob *rob, int inode, int SHOOT, double *qn, double *dq) adds a node to the graph G of the robot rob (shot in the whol configuration space or in the box centered in qn and of amplitude dq, depending on the value of SHOOT) according to this motion strategy. In this case, the termination criterion is the maximum number of nodes allowed for the graph NMAX.
The second strategy, that will be called visibility based strategy, is the one described in [Nissoux 99]. A free configuration is added to the graph only if it does not ``see'' any connected component of the graph (if it is not linked to any node of any connected component), it will then become a warden node, or if it sees at least two connected component, it will then become a connection node. The function int p3d_add_isolate_or_linking_node(p3d_graph *G, p3d_rob *rob, int inode, int *fail, int SHOOT, double *qn, double *dq) adds a node to the graph G of the robot rob according to this motion strategy. In this case, the termination criterion is the maximum number of configuration generated that did not become a warden node allowed. This number of failure to find a new warden node reflects the covering of the graph (cf [Nissoux 99]).