X-Git-Url: https://rtime.felk.cvut.cz/gitweb/hubacji1/psp.git/blobdiff_plain/d93e816e58b6f7fc1cdaf677ed085dcb6ba19096..47251fa186ec2b823baa806ee02272fd03c3f4cb:/src/psp.cc diff --git a/src/psp.cc b/src/psp.cc index 987a49b..df6b58e 100644 --- a/src/psp.cc +++ b/src/psp.cc @@ -23,6 +23,8 @@ bool PSPlanner::forward() { if (this->ps().parallel()) return false; + else + return true; double heading = atan2( this->ps().y2() - this->ps().y1(), this->ps().x2() - this->ps().x1() @@ -101,27 +103,45 @@ void PSPlanner::guess_gc() y += (this->gc().w() / 2 + 0.01) * sin(h + dts); y += (this->gc().dr() + 0.01) * sin(h); } else { - // This is for backward parking only. + // Forward parking double entry_width = edist( this->ps().x1(), this->ps().y1(), this->ps().x4(), this->ps().y4() ); - double dist_l = - this->gc().orradi() - - (this->gc().mtr() + this->gc().w() / 2) - ; - double move1 = dist_l + this->gc().w() / 2; - double dist_r = entry_width - this->gc().w() - dist_l; - double move2 = sqrt( - pow(this->gc().iradi(), 2) - - pow(this->gc().iradi() - dist_r, 2) + x += entry_width / 2 * cos(h); + y += entry_width / 2 * sin(h); + h = atan2( + this->ps().y2() - this->ps().y1(), + this->ps().x2() - this->ps().x1() ); - move2 -= this->gc().dr() / 2; // workaround - x += move1 * cos(h); - y += move1 * sin(h); - x += move2 * cos(h + dts); - y += move2 * sin(h + dts); - h += dts + M_PI; + while (h < 0) h += 2 * M_PI; + + //// This is for backward parking only. + //double entry_width = edist( + // this->ps().x1(), this->ps().y1(), + // this->ps().x4(), this->ps().y4() + //); + //double dist_l = + // this->gc().orradi() + // - (this->gc().mtr() + this->gc().w() / 2) + //; + //double move1 = dist_l + this->gc().w() / 2; + //double dist_r = entry_width - this->gc().w() - dist_l; + //double move2 = sqrt( + // pow(this->gc().iradi(), 2) + // - pow(this->gc().iradi() - dist_r, 2) + //); + //move2 -= this->gc().dr() / 2; // workaround + //x += move1 * cos(h); + //y += move1 * sin(h); + //dts = atan2( + // this->ps().y2() - this->ps().y1(), + // this->ps().x2() - this->ps().x1() + //); + //while (dts < 0) dts += 2 * M_PI; + //x += move2 * cos(h + dts); + //y += move2 * sin(h + dts); + //h += dts - M_PI / 2; } while (h > M_PI) h -= 2 * M_PI; @@ -185,18 +205,41 @@ std::vector PSPlanner::possible_goals( ) { std::vector pi; - if (this->cc().sp() > 0) + if (this->ps().parallel()) this->cc().sp(1); else this->cc().sp(-1); this->cc().sp(this->cc().sp() * dist); - this->cc().st(this->cc().st() * 1); BicycleCar orig_cc(this->cc()); for (unsigned int i = 0; i < cnt; i++) { this->cc().next(); pi.push_back(BicycleCar(this->cc())); } this->cc() = BicycleCar(orig_cc); + if (this->ps().parallel()) { + this->cc().st(0); + for (unsigned int i = 0; i < cnt; i++) { + this->cc().next(); + pi.push_back(BicycleCar(this->cc())); + } + this->cc() = BicycleCar(orig_cc); + } else { + if (!this->ps().right()) { + this->cc().set_max_steer(); + for (unsigned int i = 0; i < cnt; i++) { + this->cc().next(); + pi.push_back(BicycleCar(this->cc())); + } + } else { + this->cc().set_max_steer(); + this->cc().st(this->cc().st() * -1); + for (unsigned int i = 0; i < cnt; i++) { + this->cc().next(); + pi.push_back(BicycleCar(this->cc())); + } + } + this->cc() = BicycleCar(orig_cc); + } return pi; } @@ -209,10 +252,10 @@ void PSPlanner::fe() } else { this->guess_gc(); this->cc() = BicycleCar(this->gc()); - this->cc().set_max_steer(); - if (this->ps().right()) - this->cc().st(this->cc().st() * -1); - this->cc().sp(1); + //this->cc().set_max_steer(); + //if (this->ps().right()) + // this->cc().st(this->cc().st() * -1); + this->cc().sp(-0.2); } }