29 for (
unsigned int i=0;
i<
nodes_.size();
i++){
52 distance = mobility->
distance(node->position(), pos);
55 for (
unsigned int i=1;
i<
nodes_.size();
i++) {
72 for (
unsigned int i=0;
i<
nodes_.size();
i++){
73 if (
nodes_[
i] == node)
return (
int)
i;
80 for (
unsigned int i=0;
i<
nodes_.size();
i++) {
84 std::vector<RoadmapNodePtr>
path;
85 startNode->visited(
true);
86 path.push_back(startNode);
87 while (path.size() > 0) {
90 if (node == goalNode) {
94 for (
unsigned int i=0;
i<node->nChildren();
i++) {
95 if (!node->child(
i)->visited()) {
96 child = node->child(
i);
103 child->visited(
true);
104 path.push_back(child);
115 if (mobility->
isReachable(from->position(), to->position())){
120 if (mobility->
isReachable(to->position(), from->position())){
128 return from->removeChild(to) && to->removeParent(from);
virtual double distance(const Configuration &from, const Configuration &to) const =0
std::vector< RoadmapNodePtr > DFS(RoadmapNodePtr startNode, RoadmapNodePtr goalNode)
深さ優先探索
void addEdge(RoadmapNodePtr from, RoadmapNodePtr to)
有向エッジを追加する
int indexOfNode(RoadmapNodePtr node)
指定されたノードのインデックスを取得する
RoadmapNodePtr node(unsigned int index)
ノードを取得する
Mobility * getMobility()
移動能力を取得する
boost::shared_ptr< RoadmapNode > RoadmapNodePtr
void findNearestNode(const Configuration &cfg, RoadmapNodePtr &node, double &distance)
最も距離の小さいノードを返す
bool isReachable(Configuration &from, Configuration &to, bool checkCollision=true) const
fromからtoへ干渉なしに移動可能であるかどうか
void tryConnection(RoadmapNodePtr from, RoadmapNodePtr to, bool tryReversed=true)
2つのノードの接続を試み、接続できた場合はエッジを追加する
bool removeEdge(RoadmapNodePtr from, RoadmapNodePtr to)
有向エッジを削除する
std::vector< RoadmapNodePtr > nodes_
ノードのリスト
virtual bool isReversible() const =0
この移動アルゴリズムでA→Bへ移動可能である時に、B→Aが同じ経路で移動可能であるかどうか ...
void integrate(RoadmapPtr rdmp)
このロードマップの内容を引数のロードマップに統合する
RoadmapNodePtr lastAddedNode()
最後に追加されたノードを取得する
boost::shared_ptr< Roadmap > RoadmapPtr