ROV'NET  0.2
BTS SNIR LaSalle Avignon 2020
rov.cpp
Aller à la documentation de ce fichier.
1 
7 #include "rov.h"
8 #include "campagne.h"
9 #include <iomanip>
10 
11 Rov::Rov(IHMRov *ihmRov, QObject *parent) : QObject(parent), ihmRov(ihmRov), camera(nullptr), trameDeplacement("$DEP;0;0;0\r\n"), tramePrecedenteDeplacement("$DEP;0;0;0\r\n"), tramePilotage("$BRAS;0\r\n"), tramePrecedentePilotage("$BRAS;0\r\n"), tramePince("$PINCE;0\r\n"), tramePrecedentePince("$PINCE;0\r\n"), tramePrecedenteCamera(TRAME_CAMERA_IMMOBILE),
12 campagneEnCours(false)
13 {
14  qDebug() << Q_FUNC_INFO;
16  capteurs = new Capteurs(this);
17 
20 }
21 
23 {
26  qDebug() << Q_FUNC_INFO;
27 }
28 
30 {
31  listeManettes = QGamepadManager::instance()->connectedGamepads();
32 
33  if (listeManettes.isEmpty())
34  {
35  qDebug() << Q_FUNC_INFO << "Aucune manette détectée !";
36  }
37  else
38  {
39  qDebug() << Q_FUNC_INFO << "Nombre de manettes" << listeManettes.size();
40  }
41 
42  for (auto m : listeManettes)
43  {
44  qDebug() << Q_FUNC_INFO << "-> Manette" << m;
45  Manette *manette = new Manette(m);
46  manettes.push_back(manette);
48  }
49 }
50 
52 {
53  connect(manette, SIGNAL(creationTrameDeplacement(char, int, char)), this, SLOT(creerTrameDeplacement(char, int, char)));
54  connect(manette, SIGNAL(creationTramePilotage(QString)), this, SLOT(creerTramePilotage(QString)));
55  connect(manette, SIGNAL(creationTrameOrdre(QString)), this, SLOT(creerTrameOrdre(QString)));
56  connect(manette, SIGNAL(creationTramePince(QString)), this, SLOT(creerTramePince(QString)));
57  connect(manette, SIGNAL(nouvelleTrameCamera(QString,QString)), this, SLOT(creerTrameCamera(QString,QString)));
58 
59  connect(manette, SIGNAL(axisLeftXChanged(double)), manette, SLOT(changerAxeXJoystickGauche(double)));
60  connect(manette, SIGNAL(axisLeftYChanged(double)), manette, SLOT(changerAxeYJoystickGauche(double)));
61  connect(manette, SIGNAL(axisRightXChanged(double)), manette, SLOT(changerAxeXJoystickDroit(double)));
62  connect(manette, SIGNAL(axisRightYChanged(double)), manette, SLOT(changerAxeYJoystickDroit(double)));
63  connect(manette, SIGNAL(buttonL1Changed(bool)), manette, SLOT(changerBoutonHautGauche(bool)));
64  connect(manette, SIGNAL(buttonR1Changed(bool)), manette, SLOT(changerBoutonHautDroit(bool)));
65  connect(manette, SIGNAL(buttonL2Changed(double)), manette, SLOT(changerGachetteBasGauche(double)));
66  connect(manette, SIGNAL(buttonR2Changed(double)), manette, SLOT(changerGachetteBasDroit(double)));
67  connect(manette, SIGNAL(buttonUpChanged(bool)), manette, SLOT(changerFlecheEnAvant(bool)));
68  connect(manette, SIGNAL(buttonDownChanged(bool)), manette, SLOT(changerFlecheEnArriere(bool)));
69  connect(manette, SIGNAL(buttonLeftChanged(bool)), manette, SLOT(changerFlecheAGauche(bool)));
70  connect(manette, SIGNAL(buttonRightChanged(bool)), manette, SLOT(changerFlecheADroite(bool)));
71  connect(manette, SIGNAL(buttonAChanged(bool)), manette, SLOT(changerBoutonA(bool)));
72  connect(manette, SIGNAL(buttonBChanged(bool)), manette, SLOT(changerBoutonB(bool)));
73  connect(manette, SIGNAL(buttonXChanged(bool)), manette, SLOT(changerBoutonX(bool)));
74  connect(manette, SIGNAL(buttonYChanged(bool)), manette, SLOT(changerBoutonY(bool)));
75  connect(manette, SIGNAL(buttonSelectChanged(bool)), manette, SLOT(changerBoutonSelect(bool)));
76  connect(manette, SIGNAL(buttonGuideChanged(bool)), manette, SLOT(fermerApplication(bool)));
77  connect(manette, SIGNAL(buttonR3Changed(bool)), ihmRov, SLOT(capturerImage(bool)));
78 
79  connect(manette, SIGNAL(connectedChanged(bool)), ihmRov, SLOT(modifieEtatManette(bool)));
80 }
81 
82 void Rov::decoderTrameTelemetrie(QString trameTelemetrie)
83 {
84  capteurs->setTelemetrie(trameTelemetrie.section(";",1,1));
85  capteurs->setAngle(trameTelemetrie.section(";",2,2));
86 }
87 
88 void Rov::decoderTrameCapteur(QString trameCapteur)
89 {
90  QString temperature, humidite, radiation;
91 
92  temperature = QString::number(trameCapteur.section(";",1,1).toDouble()/10);
93  humidite = trameCapteur.section(";",2,2);
94  radiation = trameCapteur.section(";",3,3);
95 
96  capteurs->setTemperature(temperature);
97  capteurs->setHumidite(humidite);
98  capteurs->setRadiation(radiation);
99 
100  Mesure mesure;
101  mesure.dateheure = QDateTime::currentDateTime();
102  mesure.temperature = temperature;
103  mesure.humidite = humidite;
104  mesure.radiation = radiation;
105 
106  QDateTime date;
107 
108  ihmRov->getCampagne()->ajouterMesure(mesure);
110 
111  emit enregistrerMesures(temperature, humidite, radiation);
112 
113 }
114 
116 {
117  connect(communicationRov, SIGNAL(nouvelleTrame(QString)), this, SLOT(decoderTrame(QString)));
118  connect(communicationRov, SIGNAL(etatPortModifie(bool, QString)), ihmRov, SLOT(modifieEtatPortSerie(bool, QString)));
119 }
120 
122 {
123  for(int i=0;i<manettes.size();i++)
124  delete manettes[i];
125 }
126 
128 {
129  qDebug() << Q_FUNC_INFO;
130  if(Camera::getNbCameras() > 0)
131  {
132  dureeCampagne.start();
133  QString nom = Camera::creerNomCamera(CAMERA_DEFAUT);
134  if(demarrerVideo(nom))
135  campagneEnCours = true;
136  }
137  return campagneEnCours;
138 }
139 
141 {
142  qDebug() << Q_FUNC_INFO;
143  ihmRov->getCampagne()->setDuree(dureeCampagne.elapsed());
144  arreterVideo();
145  campagneEnCours = false;
146 }
147 
149 {
150  return camera;
151 }
152 
154 {
155  return capteurs;
156 }
157 
159 {
160  QTime duree(0,0);
161  QTime dureeMission = duree.addMSecs(dureeCampagne.elapsed() + ihmRov->getCampagne()->getDuree());
162  return dureeMission.toString("hh:mm:ss");
163 }
164 
165 bool Rov::demarrerVideo(QString nomCamera, int choixResolution)
166 {
167  qDebug() << Q_FUNC_INFO << "nomCamera" << nomCamera << "choixResolution" << choixResolution;
168  if(camera == nullptr)
169  {
170  camera = new Camera(this, nomCamera, choixResolution);
171  connect(camera, SIGNAL(nouvelleImage(QPixmap)), ihmRov, SLOT(afficherImage(QPixmap)));
173  camera->start();
174  ihmRov->modifieEtatCamera(true, nomCamera);
175  return true;
176  }
177  return false;
178 }
179 
181 {
182  return campagneEnCours;
183 }
184 
185 void Rov::decoderTrame(QString trame)
186 {
187  QString trameTelemetrie, trameCapteur;
188 
189  QStringList trames = trame.split("\r\n");
190  qDebug() << Q_FUNC_INFO << "trame" << trames.size();
191  for(int i = 0; i < trames.size(); i++)
192  {
193  if(!trames[i].isEmpty())
194  {
195  if(trames[i].startsWith(DEBUT_TRAME_TELEMETRIE))
196  {
197  trameTelemetrie = trames[i];
198  decoderTrameTelemetrie(trameTelemetrie);
199  }
200  else if(trames[i].startsWith(DEBUT_TRAME_CAPTEUR))
201  {
202  trameCapteur = trames[i];
203  decoderTrameCapteur(trameCapteur);
204  }
205  }
206  else
207  {
208  qDebug() << Q_FUNC_INFO << "Trame inconnue !";
209  }
210  }
211 }
212 
213 void Rov::creerTrameDeplacement(char deplacementAxeX, int puissance, char deplacementAxeY)
214 {
215  trameDeplacement = DEBUT_TRAME_DEPLACEMENT ";" + QString(deplacementAxeX) + ";" + QString::number(puissance) + ";" + QString(deplacementAxeY) + "\r\n";
216 
218  {
220  ihmRov->setEtatRadar(true);
221  else
222  ihmRov->setEtatRadar(false);
223  qDebug() << Q_FUNC_INFO << "trameDeplacement :" << trameDeplacement;
225  communicationRov->emettreTrame(trameDeplacement);
226  }
227 }
228 
229 void Rov::creerTramePilotage(QString deplacement)
230 {
231  tramePilotage = DEBUT_TRAME_PILOTAGE ";" + deplacement + "\r\n";
233  {
234  qDebug() << Q_FUNC_INFO << "tramePilotage :" << tramePilotage;
236  communicationRov->emettreTrame(tramePilotage);
237  }
238 }
239 
240 void Rov::creerTrameOrdre(QString ordre)
241 {
242  trameOrdre = DEBUT_TRAME_ORDRE ";" + ordre + "\r\n";
244  {
245  qDebug() << Q_FUNC_INFO << "trameOrdre :" << trameOrdre;
246  communicationRov->emettreTrame(trameOrdre);
247  }
248 }
249 
250 void Rov::creerTramePince(QString mouvementPince)
251 {
252  tramePince = DEBUT_TRAME_PINCE ";" + mouvementPince + "\r\n";
254  {
255  qDebug() << Q_FUNC_INFO << "tramePince :" << tramePince;
257  communicationRov->emettreTrame(tramePince);
258  }
259 }
260 
261 void Rov::creerTrameCamera(QString axeX, QString axeY)
262 {
263  QString trameCamera = DEBUT_TRAME_CAMERA ";" + axeX + ";" + axeY + "\r\n";
264 
265  if(tramePrecedenteCamera != trameCamera)
266  {
267  tramePrecedenteCamera = trameCamera;
268  communicationRov->emettreTrame(trameCamera);
269  qDebug() << Q_FUNC_INFO << "trame camera" << trameCamera;
270  }
271 }
272 
274 {
275  if(camera != nullptr)
276  {
277  qDebug() << Q_FUNC_INFO << "isRunning" << camera->isRunning();
278  ihmRov->arreterVideo();
279  disconnect(camera, SIGNAL(nouvelleImage(QPixmap)), ihmRov, SLOT(afficherImage(QPixmap)));
280  camera->requestInterruption();
281  camera->wait();
282  delete camera;
283  camera = nullptr;
284  ihmRov->modifieEtatCamera(false, "");
285  }
286 }
287 
289 {
290  communicationRov->setConfiguration(configuration);
291 }
292 
294 {
295  return communicationRov;
296 }
297 
298 QVector<Manette*> Rov::getManettes()
299 {
300  return manettes;
301 }
void creerTrameDeplacement(char deplacementAxeX, int puissance, char deplacementAxeY)
Crée les trames de déplacement.
Definition: rov.cpp:213
QString temperature
Donnée temperature.
Definition: campagne.h:25
Classe permettant une communication entre le rov et la manette.
Definition: manette.h:210
Fichier qui contient la déclaration de la classe Campagne.
QTime dureeCampagne
Timer lancer au début de la campagne.
Definition: rov.h:110
Rov(IHMRov *ihmRov, QObject *parent=nullptr)
Constructeur de la classe Rov.
Definition: rov.cpp:11
void initialiserEvenementManette(Manette *manette)
Initialise les evenement de la manette.
Definition: rov.cpp:51
void creerTramePilotage(QString deplacement)
Crée les trames de pilotage.
Definition: rov.cpp:229
void decoderTrame(QString trame)
Décode la trame réçue par le port série selon le protocole établie.
Definition: rov.cpp:185
Camera * camera
Instance d&#39;un objet camera possedant les informations nécessaire à l&#39;affichage du flux vidéo...
Definition: rov.h:97
#define DEBUT_TRAME_ORDRE
Constante contenant le début de la trame ordre selon le protocole.
Definition: rov.h:46
void supprimerManette()
Supprime les manettes du conteneur des manettes.
Definition: rov.cpp:121
Capteurs * getCapteurs()
Retourne l&#39;objet capteurs créée par le rov.
Definition: rov.cpp:153
IHM permettant d&#39;obtenir le flux vidéo en direct placé sur le robot et d&#39;obtenir les informations rel...
Definition: ihmrov.h:81
void detecterManette()
detecte les mannettes
Definition: rov.cpp:29
Capteurs * capteurs
Instance d&#39;un objet contenant les dernières informations issues des capteurs du rov.
Definition: rov.h:96
void setAngle(QString angle)
Modifie la dernière information issue du capteur de distance.
Definition: capteurs.cpp:39
Campagne * getCampagne()
Retourne l&#39;objet campagne en cours.
Definition: ihmrov.cpp:432
#define CAMERA_DEFAUT
Défini le numéro de la caméra par défaut.
Definition: camera.h:29
QString humidite
Donnée humidité
Definition: campagne.h:24
QString tramePrecedenteDeplacement
Contenu précédente trame déplacement.
Definition: rov.h:102
#define DEBUT_TRAME_DEPLACEMENT
Constante contenant le début de la trame déplacement selon le protocole.
Definition: rov.h:34
Class permettant de mettre en place une communication avec la camera.
Definition: camera.h:58
void setHumidite(QString humidite)
Modifie la dernière information issue du capteur de humidité
Definition: capteurs.cpp:29
void setTemperature(QString temperature)
Modifie la dernière information issue du capteur de température.
Definition: capteurs.cpp:24
void decoderTrameCapteur(QString trameCapteur)
Décode la trame capteur reçue selon le protocole.
Definition: rov.cpp:88
void setEtatRadar(bool etatRadar)
Dertermine l&#39;etat de etatRadar.
Definition: ihmrov.cpp:437
bool campagneEnCours
Etat de si une campagne est en cour.
Definition: rov.h:111
QString radiation
Donnée radiation.
Definition: campagne.h:26
void initialiserEvenements()
Initialise le(s) Evenement(s)
Definition: rov.cpp:115
void enregistrerMesures(QString temperature, QString humidite, QString radiation)
signal contenant les nouvelles mesures recus du robot (pour les enregistrer dans la BDD) ...
void actualiserInformationsSeuils()
Actualise les informations affichés des indicateur de dépassement des seuils acceptable.
Definition: ihmrov.cpp:389
QString getTempsCampagne()
Retourne la durée de la campagne.
Definition: rov.cpp:158
bool demarrerVideo(QString nomCamera, int choixResolution=-1)
Démarre un nouveau flux vidéo.
Definition: rov.cpp:165
void setTelemetrie(QString telemetrie)
Modifie la dernière information issue du capteur télémétrique.
Definition: capteurs.cpp:19
structure permettant de configurer une communication
#define TRAME_CAMERA_IMMOBILE
Constante contenant la trame pour immobiliser la caméra.
Definition: rov.h:77
QString trameOrdre
Contenu trame ordre.
Definition: rov.h:105
CommunicationRov * communicationRov
Instance d&#39;un objet permettant la récupération des trames envoyé par la liaison série.
Definition: rov.h:98
void arreterVideo()
Arrete le flux vidéo.
Definition: rov.cpp:273
Camera * getCamera()
Retourne l&#39;objet caméra créée par le rov.
Definition: rov.cpp:148
void arreterVideo()
Déconnecte les événements liés à la caméra et modifie l&#39;état des boutons de l&#39;IHM.
Definition: ihmrov.cpp:528
#define DEBUT_TRAME_PINCE
Constante contenant le début de la trame pince selon le protocole.
Definition: rov.h:52
bool getCampagneEncours() const
Retourne l&#39;etat de la campagne.
Definition: rov.cpp:180
#define DEBUT_TRAME_CAMERA
Constante contenant le début de la trame caméra selon le protocole.
Definition: rov.h:71
void modifierConfiguration(Configuration &configuration)
Modifie la configuration de la communication.
Definition: rov.cpp:288
structure permettant de définir les propriété d&#39;une mesure prise à une heure précise ...
Definition: campagne.h:21
QString tramePrecedenteCamera
Contenu précédente trame caméra.
Definition: rov.h:108
void arreterCampagne()
Arrête la campagne.
Definition: rov.cpp:140
CommunicationRov * getCommunicationRov()
Retourne l&#39;objet communicationRov créée par le rov.
Definition: rov.cpp:293
void setConfiguration(Configuration maConfiguration)
Affecte a l&#39;objet CommunicationRov une configuration du port série virtuel.
QList< int > listeManettes
Liste des mannettes connecté
Definition: rov.h:99
void creerTramePince(QString mouvementPince)
Crée les trames de la pince.
Definition: rov.cpp:250
#define DEBUT_TRAME_CAPTEUR
Constante contenant le début de la trame capteur selon le protocole.
Definition: rov.h:28
IHMRov * ihmRov
Instance d&#39;un objet ihmRov permettant la connexion entre les autre classe associé aux rov et l&#39;ihm...
Definition: rov.h:95
QString tramePilotage
Contenu trame pilotage.
Definition: rov.h:103
Class permettant de mettre en place une communication avec le rov.
int getDuree() const
Retourne la durée de la campagne.
Definition: campagne.cpp:44
void setDuree(int duree)
Modifie la duree de la campagne.
Definition: campagne.cpp:49
~Rov()
Destructeur de la classe Rov.
Definition: rov.cpp:22
Fichier qui contient la déclaration de la classe rov.
bool demarrerCampagne()
Démarre la campagne.
Definition: rov.cpp:127
QVector< Manette * > manettes
Conteneur des manettes.
Definition: rov.h:100
void setRadiation(QString radiation)
Modifie la dernière information issue du capteur de radiation.
Definition: capteurs.cpp:34
static int getNbCameras()
Retourne le nombre de caméras connectés.
Definition: camera.cpp:271
QString trameDeplacement
Contenu trame déplacement.
Definition: rov.h:101
QString tramePince
Contenu trame pince.
Definition: rov.h:106
QDateTime dateheure
Date/Heure.
Definition: campagne.h:23
void modifieEtatCamera(bool etat, QString information)
Modifie l&#39;affichage de l&#39;état de la caméra.
Definition: ihmrov.cpp:576
void creerTrameOrdre(QString ordre)
Crée les trames d&#39;ordre.
Definition: rov.cpp:240
La classe QObject est la classe de base de tous les objets Qt. Elle permet à ces objets Qt de dispose...
#define TRAME_DEPLACEMENT_IMMOBILE
Definition: rov.h:53
void creerTrameCamera(QString axeX, QString axeY)
Crée les trames de la caméra.
Definition: rov.cpp:261
#define TRAME_PINCE_IMMOBILE
Constante contenant la trame pince à zéro selon le protocole.
Definition: rov.h:65
int emettreTrame(QString trame)
Emet la trame vers le robot.
Classe contenant les dernières informations issues des capteurs du rov.
Definition: capteurs.h:18
void ajouterMesure(Mesure &mesure)
Ajoute une mesure dans le conteneur de mesure.
Definition: campagne.cpp:90
QVector< Manette * > getManettes()
Retourne le conteneur de manettes créée par le rov.
Definition: rov.cpp:298
#define DEBUT_TRAME_TELEMETRIE
Constante contenant le début de la trame telemetrie selon le protocole.
Definition: rov.h:22
QString tramePrecedentePince
Contenu précédente trame pince.
Definition: rov.h:107
void initialiserEvenementsCamera()
Initialise les événements liés à la caméra.
Definition: ihmrov.cpp:523
static QString creerNomCamera(int numero)
Retourne le nom de caméra associé a son numéro.
Definition: camera.cpp:294
#define TRAME_PILOTAGE_IMMOBILE
Constante contenant la trame pilotage à zéro selon le protocole.
Definition: rov.h:59
QString tramePrecedentePilotage
Contenu précédente trame pilotage.
Definition: rov.h:104
void decoderTrameTelemetrie(QString trameTelemetrie)
Décode la trame télémetrie reçue selon le protocole.
Definition: rov.cpp:82
#define DEBUT_TRAME_PILOTAGE
Constante contenant le début de la trame pilotage selon le protocole.
Definition: rov.h:40