]> rtime.felk.cvut.cz Git - hubacji1/psp.git/blobdiff - src/psp.cc
Remove inefficient code
[hubacji1/psp.git] / src / psp.cc
index df6b58ea4468af08217f11082763db1297e134bc..31d4a741dd17b23f877ca52a33874e164d1dbc86 100644 (file)
@@ -152,6 +152,46 @@ void PSPlanner::guess_gc()
         this->gc().h(h);
 }
 
+std::vector<BicycleCar> PSPlanner::last_maneuver()
+{
+        std::vector<BicycleCar> lm;
+        if (this->ps().parallel()) {
+                // zig-zag out from the slot
+                this->cc() = BicycleCar(this->gc());
+                this->cc().sp(0.1);
+                while (!this->left()) {
+                        while (!this->collide() && !this->left()) {
+                                this->cc().next();
+                                lm.push_back(BicycleCar(this->cc()));
+                        }
+                        if (this->left() && !this->collide()) {
+                                break;
+                        } else {
+                                lm.pop_back();
+                                this->cc().sp(this->cc().sp() * -1);
+                                this->cc().next();
+                                this->cc().st(this->cc().st() * -1);
+                                this->c_++;
+                                lm.push_back(BicycleCar(this->cc()));
+                        }
+                }
+                if (this->cc().st() < 0) {
+                        this->c_++;
+                        lm.push_back(BicycleCar(this->cc()));
+                }
+        } else {
+                // go 1 m forward
+                this->cc().sp(0.1);
+                BicycleCar orig_cc(this->cc());
+                for (unsigned int i = 0; i < 10; i++) {
+                        this->cc().next();
+                        lm.push_back(BicycleCar(this->cc()));
+                }
+                this->cc() = BicycleCar(orig_cc);
+        }
+        return lm;
+}
+
 bool PSPlanner::left()
 {
        double lfx = this->cc().lfx();
@@ -306,16 +346,6 @@ void PSPlanner::fe_parallel()
         while (!q.empty() && iter_cntr < 30) {
                 this->cc() = BicycleCar(q.front());
                 q.pop();
-                while (
-                        !this->collide()
-                        && (std::abs(
-                                this->cc().h() - this->ps().heading()
-                        ) > M_PI / 32)
-                        && (std::abs(
-                                this->cc().h() - this->ps().heading()
-                        ) < M_PI / 2)
-                )
-                        this->cc().next();
                 this->cc().sp(this->cc().sp() * -1);
                 this->cc().next();
                 this->gc() = BicycleCar(this->cc());