1 /*! \brief RRT* structure and default procedures.
10 #include <json/json.h>
18 /*! Compute elapsed time class. */
21 std::chrono::high_resolution_clock::time_point tstart_;
27 /*! Store RRT node. */
28 class RRTNode : public virtual Pose, public virtual CarMove {
32 RRTNode* p_ = nullptr;
34 /*! Get cost to parent. */
37 /*! Set cost to parent. */
40 /*! Get cumulative cost from root. */
43 /*! Get parent node. */
46 /*! Set parent node. */
49 bool operator==(RRTNode const& n);
52 class RRTGoal : public virtual RRTNode, public virtual PoseRange {
54 using PoseRange::PoseRange;
57 /*! RRT* algorithm basic class. */
62 unsigned int icnt_ = 0;
64 std::default_random_engine gen_;
65 std::vector<RRTNode> nodes_;
66 std::vector<RRTNode> steered_;
67 std::vector<RRTNode*> path_;
68 RRTNode* nn_ = nullptr;
69 std::vector<RRTNode*> nv_;
73 double last_goal_cc_ = 0.0;
74 std::vector<RRTNode> last_path_;
75 void recompute_cc(RRTNode* g);
76 void recompute_path_cc();
77 double min_gamma_eta() const;
78 bool should_continue() const;
79 void join_steered(RRTNode* f);
83 bool goal_drivable_from(RRTNode const& f);
84 virtual void store(RRTNode n);
85 virtual double cost_build(RRTNode const& f, RRTNode const& t) const;
86 virtual double cost_search(RRTNode const& f, RRTNode const& t) const;
87 virtual void find_nn(RRTNode const& t);
88 virtual void find_nv(RRTNode const& t);
89 virtual void compute_path();
90 virtual void steer(RRTNode const& f, RRTNode const& t) = 0;
91 virtual bool collide_steered() = 0;
92 virtual RRTNode sample() = 0;
93 virtual bool should_finish() const = 0;
97 /*! Get iterations counter. */
98 unsigned int icnt() const;
100 /*! Set iterations counter. */
101 void icnt(unsigned int i);
103 /*! Return elapsed time. */
106 /*! Generate JSON output. */
107 Json::Value json() const;
109 /*! Load JSON input. */
110 void json(Json::Value jvi);
112 /*! Run next RRT* iteration. */
115 /*! Reset the algorithm. */
116 virtual void reset();
120 #endif /* RRTS_RRTS_H */