Modifications

Sauter à la navigation Sauter à la recherche
2 177 octets ajoutés ,  8 mars 2021 à 16: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">
 
<syntaxhighlight lang="c">
long some_function();
+
void rbtMovement Init ( uint16_t whDist , uint16_t dmWh1, uint16_t dmWh2,
/* int */ other_function();
+
uint16_t ticks 1 , uint16_t ticks 2 )
 +
</syntaxhighlight>
   −
/* int */ calling_function()
+
Cette fonction permet de configurer les encodeurs :
{
  −
    long test1;
  −
    register /* int */ test2;
     −
    test1 = some_function();
+
1. whDist = distance entre les 2 encodeurs
     if (test1 > 0)
+
 
          test2 = 0;
+
2. dmWh1 et dmWh2 = diamètre en mm de chaque encodeur
    else
+
 
          test2 = other_function();
+
3. ticks1 et ticks2 = nombre de ticks par rotation des encodeurs
    return test2;
+
 
 +
<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>
 
</syntaxhighlight>
38

modifications

Menu de navigation