From 91ddfc88263f00b0edaa7d3991da38db6175b1a6 Mon Sep 17 00:00:00 2001 From: Guillaume Buret Date: Sat, 19 Mar 2016 18:18:42 +0100 Subject: [PATCH] =?UTF-8?q?Prise=20en=20compte=20de=20la=20benne=20(cr?= =?UTF-8?q?=C3=A9ation=20d'une=20nouvelle=20classe)=20afin=20de=20d=C3=A9t?= =?UTF-8?q?erminer=20la=20priorit=C3=A9=20de=20l'=C3=A9tape=20Zone=20de=20?= =?UTF-8?q?construction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../paprikaSimulateur/paprikaSimulateur.pro | 5 ++- stm32/include/strategie/benne.h | 21 ++++++++++++ stm32/include/strategie/zoneConstruction.h | 4 +-- stm32/src/strategie/benne.cpp | 22 +++++++++++++ stm32/src/strategie/krabi2016.cpp | 25 ++++++++++++--- stm32/src/strategie/zoneConstruction.cpp | 32 +++++++++++++++++-- 6 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 stm32/include/strategie/benne.h create mode 100644 stm32/src/strategie/benne.cpp diff --git a/simulation/qtcreator-files/paprikaSimulateur/paprikaSimulateur.pro b/simulation/qtcreator-files/paprikaSimulateur/paprikaSimulateur.pro index 83c124a0..a8569a6e 100644 --- a/simulation/qtcreator-files/paprikaSimulateur/paprikaSimulateur.pro +++ b/simulation/qtcreator-files/paprikaSimulateur/paprikaSimulateur.pro @@ -105,8 +105,10 @@ HEADERS += \ ../../include/vector.h \ ../../include/strategie/krabijunior2016.h \ ../../include/strategie/krabi2016.h \ + ../../include/strategie/benne.h \ ../../include/actionneurs/fishingNet.h \ - ../../include/actionneurs/parasol.h + ../../include/actionneurs/parasol.h \ + ../../include/strategie/benne.h SOURCES += \ @@ -185,6 +187,7 @@ SOURCES += \ ../../src/strategie/krabijunior2016.cpp \ ../../src/strategie/krabi2016.cpp \ ../../src/strategie/cabine.cpp \ + ../../src/strategie/benne.cpp \ ../../src/strategie/zoneConstruction.cpp \ ../../src/actionneurs/fishingNet.cpp \ ../../src/actionneurs/parasol.cpp diff --git a/stm32/include/strategie/benne.h b/stm32/include/strategie/benne.h new file mode 100644 index 00000000..944b5e07 --- /dev/null +++ b/stm32/include/strategie/benne.h @@ -0,0 +1,21 @@ +#ifndef BENNE_H +#define BENNE_H + +class Benne +{ +public: + Benne(); + + ~Benne(); + + void setIsBenneEmpty(); + void setIsBenneFull(); + + bool getIsBenneEmpty(); + bool getIsBenneFull(); + +protected: + bool isBenneEmpty; +}; + +#endif // BENNE_H diff --git a/stm32/include/strategie/zoneConstruction.h b/stm32/include/strategie/zoneConstruction.h index 53ebc843..981651d8 100644 --- a/stm32/include/strategie/zoneConstruction.h +++ b/stm32/include/strategie/zoneConstruction.h @@ -10,7 +10,7 @@ class ZoneConstruction : public MediumLevelAction public: ZoneConstruction(); - ZoneConstruction(Position position); + ZoneConstruction(Position goalPosition); ~ZoneConstruction(); @@ -19,7 +19,7 @@ public: Etape::EtapeType getType(); protected: - Position position; + Position goalPosition; }; #endif // ZONECONSTRUCTION_H diff --git a/stm32/src/strategie/benne.cpp b/stm32/src/strategie/benne.cpp new file mode 100644 index 00000000..eafba948 --- /dev/null +++ b/stm32/src/strategie/benne.cpp @@ -0,0 +1,22 @@ +#include "benne.h" + +Benne::Benne() +{ + isBenneEmpty = true; +} + +void Benne::setIsBenneEmpty() { + isBenneEmpty = true; +} + +void Benne::setIsBenneFull() { + isBenneEmpty = false; +} + +bool Benne::getIsBenneEmpty() { + return isBenneEmpty; +} + +bool Benne::getIsBenneFull() { + return !isBenneEmpty; +} diff --git a/stm32/src/strategie/krabi2016.cpp b/stm32/src/strategie/krabi2016.cpp index 03e7680d..97e771d5 100644 --- a/stm32/src/strategie/krabi2016.cpp +++ b/stm32/src/strategie/krabi2016.cpp @@ -1,11 +1,14 @@ #include "krabi2016.h" #include "ascenseur.h" #include "pinces.h" +#include "benne.h" #ifndef ROBOTHW #include #endif +Benne *benne = new Benne(); + Krabi2016::Krabi2016(bool isYellow) : StrategieV3(isYellow) { //Initialisation des tableaux d'étapes @@ -19,18 +22,19 @@ Krabi2016::Krabi2016(bool isYellow) : StrategieV3(isYellow) int start = Etape::makeEtape(Position(250, 1000, true), Etape::DEPART); // départ au fond de la zone de départ + /** Points de passage **/ - int wa = Etape::makeEtape(Position(700, 1000, true)); + int wa = Etape::makeEtape(Position(600, 1000, true)); int wb = Etape::makeEtape(Position(880, 1140, true)); int wc = Etape::makeEtape(Position(1120, 1203, true)); /** Actions **/ // Zone de construction - int zc1 = Etape::makeEtape(new ZoneConstruction(Position(750, 750, true))); + int zc1 = Etape::makeEtape(new ZoneConstruction(Position(650, 450, true))); // Pieds - int pa = Etape::makeEtape(new RamasserPied(Position(870, 1355, true))); + int pa = Etape::makeEtape(new RamasserPied(Position(870, 1755, true))); int pb = Etape::makeEtape(new RamasserPied(Position(1100, 1770, true))); // Etc. @@ -74,8 +78,19 @@ int Krabi2016::getScoreEtape(int i) case Etape::POINT_PASSAGE : return 0; case Etape::ZONE_CONSTRUCTION : - // Rajouter la verification de la benne, sinon vide aucun interet d'aller dans la zone de construction - return 100; + if (benne->getIsBenneEmpty()) { + return 0; + } + else { + return 100; + } + + case Etape::RAMASSER_PIED : { + + benne->setIsBenneFull(); + return 10; + + } default : return 10; /* DEBUG (0 sinon) */ diff --git a/stm32/src/strategie/zoneConstruction.cpp b/stm32/src/strategie/zoneConstruction.cpp index 9c0889d4..dcda8083 100644 --- a/stm32/src/strategie/zoneConstruction.cpp +++ b/stm32/src/strategie/zoneConstruction.cpp @@ -10,7 +10,7 @@ ZoneConstruction::ZoneConstruction(){} -ZoneConstruction::ZoneConstruction(Position position):MediumLevelAction(position) +ZoneConstruction::ZoneConstruction(Position goalPosition):MediumLevelAction(goalPosition) { } @@ -25,13 +25,39 @@ Etape::EtapeType ZoneConstruction::getType() int ZoneConstruction::update() { - if (status == 0) //Début + if (status == 0) { #ifndef ROBOTHW - qDebug() << "Zone de construction"; + qDebug() << "Zone Construction"; #endif + StrategieV2::setCurrentGoal(this->getGoalPosition(), false, VITESSE_LINEAIRE_MAX, -100.0, 200.f); + status++; } + + else if (status == 1) + { + StrategieV2::setCurrentGoal(this->getGoalPosition(), false, VITESSE_LINEAIRE_MAX, -100.0, 200.f); + status++; + } + + else if (status == 2) { + if (Command::isNear(this->getGoalPosition(), 100.0f)) // le second paramètre est la distance a l'objectif + { + StrategieV2::stop(); + StrategieV2::lookAt(this->getGoalPosition()); + status++; + } + + } + + else if (status == 3) { +#ifndef ROBOTHW + qDebug() << "Etape zone de construction finie"; +#endif + status = -1; + } + return status; } -- GitLab