Module_deplacement_robot_di.../Readme.md
2026-07-09 21:36:02 +02:00

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);
    }
    
}