SPQR-Team1-2020/include/positionsys_zone.h

120 lines
3.8 KiB
C++

#pragma once
#include "systems.h"
//POSITION
#define CENTERGOALPOST_VEL1 220
#define CENTERGOALPOST_VEL2 220
#define CENTERGOALPOST_VEL3 220
#define CENTERGOALPOST_CAM_MIN -40
#define CENTERGOALPOST_CAM_MAX 40
#define CENTERGOALPOST_US_MAX 60
#define CENTERGOALPOST_US_CRITIC 25
#define GOCENTER_VEL 280
#define ZONE_MAX_VALUE 150
#define ZONE_LOOP_DECREASE_VALUE 4
#define ZONE_US_UNKNOWN_INCREASE_VALUE 4
#define ZONE_US_INDEX_INCREASE_VALUE 9
#define ZONE_CAM_INCREASE_VALUE 3
#define ZONE_CAM_CENTER_RANGE 25
#define ZONE_LINES_INCREASE_VALUE 100
#define ZONE_LINES_ERROR_VALUE 30
// You can modify this if you need
// LIMITI DEL CAMPO
#define Lx_min 115 // valore minimo accettabile di larghezza
#define Lx_max 195 // valore massimo accettabile di larghezza (larghezza campo)
#define LyF_min 190 // valore minimo accettabile di lunghezza sulle fasce
#define LyF_max 270 // valore massimo accettabile di lunghezza sulle fasce (lunghezza campo)
#define LyP_min 139 // valore minimo accettabile di lunghezza tra le porte
#define LyP_max 250 // valore massimo accettabile di lunghezza tra le porte// con misura x OK con us_dx o us_sx < DxF sto nelle fasce 30 + 30 - 1/2 robot
#define DyF 91 // con misura y OK e robot al CENTER (tra le porte) con us_fx o us_px < DyP sto a NORTH o a SOUTH era - 22
#define DyP 69
#define DxF_Atk 48 // per attaccante, fascia centrale allargata
#define DxF_Def 48 // per portiere, fascia centrale ristretta quEASTa roba viene fatta dentro WhereAmI
#define robot 21 // diametro del robot
// ZONE DEL CAMPO
// codici utilizzabili per una matice 3x3
#define EAST 2
#define WEST 0
#define CENTER 1
#define NORTH 0
#define SOUTH 2
#define NORTH_WEST 1
#define NORTH_CENTER 2
#define NORTH_EAST 3
#define CENTER_WEST 4
#define CENTER_CENTER 5 // codici zona nuovi
#define CENTER_EAST 6
#define SOUTH_WEST 7
#define SOUTH_CENTER 8
#define SOUTH_EAST 9
class PositionSysZone : public PositionSystem{
public:
PositionSysZone();
void update() override;
void test() override;
//returns the zone calculated
int getValue();
private:
int zone[3][3];
int zoneIndex;
int p;
int camA;
int camD;
unsigned long ao;
int old_status_x; // posizione precedente nel campo vale EST, OVEST o CENTRO o 255 >USI FUTURI<
int old_status_y; // posizione precedente nel campo vale SUD, NORD o CENTRO o 255 >USI FUTURI<
bool good_field_x; // vedo tutta la larghezza del campo si/no
bool good_field_y; // vedo tutta la lunghezza del campo si/no
int status_x; // posizione nel campo vale EST, OVEST o CENTRO o 255
int status_y; // posizione nel campo vale SUD, NORD o CENTRO o 255
int guessed_x, guessed_y;
bool calcPhyZoneCam;
int DxF; // con misura y OK e robot a EST o A OVEST con us_fx o us_px < DyF sto a NORD o a SUD era - 10
bool goal_zone;
//calculations
void increaseIndex(int, int, int);
void increaseCol(int, int);
void increaseRow(int, int);
void increaseAll(int);
void decreaseIndex(int, int, int);
void decreaseCol(int, int);
void decreaseRow(int, int);
void decreaseAll(int);
void increaseRowWithLimit(int, int);
void increaseColWithLimit(int, int);
void decreaseRowWithLimit(int, int);
void decreaseColWithLimit(int, int);
//reading
void readPhyZone();
void phyZoneDirection();
void phyZoneCam();
void phyZoneUS();
void phyZoneLines();
//testing
void testPhyZone();
void testLogicZone();
//movement
void goCenter();
void goGoalPost();
void centerGoalPost();
void centerGoalPostCamera(bool);
void AAANGOLO();
int diff(int, int);
};