hpp::manipulation::graph::WaypointEdge Class Reference

Edge with waypoint. More...

#include <hpp/manipulation/graph/edge.hh>

Inheritance diagram for hpp::manipulation::graph::WaypointEdge:
Collaboration diagram for hpp::manipulation::graph::WaypointEdge:

List of all members.

Public Member Functions

virtual bool build (core::PathPtr_t &path, ConfigurationIn_t q1, ConfigurationIn_t q2, const core::WeighedDistance &d) const
virtual bool applyConstraints (ConfigurationIn_t qoffset, ConfigurationOut_t q) const
template<class EdgeType >
boost::shared_ptr< EdgeType > waypoint () const
 Return the inner waypoint.
virtual std::ostream & dotPrint (std::ostream &os, dot::DrawingAttributes da=dot::DrawingAttributes()) const
 Print the object in a stream.
void createWaypoint (const unsigned int depth, const std::string &bname="WaypointEdge")
 Create inner waypoints.
NodePtr_t node () const
 Get the node in which path after the waypoint is.

Static Public Member Functions

static WaypointEdgePtr_t create (const GraphWkPtr_t &graph, const NodeWkPtr_t &from, const NodeWkPtr_t &to)
 Create a new WaypointEdge.

Protected Member Functions

void init (const EdgeWkPtr_t &weak, const GraphWkPtr_t &graph, const NodeWkPtr_t &from, const NodeWkPtr_t &to)
 Initialization of the object.
virtual std::ostream & print (std::ostream &os) const
 Print the object in a stream.

Detailed Description

Edge with waypoint.

Waypoints are handled recursively, i.e. class WaypointEdge contains only a Node and an Edge, the second Edge being itself. In this package, the Node in a WaypointEdge is semantically different from other Node because it does not correspond to a state with different manipulation rules. It has the same rules as another Node (either Edge::from() or Edge::to()).

Semantically, a waypoint Node is fully part of the WaypointEdge. When a corresponding path reaches it, no planning is required to know what to do next. To the contrary, when a path reaches Edge::from() or Edge::to(), there may be several possibilities.

Note:
Implementation details: let's say, between the two nodes $N_f$ and $N_t$, two waypoints are required: $ N_f \xrightarrow{e_0} n_0 \xrightarrow{e_1} n_1 \xrightarrow{E} N_t$. The outmost WaypointEdg contains:
  • from: $N_f$,
  • to: $N_t$,
  • constraints: those of edge $E$,
  • waypoint: $(E_1, n_1)$.
where $E_1$ is an instance of class WaypointEdge containing:
  • from: $N_f$,
  • to: $n_1$,
  • constraints: those of edge $e_1$,
  • waypoint: $(e_0, n_0)$.

Member Function Documentation

static WaypointEdgePtr_t hpp::manipulation::graph::WaypointEdge::create ( const GraphWkPtr_t &  graph,
const NodeWkPtr_t &  from,
const NodeWkPtr_t &  to 
) [static]

Create a new WaypointEdge.

Reimplemented from hpp::manipulation::graph::Edge.

void hpp::manipulation::graph::WaypointEdge::createWaypoint ( const unsigned int  depth,
const std::string &  bname = "WaypointEdge" 
)

Create inner waypoints.

Parameters:
depththe number of waypoints between from() and to() minus 1.
bnamebasename used for naming.
Note:
inner edges are named bname + "_e" + pos inner nodes are named bname + "_n" + pos
virtual std::ostream& hpp::manipulation::graph::WaypointEdge::dotPrint ( std::ostream &  os,
dot::DrawingAttributes  da = dot::DrawingAttributes() 
) const [virtual]

Print the object in a stream.

Reimplemented from hpp::manipulation::graph::Edge.

void hpp::manipulation::graph::WaypointEdge::init ( const EdgeWkPtr_t &  weak,
const GraphWkPtr_t &  graph,
const NodeWkPtr_t &  from,
const NodeWkPtr_t &  to 
) [protected]

Initialization of the object.

Reimplemented from hpp::manipulation::graph::Edge.

Get the node in which path after the waypoint is.

Reimplemented from hpp::manipulation::graph::Edge.

virtual std::ostream& hpp::manipulation::graph::WaypointEdge::print ( std::ostream &  os) const [protected, virtual]

Print the object in a stream.

Reimplemented from hpp::manipulation::graph::Edge.

template<class EdgeType >
boost::shared_ptr<EdgeType> hpp::manipulation::graph::WaypointEdge::waypoint ( ) const

Return the inner waypoint.

Parameters:
EdgeTypeis either Edge or WaypointEdge
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends