Go to file
2023-03-26 16:34:06 +02:00
.vscode Trajectoires avec contrôle de la vitesse 2023-02-19 17:56:45 +01:00
data Déplacement des graphs, compilation avec les modules QEI, mais non testé 2022-11-03 22:46:41 +01:00
doc Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00
graph Ajout des données 2022-10-29 15:52:42 +02:00
Teleplot_Layout Ajout des fonctions pour obtenir la vitesse des moteurs. 2023-03-01 20:51:04 +01:00
.gitignore Trajectoires avec contrôle de la vitesse 2023-02-19 17:56:45 +01:00
APDS_9960.c Début des tests avec l'APDS_9960 2022-12-22 22:35:49 +01:00
APDS_9960.h Début des tests avec l'APDS_9960 2022-12-22 22:35:49 +01:00
Asser_Moteurs.c Ajout des fonctions pour obtenir la vitesse des moteurs. 2023-03-01 20:51:04 +01:00
Asser_Moteurs.h Ajout des fonctions pour obtenir la vitesse des moteurs. 2023-03-01 20:51:04 +01:00
Asser_Position.c Le robot est capable d'avancer et de tourner avec précision. 2022-12-19 19:04:24 +01:00
Asser_Position.h Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
CMakeLists.txt Accostage OK 2023-03-18 17:59:15 +01:00
Commande_vitesse.c Accostage OK 2023-03-18 17:59:15 +01:00
Commande_vitesse.h Accostage OK 2023-03-18 17:59:15 +01:00
Geometrie_robot.h Début de l'algo pour attraper les cerises - ajout de la fonction de rotation autour d'un point. 2023-03-03 19:50:44 +01:00
Geometrie.h Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
gyro_ADXRS453.c Trajectoires avec contrôle de la vitesse 2023-02-19 17:56:45 +01:00
gyro_ADXRS453.h Initialisation de l'ADXRS453 : OK 2022-10-27 19:49:16 +02:00
gyro_data.h Utilisation de plusieurs gyroscopes 2022-10-16 10:26:44 +02:00
gyro_L3GD20H.c Initialisation de l'ADXRS453 : OK 2022-10-27 19:49:16 +02:00
gyro_L3GD20H.h Utilisation de plusieurs gyroscopes 2022-10-16 10:26:44 +02:00
gyro.c Trajectoires avec contrôle de la vitesse 2023-02-19 17:56:45 +01:00
gyro.h Le robot est capable d'avancer et de tourner avec précision. 2022-12-19 19:04:24 +01:00
Holonome2023.c Communication entre les 2 RPi Pico : fonctions prêtes à être intégrées ! 2023-03-16 23:27:08 +01:00
i2c_annexe.c Communication entre les 2 RPi Pico : fonctions prêtes à être intégrées ! 2023-03-16 23:27:08 +01:00
i2c_annexe.h Accostage OK 2023-03-18 17:59:15 +01:00
i2c_maitre.c Ajout des tests en interaction avec le Pico_Annex (porte et turbine) - Correction d'un soucis dans l'I2C 2023-03-11 21:29:30 +01:00
i2c_maitre.h Ajout des tests en interaction avec le Pico_Annex (porte et turbine) - Correction d'un soucis dans l'I2C 2023-03-11 21:29:30 +01:00
LICENSE Create LICENSE 2022-12-11 15:47:36 +01:00
Localisation.c Trajectoires avec contrôle de la vitesse 2023-02-19 17:56:45 +01:00
Localisation.h Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
Moteurs.c Trajectoires avec contrôle de la vitesse 2023-02-19 17:56:45 +01:00
Moteurs.h Trajectoires avec contrôle de la vitesse 2023-02-19 17:56:45 +01:00
pico_sdk_import.cmake Ajout fichier pour la compilation 2022-12-23 23:24:19 +01:00
QEI.c Ajout du fichier README 2022-12-11 15:39:30 +01:00
QEI.h Gestion des unités dans QEI directement 2022-11-30 21:14:47 +01:00
quadrature_encoder.pio Déplacement des graphs, compilation avec les modules QEI, mais non testé 2022-11-03 22:46:41 +01:00
Readme.md Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00
Robot_config.c Début des tests avec l'APDS_9960 2022-12-22 22:35:49 +01:00
Robot_config.h Début des tests avec l'APDS_9960 2022-12-22 22:35:49 +01:00
Servomoteur.c Acquisition avec le gyroscope + début code servomoteur (commande fonctionnelle mais interface à refaire) 2022-10-15 21:13:52 +02:00
Servomoteur.h Acquisition avec le gyroscope + début code servomoteur (commande fonctionnelle mais interface à refaire) 2022-10-15 21:13:52 +02:00
spi_nb.c Acquisition avec le gyroscope + début code servomoteur (commande fonctionnelle mais interface à refaire) 2022-10-15 21:13:52 +02:00
spi_nb.h Acquisition avec le gyroscope + début code servomoteur (commande fonctionnelle mais interface à refaire) 2022-10-15 21:13:52 +02:00
Strategie_prise_cerises.c Test accostage + longer bordure 2023-03-26 16:34:06 +02:00
Strategie_prise_cerises.h Test accostage + longer bordure 2023-03-26 16:34:06 +02:00
Strategie.h Test accostage + longer bordure 2023-03-26 16:34:06 +02:00
Temps.c Gyro globallement fonctionnel, mais la précision laisse à désirer 2022-09-26 21:54:06 +02:00
Temps.h Gyro globallement fonctionnel, mais la précision laisse à désirer 2022-09-26 21:54:06 +02:00
Test_strategie.c Test accostage + longer bordure 2023-03-26 16:34:06 +02:00
Test_strategie.h Test accostage + longer bordure 2023-03-26 16:34:06 +02:00
Test.c Test accostage + longer bordure 2023-03-26 16:34:06 +02:00
Test.h Accostage OK 2023-03-18 17:59:15 +01:00
Trajectoire_bezier.c Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
Trajectoire_bezier.h Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
Trajectoire_circulaire.c Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
Trajectoire_circulaire.h Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
Trajectoire_droite.c Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
Trajectoire_droite.h Gestion des déplacements suivants des trajectoires avec un contrôle en vitesse. 2022-12-10 15:29:04 +01:00
Trajectoire_rotation.c Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00
Trajectoire_rotation.h Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00
Trajectoire.c Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00
Trajectoire.h Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00
Trajet.c Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00
Trajet.h Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires 2023-03-03 16:37:36 +01:00

