147 lines
3.8 KiB
Markdown
147 lines
3.8 KiB
Markdown
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);
|
|
}
|
|
|
|
} |