ReedsSheppPath reedsShepp(double q0[3], double q1[3]);
protected:
- void interpolate(double q0[3], ReedsSheppPath &path, double seg, double q[3]);
+ void interpolate(double q0[3], ReedsSheppPath &path, double seg, double q[4]);
/** \brief Turning radius */
double rho_;
double dist = rho_ * path.length(); // TODO shorten path here
for (double seg=0.0; seg<=dist; seg+=step_size){
- double qnew[3] = {};
+ double qnew[4] = {};
interpolate(q0, path, seg/rho_, qnew);
cb( qnew, user_data);
}
return;
}
-void ReedsSheppStateSpace::interpolate(double q0[3], ReedsSheppPath &path, double seg, double s[3])
+void ReedsSheppStateSpace::interpolate(double q0[3], ReedsSheppPath &path, double seg, double s[4])
{
if (seg < 0.0) seg = 0.0;
if (seg > path.length()) seg = path.length();
- double phi, v;
+ double phi, v = 0;
s[0] = s[1] = 0.0;
s[2] = q0[2];
+ s[3] = 0;
for (unsigned int i=0; i<5 && seg>0; ++i)
{
s[0] = s[0] * rho_ + q0[0];
s[1] = s[1] * rho_ + q0[1];
+ s[3] = v;
}
return nodes;
}
-int cb_st3(double q[3], void *user_data)
+int cb_st3(double q[4], void *user_data)
{
std::vector<RRTNode *> *nodes = (std::vector<RRTNode *> *) user_data;
nodes->push_back(new RRTNode(q[0], q[1], q[2]));
+ nodes->back()->s(q[3]);
return 0;
}