reimproted the zone position system
parent
4a1ba46f5b
commit
6a0d660aab
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||||
// for the documentation about the extensions.json format
|
// for the documentation about the extensions.json format
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
"platformio.platformio-ide"
|
"platformio.platformio-ide"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,23 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include "data_source.h"
|
|
||||||
#include "vars.h"
|
|
||||||
#include <Arduino.h>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
class DataSourceController {
|
|
||||||
|
|
||||||
public:
|
|
||||||
DataSourceController();
|
|
||||||
DataSourceController(vector<DataSource*>);
|
|
||||||
|
|
||||||
public:
|
|
||||||
void update();
|
|
||||||
void test();
|
|
||||||
void postProcess();
|
|
||||||
void readSensor();
|
|
||||||
void getValue();
|
|
||||||
|
|
||||||
vector<DataSource*> ds;
|
|
||||||
|
|
||||||
};
|
|
|
@ -17,6 +17,7 @@ class DataSourceCtrl {
|
||||||
virtual void test();
|
virtual void test();
|
||||||
virtual void postProcess();
|
virtual void postProcess();
|
||||||
virtual void read();
|
virtual void read();
|
||||||
|
int getValue(int i);
|
||||||
|
|
||||||
vector<DataSource*> ds;
|
vector<DataSource*> ds;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
#include "vars.h"
|
|
||||||
#include "ds_ctrl.h"
|
|
||||||
#include "ds_ctrl_lines.h"
|
|
||||||
|
|
||||||
class DSCtrlPosition : public DataSourceController {
|
|
||||||
|
|
||||||
public:
|
|
||||||
DSCtrlPosition();
|
|
||||||
|
|
||||||
};
|
|
|
@ -2,11 +2,16 @@
|
||||||
|
|
||||||
#include "vars.h"
|
#include "vars.h"
|
||||||
#include "sensors.h"
|
#include "sensors.h"
|
||||||
|
#include "systems.h"
|
||||||
|
|
||||||
class Game {
|
class Game {
|
||||||
public:
|
public:
|
||||||
Game();
|
Game();
|
||||||
|
Game(LineSystem* ls, PositionSystem* ps);
|
||||||
void play(bool condition=true);
|
void play(bool condition=true);
|
||||||
private:
|
private:
|
||||||
virtual void realPlay() = 0;
|
virtual void realPlay() = 0;
|
||||||
|
virtual void init() = 0;
|
||||||
|
LineSystem* ls;
|
||||||
|
PositionSystem* ps;
|
||||||
};
|
};
|
|
@ -20,12 +20,17 @@ class Goalie : public Game{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Goalie();
|
Goalie();
|
||||||
|
Goalie(LineSystem* ls, PositionSystem* ps);
|
||||||
|
|
||||||
|
private:
|
||||||
void realPlay() override;
|
void realPlay() override;
|
||||||
|
void init() override;
|
||||||
void goalie();
|
void goalie();
|
||||||
void ballBack();
|
void ballBack();
|
||||||
void storcimentoPorta();
|
void storcimentoPorta();
|
||||||
|
|
||||||
int atk_speed, atk_direction;
|
int atk_speed, atk_direction;
|
||||||
float cstorc;
|
float cstorc;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,22 +2,35 @@
|
||||||
|
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
|
||||||
//KEEPER
|
#define KEEPER_ATTACK_DISTANCE 190
|
||||||
#define KEEPER_ATTACK_DISTANCE 200
|
|
||||||
#define KEEPER_ALONE_ATTACK_TIME 5000 //in millis
|
#define KEEPER_ALONE_ATTACK_TIME 5000 //in millis
|
||||||
#define KEEPER_COMRADE_ATTACK_TIME 3000//in millis
|
#define KEEPER_COMRADE_ATTACK_TIME 3000//in millis
|
||||||
#define KEEPER_BASE_VEL 320
|
#define KEEPER_BASE_VEL 320
|
||||||
#define KEEPER_VEL_MULT 1.4
|
#define KEEPER_VEL_MULT 1.4
|
||||||
#define KEEPER_BALL_BACK_ANGLE 30
|
#define KEEPER_BALL_BACK_ANGLE 30
|
||||||
|
#define KEEPER_ANGLE_SX 265
|
||||||
|
#define KEEPER_ANGLE_DX 85
|
||||||
|
|
||||||
|
//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
|
||||||
|
|
||||||
class Keeper : public Game{
|
class Keeper : public Game{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Keeper();
|
Keeper();
|
||||||
|
Keeper(LineSystem*, PositionSystem*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void realPlay() override;
|
void realPlay() override;
|
||||||
|
void init() override;
|
||||||
void keeper();
|
void keeper();
|
||||||
|
void centerGoalPostCamera(bool);
|
||||||
|
|
||||||
int defSpeed, defDir;
|
int defSpeed, defDir;
|
||||||
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include "ds_ctrl_lines.h"
|
|
||||||
#include "games.h"
|
|
||||||
#include "game.h"
|
|
||||||
|
|
||||||
class LineSystem : public DSCtrlLines{
|
|
||||||
public:
|
|
||||||
LineSystem(DSCtrlLines* method, Game* strategy);
|
|
||||||
virtual void update() = 0;
|
|
||||||
virtual void test() = 0;
|
|
||||||
};
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ds_ctrl.h"
|
#include "ds_ctrl.h"
|
||||||
#include "data_source.h"
|
#include "systems.h"
|
||||||
#include "vars.h"
|
#include "vars.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
@ -16,19 +17,17 @@
|
||||||
#define LINE_THRESH 90
|
#define LINE_THRESH 90
|
||||||
#define EXTIME 100
|
#define EXTIME 100
|
||||||
|
|
||||||
class DSCtrlLines : public DataSourceCtrl{
|
class LineSys2019 : public LineSystem{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DSCtrlLines();
|
LineSys2019();
|
||||||
DSCtrlLines(vector<DataSource*> in_, vector<DataSource*> out);
|
LineSys2019(vector<DataSource*> in_, vector<DataSource*> out);
|
||||||
|
|
||||||
void read() override;
|
void update() override;
|
||||||
void postProcess() override;
|
void test() override;
|
||||||
void outOfBounds();
|
void outOfBounds();
|
||||||
void handleIntern();
|
void handleIntern();
|
||||||
void handleExtern();
|
void handleExtern();
|
||||||
int getValue();
|
|
||||||
void test() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
vector<DataSource*> in, out;
|
vector<DataSource*> in, out;
|
|
@ -0,0 +1,120 @@
|
||||||
|
#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);
|
||||||
|
|
||||||
|
};
|
|
@ -12,11 +12,13 @@
|
||||||
#include "data_source_ball.h"
|
#include "data_source_ball.h"
|
||||||
#include "data_source_camera.h"
|
#include "data_source_camera.h"
|
||||||
#include "data_source_us.h"
|
#include "data_source_us.h"
|
||||||
#include "ds_ctrl_lines.h"
|
|
||||||
#include "motor.h"
|
#include "motor.h"
|
||||||
#include "ds_ctrl.h"
|
#include "ds_ctrl.h"
|
||||||
#include "drivecontroller.h"
|
#include "drivecontroller.h"
|
||||||
#include "data_source_bt.h"
|
#include "data_source_bt.h"
|
||||||
|
#include "systems.h"
|
||||||
|
#include "linesys_2019.h"
|
||||||
|
#include "positionsys_zone.h"
|
||||||
|
|
||||||
void initSensors();
|
void initSensors();
|
||||||
void updateSensors();
|
void updateSensors();
|
||||||
|
@ -26,7 +28,7 @@ s_extr vector<DataSource*> lOut;
|
||||||
s_extr vector<DataSource*> dUs;
|
s_extr vector<DataSource*> dUs;
|
||||||
|
|
||||||
s_extr DataSourceCtrl* usCtrl;
|
s_extr DataSourceCtrl* usCtrl;
|
||||||
s_extr DSCtrlLines* linesCtrl;
|
s_extr LineSys2019* linesCtrl;
|
||||||
|
|
||||||
s_extr DataSourceBNO055* compass;
|
s_extr DataSourceBNO055* compass;
|
||||||
s_extr DataSourceBall* ball;
|
s_extr DataSourceBall* ball;
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class LineSystem{
|
||||||
|
public:
|
||||||
|
virtual void update() = 0;
|
||||||
|
virtual void test() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PositionSystem{
|
||||||
|
public:
|
||||||
|
virtual void update() = 0;
|
||||||
|
virtual void test() = 0;
|
||||||
|
};
|
|
@ -23,6 +23,10 @@ void DataSourceCtrl::postProcess(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DataSourceCtrl::getValue(int i){
|
||||||
|
return this->ds[i]->getValue();
|
||||||
|
}
|
||||||
|
|
||||||
void DataSourceCtrl::test(){
|
void DataSourceCtrl::test(){
|
||||||
DEBUG.println("========================================");
|
DEBUG.println("========================================");
|
||||||
for(DataSource* d : ds){
|
for(DataSource* d : ds){
|
||||||
|
|
|
@ -1,7 +1,14 @@
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
|
||||||
Game::Game() {}
|
Game::Game() {}
|
||||||
|
Game::Game(LineSystem* ls_, PositionSystem* ps_) {
|
||||||
|
this->ls = ls_;
|
||||||
|
this->ps = ps_;
|
||||||
|
}
|
||||||
|
|
||||||
void Game::play(bool condition){
|
void Game::play(bool condition){
|
||||||
|
ps->update();
|
||||||
if(condition) realPlay();
|
if(condition) realPlay();
|
||||||
|
ls->update();
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,8 +1,10 @@
|
||||||
#define GAMES_CPP
|
#define GAMES_CPP
|
||||||
|
|
||||||
#include "games.h"
|
#include "games.h"
|
||||||
|
#include "linesys_2019.h"
|
||||||
|
#include "positionsys_zone.h"
|
||||||
|
|
||||||
void initGames(){
|
void initGames(){
|
||||||
goalie = new Goalie();
|
goalie = new Goalie(new LineSys2019(), new PositionSysZone());
|
||||||
keeper = new Keeper();
|
keeper = new Keeper(new LineSys2019(), new PositionSysZone());
|
||||||
}
|
}
|
|
@ -3,8 +3,17 @@
|
||||||
#include "vars.h"
|
#include "vars.h"
|
||||||
|
|
||||||
Goalie::Goalie() : Game() {
|
Goalie::Goalie() : Game() {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
Goalie::Goalie(LineSystem* ls_, PositionSystem* ps_) : Game(ls_, ps_) {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Goalie::init(){
|
||||||
atk_speed = 0;
|
atk_speed = 0;
|
||||||
atk_direction = 0;
|
atk_direction = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Goalie::realPlay(){
|
void Goalie::realPlay(){
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
Keeper::Keeper() : Game() {
|
Keeper::Keeper() : Game() {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
Keeper::Keeper(LineSystem* ls_, PositionSystem* ps_) : Game(ls_, ps_){}
|
||||||
|
|
||||||
|
void Keeper::init(){
|
||||||
defSpeed = 0;
|
defSpeed = 0;
|
||||||
defDir = 0;
|
defDir = 0;
|
||||||
angle = 0;
|
angle = 0;
|
||||||
|
@ -29,18 +35,37 @@ void Keeper::realPlay() {
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
angle = (90 + ball->angle) * M_PI / 180;
|
angle = (KEEPER_ANGLE_DX + ball->angle) * M_PI / 180;
|
||||||
angleX = abs(cos(angle));
|
angleX = abs(cos(angle));
|
||||||
|
|
||||||
if(ball->angle >= 0 && ball->angle <= 90 && camera->getValueDef(true) < 30) drive->prepareDrive(90, KEEPER_BASE_VEL*angleX*KEEPER_VEL_MULT);
|
if(ball->angle >= 0 && ball->angle <= KEEPER_ANGLE_DX && camera->getValueDef(true) < 30) drive->prepareDrive(KEEPER_ANGLE_DX, KEEPER_BASE_VEL*angleX*KEEPER_VEL_MULT);
|
||||||
else if(ball->angle >= 270 && ball->angle <= 360 && camera->getValueDef(true) > -30) drive->prepareDrive(270, KEEPER_BASE_VEL*angleX*KEEPER_VEL_MULT);
|
else if(ball->angle >= KEEPER_ANGLE_SX && ball->angle <= 360 && camera->getValueDef(true) > -30) drive->prepareDrive(KEEPER_ANGLE_SX, KEEPER_BASE_VEL*angleX*KEEPER_VEL_MULT);
|
||||||
else if(ball->angle < 270 && ball->angle > 90){
|
else if(ball->angle < KEEPER_ANGLE_SX && ball->angle > KEEPER_ANGLE_DX){
|
||||||
int ball_degrees2 = ball->angle > 180? ball->angle-360:ball->angle;
|
int ball_degrees2 = ball->angle > 180? ball->angle-360:ball->angle;
|
||||||
int dir = ball_degrees2 > 0 ? ball->angle + KEEPER_BALL_BACK_ANGLE : ball->angle - KEEPER_BALL_BACK_ANGLE;
|
int dir = ball_degrees2 > 0 ? ball->angle + KEEPER_BALL_BACK_ANGLE : ball->angle - KEEPER_BALL_BACK_ANGLE;
|
||||||
dir = dir < 0? dir + 360: dir;
|
dir = dir < 0? dir + 360: dir;
|
||||||
|
|
||||||
drive->prepareDrive(dir, KEEPER_BASE_VEL);
|
drive->prepareDrive(dir, KEEPER_BASE_VEL);
|
||||||
}
|
}
|
||||||
//centerGoalPostCamera(false);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Keeper::centerGoalPostCamera(bool checkBack){
|
||||||
|
if (camera->getValueDef(true) > CENTERGOALPOST_CAM_MAX) {
|
||||||
|
drive->prepareDrive(KEEPER_ANGLE_SX, CENTERGOALPOST_VEL1);
|
||||||
|
} else if (camera->getValueDef(true) < CENTERGOALPOST_CAM_MIN) {
|
||||||
|
drive->prepareDrive(KEEPER_ANGLE_DX, CENTERGOALPOST_VEL1);
|
||||||
|
}else if(camera->getValueDef(true) > CENTERGOALPOST_CAM_MIN && camera->getValueDef(true) < CENTERGOALPOST_CAM_MAX){
|
||||||
|
if(!ball->ballSeen) drive->prepareDrive(0, 0, 0);
|
||||||
|
if(checkBack){
|
||||||
|
if(usCtrl->getValue(2) > CENTERGOALPOST_US_MAX){
|
||||||
|
drive->prepareDrive(180, CENTERGOALPOST_VEL2);
|
||||||
|
} else{
|
||||||
|
if(usCtrl->getValue(2) < CENTERGOALPOST_US_CRITIC) drive->prepareDrive(0, CENTERGOALPOST_VEL3);
|
||||||
|
|
||||||
|
keeper_backToGoalPost = false;
|
||||||
|
keeper_tookTimer = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
#include "ds_ctrl_lines.h"
|
#include "linesys_2019.h"
|
||||||
#include "sensors.h"
|
#include "sensors.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
DSCtrlLines::DSCtrlLines() {}
|
LineSys2019::LineSys2019() {}
|
||||||
DSCtrlLines::DSCtrlLines(vector<DataSource*> in_, vector<DataSource*> out_){
|
LineSys2019::LineSys2019(vector<DataSource*> in_, vector<DataSource*> out_){
|
||||||
this->in = in_;
|
this->in = in_;
|
||||||
this->out = out_;
|
this->out = out_;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ DSCtrlLines::DSCtrlLines(vector<DataSource*> in_, vector<DataSource*> out_){
|
||||||
exitTimer = 0;
|
exitTimer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSCtrlLines::read(){
|
void LineSys2019::update(){
|
||||||
inV = 0;
|
inV = 0;
|
||||||
outV = 0;
|
outV = 0;
|
||||||
for(DataSource* d : in) d->readSensor();
|
for(DataSource* d : in) d->readSensor();
|
||||||
|
@ -47,9 +47,7 @@ void DSCtrlLines::read(){
|
||||||
}
|
}
|
||||||
|
|
||||||
inV = inV | outV;
|
inV = inV | outV;
|
||||||
}
|
|
||||||
|
|
||||||
void DSCtrlLines::postProcess(){
|
|
||||||
if ((inV > 0) || (outV > 0)) {
|
if ((inV > 0) || (outV > 0)) {
|
||||||
fboundsOX = true;
|
fboundsOX = true;
|
||||||
fboundsOY = true;
|
fboundsOY = true;
|
||||||
|
@ -63,12 +61,12 @@ void DSCtrlLines::postProcess(){
|
||||||
outOfBounds();
|
outOfBounds();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSCtrlLines::outOfBounds(){
|
void LineSys2019::outOfBounds(){
|
||||||
handleExtern();
|
handleExtern();
|
||||||
handleIntern();
|
handleIntern();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSCtrlLines::handleIntern(){
|
void LineSys2019::handleIntern(){
|
||||||
|
|
||||||
if(fboundsX == true) {
|
if(fboundsX == true) {
|
||||||
if(inV & 0x02) inVOldX = 2;
|
if(inV & 0x02) inVOldX = 2;
|
||||||
|
@ -162,14 +160,14 @@ void DSCtrlLines::handleIntern(){
|
||||||
else slow = false;
|
else slow = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSCtrlLines::handleExtern(){
|
void LineSys2019::handleExtern(){
|
||||||
if((outV & 0b00000001) == 1) drive->vyp = 1; // esclusione
|
if((outV & 0b00000001) == 1) drive->vyp = 1; // esclusione
|
||||||
if((outV & 0b00000100) == 4) drive->vyn = 1;
|
if((outV & 0b00000100) == 4) drive->vyn = 1;
|
||||||
if((outV & 0b00000010) == 2) drive->vxp = 1;
|
if((outV & 0b00000010) == 2) drive->vxp = 1;
|
||||||
if((outV & 0b00001000) == 8) drive->vxn = 1;
|
if((outV & 0b00001000) == 8) drive->vxn = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSCtrlLines::test(){
|
void LineSys2019::test(){
|
||||||
update();
|
update();
|
||||||
DEBUG.print("In: ");
|
DEBUG.print("In: ");
|
||||||
for(DataSource* d : in){
|
for(DataSource* d : in){
|
|
@ -0,0 +1,428 @@
|
||||||
|
#include "positionsys_zone.h"
|
||||||
|
#include "vars.h"
|
||||||
|
#include "sensors.h"
|
||||||
|
|
||||||
|
PositionSysZone::PositionSysZone(){
|
||||||
|
for(int i = 0; i < 3; i++){
|
||||||
|
for(int j = 0; j < 3; j++){
|
||||||
|
zone[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
zoneIndex = 0;
|
||||||
|
camA = 0;
|
||||||
|
camD = 0;
|
||||||
|
ao = 0;
|
||||||
|
p = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::PositionSysZone::update() {
|
||||||
|
decreaseAll(ZONE_LOOP_DECREASE_VALUE);
|
||||||
|
|
||||||
|
readPhyZone();
|
||||||
|
//calculates guessed_x and guessed_y and zoneIndex
|
||||||
|
//zoneIndex is just 2D to 1D of the guessed x and y
|
||||||
|
//(y_position * width + x_position)
|
||||||
|
|
||||||
|
int top = 0;
|
||||||
|
for(int i = 0; i < 3; i++){
|
||||||
|
for(int j = 0; j < 3; j++){
|
||||||
|
if(zone[i][j] > top){
|
||||||
|
guessed_x = i;
|
||||||
|
guessed_y = j;
|
||||||
|
top = zone[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
zoneIndex = guessed_y * 3 + guessed_x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PositionSysZone::getValue(){
|
||||||
|
return zoneIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::PositionSysZone::test() {
|
||||||
|
//outpus the matrix
|
||||||
|
if (millis() - ao >= 500) {
|
||||||
|
DEBUG.println("------");
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
DEBUG.print("US: ");
|
||||||
|
usCtrl->test();
|
||||||
|
DEBUG.print(" | ");
|
||||||
|
}
|
||||||
|
DEBUG.println();
|
||||||
|
testPhyZone();
|
||||||
|
testLogicZone();
|
||||||
|
compass->test();
|
||||||
|
|
||||||
|
// if (comrade){
|
||||||
|
// DEBUG.print("FriendZone: ");
|
||||||
|
// DEBUG.println(friendZone);
|
||||||
|
// }
|
||||||
|
DEBUG.println("------");
|
||||||
|
ao = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int zone[3][3];
|
||||||
|
|
||||||
|
void PositionSysZone::increaseIndex(int i, int j, int ammount){
|
||||||
|
if(i < 3 && j < 3){
|
||||||
|
zone[i][j] += ammount;
|
||||||
|
zone[i][j] = constrain(zone[i][j], 0, ZONE_MAX_VALUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::decreaseIndex(int i, int j, int ammount){
|
||||||
|
increaseIndex(i, j, -ammount);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::increaseRow(int i, int ammount){
|
||||||
|
if(i < 3){
|
||||||
|
for(int a = 0; a < 3; a++){
|
||||||
|
increaseIndex(a, i, ammount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::decreaseRow(int i, int ammount){
|
||||||
|
increaseRow(i, -ammount);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::increaseCol(int i, int ammount){
|
||||||
|
if(i < 3){
|
||||||
|
for(int a = 0; a < 3; a++){
|
||||||
|
increaseIndex(i, a, ammount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::decreaseCol(int i, int ammount){
|
||||||
|
increaseCol(i, -ammount);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::increaseColWithLimit(int i, int ammount){
|
||||||
|
if(zone[i][0] + ammount < ZONE_MAX_VALUE && zone[i][1] + ammount < ZONE_MAX_VALUE && zone[i][2] + ammount < ZONE_MAX_VALUE){
|
||||||
|
increaseCol(i, ammount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::increaseRowWithLimit(int i, int ammount){
|
||||||
|
if(zone[0][1] + ammount < ZONE_MAX_VALUE && zone[1][i] + ammount < ZONE_MAX_VALUE && zone[2][i] + ammount < ZONE_MAX_VALUE){
|
||||||
|
increaseRow(i, ammount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::decreaseColWithLimit(int i, int ammount){
|
||||||
|
if(zone[i][0] - ammount >= 0 && zone[i][1] - ammount >= 0 && zone[i][2] - ammount >= 0){
|
||||||
|
decreaseCol(i, ammount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::decreaseRowWithLimit(int i, int ammount){
|
||||||
|
if(zone[0][i] - ammount >= 0 && zone[1][i] - ammount >= 0 && zone[2][i] - ammount >= 0){
|
||||||
|
decreaseRow(i, ammount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::increaseAll(int val){
|
||||||
|
//decrease all
|
||||||
|
for(int i = 0; i < 3; i++){
|
||||||
|
for(int j = 0; j < 3; j++){
|
||||||
|
increaseIndex(i, j, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::decreaseAll(int val){
|
||||||
|
increaseAll(-val);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PositionSysZone::readPhyZone(){
|
||||||
|
phyZoneUS();
|
||||||
|
phyZoneCam();
|
||||||
|
phyZoneLines();
|
||||||
|
// phyZoneDirection();
|
||||||
|
}
|
||||||
|
|
||||||
|
//old WhereAmI. Renamed to be coerent. Now also adds to the logic zone
|
||||||
|
void PositionSysZone::phyZoneUS(){
|
||||||
|
// decide la posizione in orizzontale e verticale
|
||||||
|
// Aggiorna i flag : good_field_x good_field_y non utilizzata da altre
|
||||||
|
// routines
|
||||||
|
// goal_zone non utilizzata da altre
|
||||||
|
// routines
|
||||||
|
// Aggiorna le variabili:
|
||||||
|
// status_x (con valori CENTER EAST WEST 255 = non lo so)
|
||||||
|
// status_y (con valori CENTER NORTH SOUTH 255 = non lo so)
|
||||||
|
|
||||||
|
int Lx_mis; // larghezza totale stimata dalle misure
|
||||||
|
int Ly_mis; // lunghezza totale stimata dalle misure
|
||||||
|
int Ly_min; // Limite inferiore con cui confrontare la misura y
|
||||||
|
int Ly_max; // Limite inferiore con cui confrontare la misura y
|
||||||
|
int Dy; // Limite per decidere NORTH SOUTH in funzione della posizione
|
||||||
|
// orizzontale
|
||||||
|
|
||||||
|
old_status_x = status_x;
|
||||||
|
old_status_y = status_y;
|
||||||
|
good_field_x = false; // non é buona x
|
||||||
|
good_field_y = false; // non é buona y
|
||||||
|
goal_zone = false; // non sono davanti alla porta avversaria
|
||||||
|
|
||||||
|
if (role == HIGH)
|
||||||
|
DxF = DxF_Atk;
|
||||||
|
else
|
||||||
|
DxF = DxF_Def;
|
||||||
|
|
||||||
|
Lx_mis = usCtrl->getValue(1) + usCtrl->getValue(3) + robot; // larghezza totale stimata
|
||||||
|
Ly_mis = usCtrl->getValue(0) + usCtrl->getValue(2) + robot; // lunghezza totale stimata
|
||||||
|
|
||||||
|
// controllo orizzontale
|
||||||
|
if ((Lx_mis < Lx_max) && (Lx_mis > Lx_min) && (usCtrl->getValue(1) > 25) && (usCtrl->getValue(3) > 25)) {
|
||||||
|
// se la misura orizzontale é accettabile
|
||||||
|
good_field_x = true;
|
||||||
|
status_x = CENTER;
|
||||||
|
if (usCtrl->getValue(1) < DxF) // robot é vicino al bordo dEASTro
|
||||||
|
status_x = EAST;
|
||||||
|
if (usCtrl->getValue(3) < DxF) // robot é vicino al bordo sinistro
|
||||||
|
status_x = WEST;
|
||||||
|
|
||||||
|
if (status_x == CENTER) {
|
||||||
|
// imposto limiti di controllo lunghezza verticale tra le porte
|
||||||
|
Ly_min = LyP_min;
|
||||||
|
Ly_max = LyP_max;
|
||||||
|
Dy = DyP;
|
||||||
|
} else {
|
||||||
|
// imposto limiti di controllo lunghezza verticale in fascia
|
||||||
|
Ly_min = LyF_min;
|
||||||
|
Ly_max = LyF_max;
|
||||||
|
Dy = DyF;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// la misura non é pulita per la presenza di un ostacolo
|
||||||
|
if ((usCtrl->getValue(1) >= (DxF + 10)) || (usCtrl->getValue(3) >= (DxF + 10))) {
|
||||||
|
// se ho abbastanza spazio a dEASTra o a sinistra
|
||||||
|
// devo stare per forza al cento
|
||||||
|
status_x = CENTER;
|
||||||
|
// imposto limiti di controllo lunghezza verticale tra le porte
|
||||||
|
Ly_min = LyP_min;
|
||||||
|
Ly_max = LyP_max;
|
||||||
|
Dy = DyP;
|
||||||
|
} else {
|
||||||
|
status_x = 255;
|
||||||
|
// non so la coordinata x
|
||||||
|
// imposto i limiti di controllo verticale in base alla posizione
|
||||||
|
// orizzontale precedente
|
||||||
|
if (old_status_x == CENTER) {
|
||||||
|
// controlla la posizione precedente per decidere limiti di controllo y
|
||||||
|
// imposto limiti di controllo lunghezza verticale tra le porte
|
||||||
|
Ly_min = LyP_min;
|
||||||
|
Ly_max = LyP_max;
|
||||||
|
Dy = DyP;
|
||||||
|
} else {
|
||||||
|
// imposto limiti di controllo lunghezza verticale in fascia anche per x
|
||||||
|
// incognita
|
||||||
|
Ly_min = LyF_min;
|
||||||
|
Ly_max = LyF_max;
|
||||||
|
Dy = DyF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// controllo verticale
|
||||||
|
if ((Ly_mis < Ly_max) && (Ly_mis > Ly_min)) {
|
||||||
|
// se la misura verticale é accettabile
|
||||||
|
good_field_y = true;
|
||||||
|
status_y = CENTER;
|
||||||
|
if (usCtrl->getValue(0) < Dy) {
|
||||||
|
status_y = NORTH; // robot é vicino alla porta avversaria
|
||||||
|
if (Dy == DyP)
|
||||||
|
goal_zone = true; // davanti alla porta in zona goal
|
||||||
|
}
|
||||||
|
if (usCtrl->getValue(2) < Dy)
|
||||||
|
status_y = SOUTH; // robot é vicino alla propria porta
|
||||||
|
} else {
|
||||||
|
// la misura non é pulita per la presenza di un ostacolo
|
||||||
|
status_y = 255; // non so la coordinata y
|
||||||
|
if (usCtrl->getValue(0) >= (Dy + 0))
|
||||||
|
status_y = CENTER; // ma se ho abbastanza spazio dietro o avanti
|
||||||
|
if (usCtrl->getValue(2) >= (Dy + 0))
|
||||||
|
status_y = CENTER; // e'probabile che stia al CENTER
|
||||||
|
}
|
||||||
|
|
||||||
|
//now operates on the matrix
|
||||||
|
if (status_x == 255 && status_y != 255) {
|
||||||
|
increaseRow(status_y, ZONE_US_UNKNOWN_INCREASE_VALUE);
|
||||||
|
} else if (status_x != 255 && status_y == 255) {
|
||||||
|
increaseCol(status_x, ZONE_US_UNKNOWN_INCREASE_VALUE);
|
||||||
|
} else {
|
||||||
|
increaseIndex(status_x, status_y, ZONE_US_INDEX_INCREASE_VALUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::phyZoneCam(){
|
||||||
|
|
||||||
|
//IMU-fixed attack angle
|
||||||
|
camA = camera->getValueAtk(true);
|
||||||
|
//IMU-fixed defence angle
|
||||||
|
camD = camera->getValueDef(true);
|
||||||
|
|
||||||
|
//Negative angle means that the robot is positioned to the right of the goalpost
|
||||||
|
//Positive angle means that the robot is positioned to the left of the goalpost
|
||||||
|
|
||||||
|
p = 4;
|
||||||
|
|
||||||
|
if(abs(diff(camA, camD)) <= ZONE_CAM_CENTER_RANGE){
|
||||||
|
//at center row, you can consider both camA and camD
|
||||||
|
p = 1;
|
||||||
|
}else if(camA > camD){
|
||||||
|
p = 0;
|
||||||
|
}else if(camD > camA){
|
||||||
|
p = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
increaseColWithLimit(p, ZONE_CAM_INCREASE_VALUE);
|
||||||
|
|
||||||
|
calcPhyZoneCam = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PositionSysZone::phyZoneLines(){
|
||||||
|
// //ZONE_LINES_ERROR_VALUE is a random error code not used in line exit direction calculations
|
||||||
|
// if(lineSensByteBak != ZONE_LINES_ERROR_VALUE){
|
||||||
|
// switch(lineSensByteBak) {
|
||||||
|
// case 1: //NORTH
|
||||||
|
// increaseRow(0, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// decreaseRow(1, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// decreaseRow(2, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// case 2: //EAST
|
||||||
|
// decreaseCol(0, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// decreaseCol(1, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// increaseCol(2, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// case 4: //SOUTH
|
||||||
|
// decreaseRow(0, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// decreaseRow(1, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// decreaseRow(2, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// case 8: //WEST
|
||||||
|
// increaseCol(0, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// decreaseCol(1, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// decreaseCol(2, ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// case 3:
|
||||||
|
// decreaseAll(ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// increaseIndex(0, 2, 2*ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// case 6:
|
||||||
|
// decreaseAll(ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// increaseIndex(2, 2, 2*ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// case 9:
|
||||||
|
// decreaseAll(ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// increaseIndex(0, 0, 2*ZONE_LINES_INCREASE_VALUE);
|
||||||
|
// break;
|
||||||
|
|
||||||
|
// default:
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// //Last thing to do, sets the var to an error code, so next time it will be called will be because of the outOfBounds function being called
|
||||||
|
// lineSensByteBak = ZONE_LINES_ERROR_VALUE;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PositionSysZone::testPhyZone(){
|
||||||
|
updateSensors();
|
||||||
|
|
||||||
|
readPhyZone();
|
||||||
|
DEBUG.print("Measured US location:\t");
|
||||||
|
DEBUG.print(status_x);
|
||||||
|
DEBUG.print(" | ");
|
||||||
|
DEBUG.println(status_y);
|
||||||
|
DEBUG.print("Measured Cam Column (4 is error):\t");
|
||||||
|
DEBUG.println(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PositionSysZone::testLogicZone(){
|
||||||
|
update();
|
||||||
|
DEBUG.println("-----------------");
|
||||||
|
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
DEBUG.print(zone[i][j]);
|
||||||
|
DEBUG.print(" | ");
|
||||||
|
}
|
||||||
|
DEBUG.println();
|
||||||
|
}
|
||||||
|
DEBUG.println("-----------------");
|
||||||
|
DEBUG.print("Guessed location:\t");
|
||||||
|
DEBUG.print(guessed_x);
|
||||||
|
DEBUG.print(" | ");
|
||||||
|
DEBUG.println(guessed_y);
|
||||||
|
DEBUG.print("Zone Index: ");
|
||||||
|
DEBUG.println(zoneIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PositionSysZone::goCenter() {
|
||||||
|
if (zoneIndex == 8)
|
||||||
|
drive->prepareDrive(330, GOCENTER_VEL);
|
||||||
|
if (zoneIndex == 7)
|
||||||
|
drive->prepareDrive(0, GOCENTER_VEL);
|
||||||
|
if (zoneIndex == 6)
|
||||||
|
drive->prepareDrive(45, GOCENTER_VEL);
|
||||||
|
if (zoneIndex == 5)
|
||||||
|
drive->prepareDrive(270, GOCENTER_VEL);
|
||||||
|
if (zoneIndex == 4)
|
||||||
|
drive->prepareDrive(0, 0);
|
||||||
|
if (zoneIndex == 3)
|
||||||
|
drive->prepareDrive(90, GOCENTER_VEL);
|
||||||
|
if (zoneIndex == 2)
|
||||||
|
drive->prepareDrive(255, GOCENTER_VEL);
|
||||||
|
if (zoneIndex == 1)
|
||||||
|
drive->prepareDrive(180, GOCENTER_VEL);
|
||||||
|
if (zoneIndex == 0)
|
||||||
|
drive->prepareDrive(135, GOCENTER_VEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// int vel = 160;
|
||||||
|
// int usDist = 70;
|
||||||
|
// void PositionSysZone::centerGoalPost() {
|
||||||
|
// x = 1;
|
||||||
|
// y = 1;
|
||||||
|
// int vel = 255;
|
||||||
|
// if ((zoneIndex >= 0 && zoneIndex <= 2) || zoneIndex == 4) {
|
||||||
|
// drive->prepareDrive(180, vel);
|
||||||
|
// } else if (zoneIndex == 3 || zoneIndex == 6) {
|
||||||
|
// drive->prepareDrive(90, vel);
|
||||||
|
// } else if (zoneIndex == 5 || zoneIndex == 8) {
|
||||||
|
// drive->prepareDrive(270, vel);
|
||||||
|
// } else {
|
||||||
|
// stop_menamoli = false;
|
||||||
|
// if (usCtrl->getValue(2) >= 25)
|
||||||
|
// drive->prepareDrive(180, vel);
|
||||||
|
// else
|
||||||
|
// drive->prepareDrive(0, 0);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
void PositionSysZone::AAANGOLO() {
|
||||||
|
if((usCtrl->getValue(2) <= 45) && ((usCtrl->getValue(1) <= 50) || (usCtrl->getValue(3) <= 50))) drive->prepareDrive(0, 350, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int PositionSysZone::diff(int a, int b){
|
||||||
|
int diffB = abs(min(a, b) - max(a, b));
|
||||||
|
int diffB1 = 360-diffB;
|
||||||
|
int diff = min(diffB, diffB1);
|
||||||
|
return diff;
|
||||||
|
}
|
|
@ -16,13 +16,9 @@ void initSensors(){
|
||||||
ball = new DataSourceBall(&Serial4, 57600);
|
ball = new DataSourceBall(&Serial4, 57600);
|
||||||
camera = new DataSourceCamera(&Serial2, 19200);
|
camera = new DataSourceCamera(&Serial2, 19200);
|
||||||
usCtrl = new DataSourceCtrl(dUs);
|
usCtrl = new DataSourceCtrl(dUs);
|
||||||
linesCtrl = new DSCtrlLines(lIn, lOut);
|
linesCtrl = new LineSys2019(lIn, lOut);
|
||||||
bt = new DataSourceBT(&Serial3, 115200);
|
bt = new DataSourceBT(&Serial3, 115200);
|
||||||
|
}
|
||||||
/*game = new Game();
|
|
||||||
goalie = new Goalie();
|
|
||||||
keeper = new Keeper();*/
|
|
||||||
}
|
|
||||||
|
|
||||||
void updateSensors(){
|
void updateSensors(){
|
||||||
role = digitalRead(SWITCH_DX);
|
role = digitalRead(SWITCH_DX);
|
||||||
|
|
Loading…
Reference in New Issue