return jvo;
}
+void RRTS::json(Json::Value jvi)
+{
+ assert(jvi["init"] == Json::nullValue);
+ assert(jvi["goal"] == Json::nullValue);
+ assert(jvi["goals"] == Json::nullValue);
+ assert(jvi["obst"] == Json::nullValue);
+
+ this->nodes().front().x(jvi["init"][0].asDouble());
+ this->nodes().front().y(jvi["init"][1].asDouble());
+ this->nodes().front().h(jvi["init"][2].asDouble());
+ {
+ RRTNode tmp_node;
+ tmp_node.x(jvi["goal"][0].asDouble());
+ tmp_node.y(jvi["goal"][1].asDouble());
+ tmp_node.h(jvi["goal"][2].asDouble());
+ this->goals().push_back(tmp_node);
+ for (auto g: jvi["goals"]) {
+ tmp_node.x(g[0].asDouble());
+ tmp_node.y(g[1].asDouble());
+ tmp_node.h(g[2].asDouble());
+ this->goals().push_back(tmp_node);
+ }
+ }
+ {
+ Obstacle tmp_obstacle;
+ for (auto o: jvi["obst"]) {
+ tmp_obstacle.poly().clear();
+ for (auto c: o) {
+ double tmp_x = c[0].asDouble();
+ double tmp_y = c[1].asDouble();
+ auto tmp_tuple = std::make_tuple(tmp_x, tmp_y);
+ tmp_obstacle.poly().push_back(tmp_tuple);
+ }
+ this->obstacles().push_back(tmp_obstacle);
+ }
+ }
+ {
+ double edist_init_goal = sqrt(
+ pow(
+ this->nodes().front().x()
+ - this->goals().front().x(),
+ 2
+ )
+ + pow(
+ this->nodes().front().y()
+ - this->goals().front().y(),
+ 2
+ )
+ );
+ this->set_sample(
+ this->nodes().front().x(), edist_init_goal,
+ this->nodes().front().y(), edist_init_goal,
+ 0, 2 * M_PI
+ );
+ }
+}
+
RRTS::RRTS()
: gen_(std::random_device{}())
{