From: Jiri Vlasak Date: Tue, 7 Jul 2020 11:33:11 +0000 (+0200) Subject: Add forward can park computation X-Git-Tag: v0.4.0~4^2~10 X-Git-Url: https://rtime.felk.cvut.cz/gitweb/hubacji1/psp.git/commitdiff_plain/0ad3036c2e27640310478a64134aa640551a45d3 Add forward can park computation --- diff --git a/src/psp.cc b/src/psp.cc index 3776cf7..cff29ff 100644 --- a/src/psp.cc +++ b/src/psp.cc @@ -461,7 +461,68 @@ void PSPlanner::fe_parallel() ccrx, ccry, this->cc().rfx(), this->cc().rfy() ); - // TODO check if I can park + { + auto clif = ::intersect( + ccrx, ccry, ccr_lf, + this->ps().x1(), this->ps().y1(), + this->ps().x4(), this->ps().y4() + ); + double af = std::abs( + this->ps().heading() + - this->cc().h() + ); + double xf = this->ps().x4(); + double yf = this->ps().y4(); + if (std::get<0>(clif)) { + xf = std::get<1>(clif); + yf = std::get<2>(clif); + if ( + edist( + this->ps().x4(), + this->ps().y4(), + std::get<3>(clif), + std::get<4>(clif) + ) < edist( + this->ps().x4(), + this->ps().y4(), + xf, yf + ) + ) { + xf = std::get<3>(clif); + yf = std::get<4>(clif); + } + af = ::angle_between_three_points( + this->cc().lfx(), + this->cc().lfy(), + ccrx, ccry, + xf, yf + ); + } + auto tmp_cc = BicycleCar(this->cc()); + this->cc().rotate(ccrx, ccry, -af); + if ( + !this->collide() + && ( + edist( + this->ps().x1(), + this->ps().y1(), + xf, yf + ) < edist( + this->ps().x1(), + this->ps().y1(), + this->ps().x4(), + this->ps().y4() + ) + || !std::get<0>(clif) + ) + ) { + this->cc().sp(this->cc().sp() * -1); + this->gc() = BicycleCar(this->cc()); + goto successfinish; + } else { + this->cc() = BicycleCar(tmp_cc); + } + } // TODO (ccr, rf) x (p3, p4) // TODO (ccr, rf) x (p2, p3) // TODO (ccr, lf) x (p3, p4)