Code de déplacement du robot holonome 2023

Ce dépôt contient de code le déplacement du robot holonome de l'équipe Poivron Robotique. Ce robot a pour ambition de participer à la coupe de France de Robotique en 2023.

Le but est de présenter un code assurant toutes les fonctions de déplacement du robot, allant de la commande PWM des moteurs jusqu'au suivi d'une trajectoire (droite, portion de cercle, courbe de Bézier) en passant par le contrôle de l'accélération et de la décélération.

Ce code est conçu pour s'exécuter sur un Raspberry Pi Pico.

Nous en profitons pour proposer également les fonctions bas niveau développées pour le Raspberry Pi Pico.

Architecture du programme

Voici un bref paragraphe explicatif pour chaque bloc fonctionnel.

Moteurs

Initialise les modules PWM et propose les fonctions pour les piloter.

QEI

Décode les signaux renvoyés par les codeurs et les convertit en distance parcoure par les roues, en millimètres.

L'interprétation des signaux se fait grâce aux PIOs et à l'exemple fourni dans le SDK.

SPI

Tentative de créer des fonctions non bloquantes pour le SPI. Mais vu la vitesse du SPI, l'intérêt est limité. Une partie du code n'a pas été éprouvé.

Gyro ADXRS453

Initialise le Gyroscope ADXRS453. Décode les données fournies par le gyroscope et les convertit en radian/seconde. Les biais éventuels ne sont pas compensés.

Gyro

Compensation du biais du gyroscope et intégration de la vitesse pour obtenir l'orientation.

Localisation

Utilisation des équations définies dans cette l'étude pour obtenir la position du robot à partir du déplacement mesuré de ses roues.

Devrait à terme aussi utiliser les valeurs du gyroscope pour gagner en précision.

Asservissement des moteurs

À partir d'une consigne de vitesse pour chaque moteur, utilisation d'un correcteur proportionnel et intégrale (PI) pour déterminer la commande des moteurs.

Commande de vitesse

À partir de la rotation désirée et des vitesses X et Y dans le référentiel du robot, détermine la consigne de vitesse pour chaque moteur grâce aux lois de commande.

Asservissement en position

À partir d'une consigne de position, détermine la rotation désirée et les vitesses X et Y dans le référentiel du robot. Ceci en deux étapes :

  1. Asservissement avec un simple gain proportionnel
  2. Projection des vitesses X et Y dans le référentiel du robot.

Gestion des trajets

Cette fonction permet de parcourir une trajectoire en tenant compte des contraintes de vitesse. Elle calcule la vitesse désirée et l'avancement désiré du robot sur la trajectoire (en millimètre). Elle délègue ensuite aux fonctions des trajectoires le calcul du point consigne qui sera envoyé à l'asservissement en position.

  1. Calcul de la vitesse
    • Prise en compte de l'accélération maximale
    • Prise en compte de la décélération pour s'arrêter. Voir cet article.
  2. Calcul de l'avancement sur la trajectoire.
  3. Obtention de la nouvelle consigne de position.

Pour se déplacer sur une trajectoire, cette fonction utilise les outils de gestion des trajectoires définis dans les fichiers trajectoire*.

Fonctions bas niveau

I2C Maître, non bloquant

Le fichier i2c_maitre.c propose une implémentation non-bloquante de l'i2c. L'utilisation s'effectue ainsi :

  • La fonction i2c_gestion doit être appelée régulièrement.
  • La fonction i2c_transmission (ou une fonction englobant celle-ci, telle que i2c_lire_registre_nb) doit être appelée jusqu'à ce qu'elle renvoie I2C_SUCCES.

Pour un exemple concret lisant une valeur dans une mémoire i2c, voir test_i2c_lecture_pico_annex_nb2 de Test.c