Modifications

2 487 octets ajoutés ,  8 mars 2021 à 15:28
Ligne 47 : Ligne 47 :     
=Actionneurs=
 
=Actionneurs=
 +
 +
=Explication Programme=
 +
Le programme peut être séparé en 3 principales parties :
 +
- Le Main.c et FreeRTOS
 +
- Les fichiers de configuration
 +
- Les tâches
 +
==Main.c et FreeRTOS==
 +
 +
==Les fichiers de configuration==
 +
 +
===Odometry===
 +
====MCP233.c====
 +
Ce fichier contient les commandes permettant de configurer le moteur
 +
====rbtMovement.c====
 +
On trouvera ici toutes les commandes de déplacement pour le robot
 +
 +
<syntaxhighlight lang="c">
 +
void rbtMovement Init ( uint16_t whDist , uint16_t dmWh1, uint16_t dmWh2,
 +
uint16_t ticks 1 , uint16_t ticks 2 )
 +
</syntaxhighlight>
 +
 +
Cette fonction permet de configurer les encodeurs :
 +
 +
1. whDist = distance entre les 2 encodeurs
 +
 +
2. dmWh1 et dmWh2 = diamètre en mm de chaque encodeur
 +
 +
3. ticks1 et ticks2 = nombre de ticks par rotation des encodeurs
 +
 +
<syntaxhighlight lang="c">
 +
void rbtMove ( int32_t dist ) //Deplacement du robo t en ligne droite en mm
 +
void rbt_turn ( int16_t angle ) // Rotation du robot en degre
 +
</syntaxhighlight>
 +
 +
 +
<syntaxhighlight lang="c">
 +
static void rb tS ta teMachine ( int32_t targetEncoderCountsM1 , int32_ttargetEncoderCountsM2 )
 +
</syntaxhighlight>
 +
 +
Cette fonction permet de recevoir l’état du robot :
 +
 +
1. BLOCKED = le robot ne bouge pas
 +
 +
2. READY_TO_SEND = prêt à envoyer une commande
 +
 +
3. IDLE = prêt à recevoir une commmande
 +
 +
4. BUSY = En train d’exécuter une commande
 +
 +
5. PAUSED = une commande a été annulée, le mouvement doit reprendre avant de repasser en état IDLE
 +
 +
6. RESUMING = compléte la commande qui a été annulée avant de repasser en IDLE
 +
 +
==Tâches==
 +
 +
===movementTask.c===
 +
 +
Les taches que le robot pourra effectuer Pour l’instant il n'y en a qu’une seule : movement-Task.c
 +
 +
<syntaxhighlight lang="c">
 +
#include "movementTask.h"
 +
#include "rbtMovement.h"
 +
#include "MCP233.h"
 +
 +
 +
/* Variables */
 +
 +
robotState_t robotState = BLOCKED;
 +
 +
 +
/* Task */
 +
 +
    void StartSendMovementCmd(void const * argument){
 +
/******** Initializations ********/
 +
//TODO measure accurately
 +
 +
rbtMovementInit(265, 88, 88, 4096, 4096);
 +
drive_forward(0); //making sure that the MCP command buffer is empty
 +
 +
robotState = IDLE;
 +
 +
/******** Movement path command list ********/
 +
 +
/*Aller retour x2*/
 +
 +
rbtMove(1000); //distance en mm
 +
rbt_turn(180); //angle en degres, (-) pour tourner a gauche et (+) pour tourner a droite
 +
rbtMove(1000);
 +
rbt_turn(180);
 +
 +
while(1){
 +
osDelay(1); //boucle pour debugger, le programme devrait rester bloquer ici a la fin de son execution
 +
}
 +
 +
  /* USER CODE END 5 */
 +
}
 +
 +
</syntaxhighlight>
38

modifications