bool
RRTNode::would_be_cusp_if_parent(RRTNode const& p) const
{
- if (p.sp() == 0) {
- assert(this->sp() != 0);
+ if (std::abs(p.sp()) < 1e-3) {
+ // It should not be possible to have two zero speed nodes next
+ // to each other. In practice, this sometimes happens.
+ //assert(std::abs(this->sp()) > 1e-3);
if (p.p()) {
if (sgn(p.p()->sp()) != sgn(this->sp())) {
return true;
return true; // only root has no parent and it is cusp
}
} else {
- if (this->sp() == 0) {
+ if (std::abs(this->sp()) < 1e-3) {
return false; // this is cusp, not the parent
} else if (sgn(p.sp()) != sgn(this->sp())) {
return true;
RRTNode* f = this->_nn;
RRTNode* t = &this->_steered.front();
// Require the steer method to return first node equal to nn:
- assert(std::abs(t->x() - f->x()) < 1e-3);
- assert(std::abs(t->y() - f->x()) < 1e-3);
- assert(std::abs(t->h() - f->x()) < 1e-3);
+ assert(std::abs(t->x() - f->x()) < 1e-3
+ && std::abs(t->y() - f->y()) < 1e-3
+ && std::abs(t->h() - f->h()) < 1e-3);
this->_steered.erase(this->_steered.begin());
t = &this->_steered.front();
+ assert(!(std::abs(t->x() - f->x()) < 1e-3
+ && std::abs(t->y() - f->y()) < 1e-3
+ && std::abs(t->h() - f->h()) < 1e-3));
#if USE_RRTS
double cost = f->cc() + this->cost_build(*f, *t);
for (auto n: this->nv_) {