10 template <
class RoadmapArgs>
13 typedef boost::graph_traits<typename RoadmapArgs::Graph> GraphTypes;
14 typedef typename GraphTypes::vertex_descriptor Vertex;
15 typedef typename GraphTypes::edge_descriptor Edge;
33 throw std::runtime_error(
"RoadmapAAGrid only supports rel vector state spaces!");
34 _dim = this->space->getDimension();
38 this->
template declareParam<double>(
"res",
this,
39 &RoadmapAAGrid::setRes,
40 &RoadmapAAGrid::getRes);
43 void setRes(
double res)
47 if (this->initialized)
48 throw std::runtime_error(
"cannot set res, already initialized!");
60 throw std::runtime_error(
"cannot initialize, res not set!");
61 this->initialized =
true;
66 throw std::runtime_error(
"RoadmapAAGrid deserialize from ser_data not supported!");
79 if (this->max_batches < this->num_batches_generated + 1)
80 throw std::runtime_error(
"this roadmap gen doesnt support that many batches!");
83 std::vector<double> dim_offsets;
84 std::vector<std::size_t> dim_numverts;
85 std::size_t total_numverts = 1;
86 for (std::size_t idim=0; idim<_dim; idim++)
88 double dim_len = _bounds.
high[idim] - _bounds.
low[idim];
89 std::size_t numverts = floor(0.5 + dim_len/_res);
90 double offset = 0.5*(dim_len - (numverts-1)*_res);
91 total_numverts *= numverts;
92 dim_numverts.push_back(numverts);
93 dim_offsets.push_back(offset);
94 printf(
"dim:%lu numerts:%lu offset:%f\n",
95 idim, numverts, offset);
98 std::vector<Vertex> vertices(total_numverts);
99 for (std::size_t ivert=0; ivert<total_numverts; ivert++)
101 Vertex v_new = add_vertex(this->g);
102 vertices[ivert] = v_new;
104 put(this->vertex_batch_map, v_new, 0);
105 put(this->is_shadow_map, v_new,
false);
108 put(this->state_map, v_new, this->space->allocState());
111 this->nn->add(v_new);
113 std::size_t ivert_used = ivert;
114 std::size_t dim_stride = 1;
115 for (std::size_t idim=_dim-1; ; idim--)
119 std::size_t idimvert = ivert_used % dim_numverts[idim];
120 values[idim] = _bounds.
low[idim] + dim_offsets[idim] + _res*idimvert;
124 std::size_t ivert_dimprev = ivert - dim_stride;
125 Edge e = add_edge(vertices[ivert_dimprev], v_new, this->g).first;
126 put(this->distance_map, e, _res);
127 put(this->edge_batch_map, e, 0);
130 if (idim == 0)
break;
131 ivert_used /= dim_numverts[idim];
132 dim_stride *= dim_numverts[idim];
135 this->num_batches_generated++;
140 throw std::runtime_error(
"RoadmapAAGrid serialize to ser_data not supported!");
std::vector< double > low
void deserialize(const std::string &ser_data)
Re-constitute the internal generator state from serialized data.
Definition: RoadmapAAGrid.h:64
Interface for generating roadmaps over OMPL state spaces into Boost Graph objects.
Definition: Roadmap.h:76
void generate()
Generates one additional batch.
Definition: RoadmapAAGrid.h:77
void serialize(std::string &ser_data)
Serialize the internal generator state into the passed string.
Definition: RoadmapAAGrid.h:138
std::vector< double > high
Definition: RoadmapAAGrid.h:11
double root_radius(std::size_t i_batch)
Calcuate the root radius to be used for connecting to potential root vertices.
Definition: RoadmapAAGrid.h:70
void initialize()
Initialize roadmap; must be called once after setting parameters.
Definition: RoadmapAAGrid.h:57