Modifications

Sauter à la navigation Sauter à la recherche
4 409 octets ajoutés ,  8 mars 2021 à 16:28
Ligne 31 : Ligne 31 :     
=Structure=
 
=Structure=
[[Fichier:Robot_vierge.JPG|400px|Allure globale de la structure du robot principale pour l'année 2019]]
+
En respectant les contraintes décrites précédemment, nous utilisons une structure de 280mm de largeur et 240mm de profondeur pour une hauteur de 320mm. Nous n'atteignons donc pas les 1200mm de périmètre maximal (1040mm) ce qui nous laisse une marge d'action dans le cas où la conception d'actionneurs nécessite un léger dépassement. Afin de rendre la structure modulable d'année en année, nous avons choisi de créer une structure pouvant "porter" plusieurs étages amovibles et indépendants. Deux poignées sur le dessus permettent de déplacer le robot sans risquer de l'endommager en agrippant une partie fragile. Cela s'avère très pratique car nous sommes en permanence amenés à déplacer le robot. La structure est entièrement découpée dans du MDF grâce à la découpeuse laser Trotec du Fablab FabMSTIC sur le campus de Grenoble. Cette matière est assez solide et préférable à du contre-plaqué car le bois est homogène. Malheureusement, les Fablab ont arrêté d'utiliser cette matière car la fumée faite par le MDF lorsqu'il est découpé encrasse les filtres des graveuses laser. Ainsi, nous devrons probablement passer à l'utilisation d'une autre matière, comme du plexiglas pour du prototypage et pourquoi pas de l'aluminium (pour ce dernier, nous n'avons pas encore de matériel, mais peut-être un jour nous serrons suffisamment équipé pour travail ce métal).
   −
En respectant les contraintes décrites précédemment, nous utilisons une structure de 280mm de largeur et 240mm de profondeur pour une hauteur de 320mm. Nous n'atteignons donc pas les 1200mm de périmètre maximal (1040mm) ce qui nous laisse une marge d'action dans le cas où la conception d'actionneurs nécessite un léger dépassement. Le robot est doté de deux moteurs Maxon
+
Le robot est mû par deux moteur Maxon dotés de motoréducteurs. Des poulies transmettent le mouvement aux roues car nous voulions garder un éspace au niveau de l'étage du plus bas pour de potentiels actionneurs. Les roues motrices sont placées le plus à l'arrière et à l'extérieur possible. Cela offre un déplacement plus précis et libère de la place à l'avant. Afin d'asservir les moteurs, nous utilisons des encodeurs de chez Kuebler. Enfin, un contrôleur moteur de chez Ion Motion Control (maintenant BasicMicro) nous permet de lier les données des encodeurs et gérer la puissance des moteurs. Plus de détails seront données plus loin.
 +
 
 +
<gallery class="center">
 +
Fichier:Robot_vierge.JPG|thumb|200px|Allure globale de la structure du robot principale pour l'année 2019
 +
Fichier:Moteur_maxon.JPG|thumb|200px|Moteur Maxon doté d'un motoréducteur
 +
Fichier:Controleur_moteur.JPG|thumb|200px|Contrôleur moteur Ion Motion Control
 +
Encodeurs (image en attente de téléversement)
 +
</gallery>
    
=Odométrie=
 
=Odométrie=
Ligne 40 : 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

Menu de navigation