Programmation du robot
Pour la programmation du robot, nous avons fait le choix de créer un programme très modulaire et permettant de créer très facilement des stratégie, de sorte que n’importe qui puisse créer une stratégie, même quelqu’un n’ayant pas forcément des compétences en programmation.
Structure du code
Le code est découpé en plusieurs fichiers:
-
constante.h
, le fichier des variables du robot, voir Généralisation du code pour plus d’information. -
RobotMove.cpp
etRobotMove.h
, c’est la librairie de mouvement du robot, regardez la page déplacement pour plus d’informations sur les fonctions de déplacement. -
lidar.cpp
etlidar.h
, c’est la librairie de détection du lidar, regardez la page détection -
main.cpp
, c’est le code principal, voir Code principal pour plus d’informations.
Généralisation du code
Le fichier constante.h
permet de modifier des valeurs telles que les pins correspondant à certains composants, la largeur du robot, le nombre de pas par tour pour les moteurs, etc.
Cela permet d’avoir une base de code utilisable sur presque n’importe quel robot ayant 2 roue comme notre robot.
Nous avons donc pour simplifié l’upload créé une variable booléenne PAMI dans le fichier constante.h
permettant de switcher facilement entre les PAMIs ou le Robot Principal (pour les valeurs de la taille mais également pour les stratégies ou certaines sécurité dans certaines fonctions d’actionneur par exemple).
Code principal
C’est le code central du fonctionnement du robot.
Il fait interface entre les différents code tout en rajoutant un grand nombre de fonctionnalités.
C’est dans le code principal que sont défini les stratégies.
Dans le code principal sont également défini les fonctions permettant de créer facilement des stratégies, les types d’actions, les états, le fonctionnement des actionneurs, les procédures d’initialisation du robot, l’utilisation des fonctions de la librairie lidar et l’interaction avec les fonctions de la librairie mouvement.
Stratégie et actions
Afin de pouvoir simplifier la création de stratégie nous avons créé une structure etape
contenant le type d’action et les variables associées à cette action (la distance, l’angle, la vitesse etc.) interpretable grâce à la fonction actioncall
et un type strategie
correspondant à une liste d’ etape
.
Pour simplifier la création d’ etape
nous avons créé des fonctions pour chaque type d’action avec comme seul argument les variables nécessaire à cette action. Cela permet par exemple pour une action FORWARD
de passer de {.action=A::FORWARD,.distance=5000,.vitesse=DEFAULT_SPEED}
à FORWARD(5000)
ce qui permet de simplifier encore plus la création de stratégie.
Les types d’actions possibles sont:
FORWARD
: faire avancer le robot sur une certaine distance, un argument vitesse est possible mais par défaut sur DEFAULT_SPEEDBACKWARD
: faire reculer le robot sur une certaine distance, un argument vitesse est possible mais par défaut sur DEFAULT_SPEEDTURN
: faire tourner le robot sur une certain angle, un argument vitesse est possible mais par défaut sur DEFAULT_SPEEDTURNTO
: faire tourner le robot vers un certain angle, un argument vitesse est possible mais par défaut sur DEFAULT_SPEEDMOVETO
: faire se déplacer le robot vers une certaine position sur le terrain de jeu, un argument vitesse est possible mais par défaut sur DEFAULT_SPEEDFERMER_AIMANTS
: fermer les aimants permettant de relacher les boîtes de conservesOUVRIR_AIMANTS
: ouvrir les aimants permettant d’attraper des boites de conservesMONTER_CANNETTE_2E_ETAGE
: monter l’élevateur en position très haute permettant de soulever une structure et de ne pas percuter une autre structure lorsqu’on souhaite réaliser un étageMONTER_ACTIONNEUR
: mettre l’élévateur en position haute permettant de poser une structure sur une autre structure pour réaliser un étage (cette action ne doit donc être appelée qu’aprèsMONTER_CANNETTE_2E_ETAGE
et en étant sur que l’actionneur est actuellement au dessus d’une structure)MONTER_BANDEROLE
: met l’élevateur en position assez haute pour que la banderole ne touche pas le sol, n’est utilisé que dans l’initialisation banderole, pour pouvoir relacher la banderole depuis l’actionneur.MILIEU_ACTIONNEUR
: permet de mettre l’élevateur en position par défaut, utile pour l’initialisation et pour les recalage bordure.DESCENDRE_ACTIONNEUR
: permet de mettre l’élevateur en position basee, position qui permet d’attraper les boites de conserve pour faire une structure (pour être sur que l’on prend bien une planche avec les 2 boites de conserve, il faut remonter l’actionneur au moins avecMILIEU_ACTIONNEUR
après être sur que l’actionneur a pris des boites de conserve).MONTER_BRAS
: range les bras dans le robot, c’est la position d’initialisation pour que le robot rentre dans le périmètre de départDESCENDRE_BRAS
: descend les bras afin de pouvoir prendre des du dessus ou reposer des planches sur des boites de conserve (à utiliser avecACTIVER_POMPE
etDESACTIVER_POMPE
)MILIEU_BRAS
: met les bras en position semi haute permettant de se déplacer avec une plancheACTIVER_POMPE
: active la pompe permettant de prendre une planche à l’aide des ventouses présentent sur les brasDESACTIVER_POMPE
: desactive la pompe permettant de relacher une plancheWAIT
fait attendre le code pendant un certain temps en secondeACTIONNEUR_POS
permet de mettre l’élevateur à une position précise (rarement voire jamais utilisé).WAIT_END
permet d’attendre presque la fin du match, par exemple pour se mettre en proximité de la zone de fin et attendre la fin du match pour y entrer, ce qui permet de ne pas bloquer le chemin des PAMIs