3.8 KiB
Submodule Déplacement pour le RP2040
Ceci est un submodule git pour intégrer facilement la gestion des déplacements à un projet. On crée ce Submodule en se servant de la documentation disponible ici : https://git-scm.com/book/en/v2/Git-Tools-Submodules
Ce module est composé de deux parties :
- L'asservissement des moteurs :
- Moteur PWM
- Lecture codeur
- asservissement
- La gestion des trajets :
- Loi de commande
- Asservissement en position
- Trajectoires
- Trajet (accélération et décélération sur trajectoire)
- Déplacement avec évitement sommaire:
- Ignore l'obstacle
- Arrêt devant obstacle
- Pause devant obstacle
- Inversion trajectoire
Utilisation
Ajout du sub-module
Ajouter ce submodule à votre projet. Dans un terminal, dans le répertoire de votre projet, entrez :
git submodule add https://git.poivron-robotique.fr/Keuronde/Module_deplacement_robot_differentiel.git
Ajouter le fichier nouvellement créé .gitmodules à votre projet.
git add .gitmodules
Configuration de la compilation
Dans le fichier CMakeLists.txt, ajouter le dossier du sub module:
add_subdirectory(Module_deplacement_robot_differentiel)
Dans le fichier CMakeLists.txt, ajouter la bibliothèque RP2040_Servomoteur :
target_link_libraries(Modele_RPiPico
...
Deplacement_Robot_differentiel
)
Intégration au code source
Ajout du fichier d'include :
#include "Module_deplacement_robot_differentiel/Deplacement.h"
Initilisation du module :
AsserMoteur_Init();
Trajet_init();
Fonctions cycliques :
AsserMoteur_Gestion(step_ms);
Localisation_gestion();
Avec :
- step_ms : le temps entre chaque appel de AsserMoteur_Gestion()
Vous avez deux exemples de code plus bas.
Cas où vous clonez un projet contenant des submodules
Après avoir cloné le projet, initilisez les submodules:
git submodule init
git submodule update
Pour récupérer les dernières mise à jour des sub-modules :
git submodule update --remote
Code minimale 1
Ce code permet d'utiliser les fonctions d'asservissement en vitesse des moteurs
#include "Module_deplacement_robot_differentiel/Deplacement.h"
#include <stdio.h>
void main(void){
// Initilisation
AsserMoteur_Init();
// Consignes
AsserMoteur_setConsigne_mm_s(MOTEUR_A, 100);
AsserMoteur_setConsigne_mm_s(MOTEUR_B, 100);
int step_ms = 1;
while(1){
sleep_ms(step_ms);
// Tâche cyclique
AsserMoteur_Gestion(step_ms);
}
}
Tandis que ce code permet d'utiliser les fonctions trajets / trajectoire avec différents mode d'évitement
#include "Module_deplacement_robot_differentiel/Deplacement.h"
#include <stdio.h>
void main(void)
{
stdio_init_all();
// Initialisation
AsserMoteur_Init();
Trajet_init();
// Pour l'exemple
int step_ms = 1;
enum etat_trajet_t etat_trajet = TRAJET_EN_COURS;
struct trajectoire_t ma_trajectoire;
Trajectoire_bezier(&ma_trajectoire,
0, 0,
250, 0,
0, 250,
250, 250);
while(1){
// Tâches cycliques
AsserMoteur_Gestion(step_ms);
Localisation_gestion();
// Gestion du trajet
if(etat_trajet == TRAJET_EN_COURS){
etat_trajet = Deplacement_parcourir_trajet(ma_trajectoire, step_ms, EVITEMENT_SANS_EVITEMENT);
}else{
AsserMoteurs_stop();
}
// Attente de 1 ms
sleep_ms(step_ms);
}
}