Submodule Déplacement pour le RP2040 ===================================== Ceci est un submodule git pour intégrer facilement le support des servomoteurs à 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 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 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); } }