Présentation
Le firmware Swarm Robot est un système embarqué complet écrit en C pour des robots mobiles autonomes fonctionnant en essaim. Conçu pour des microcontrôleurs AVR 8 bits, il fournit une plateforme robotique complète : algorithmes de contrôle avancés, fusion de capteurs et coordination multi-robots. Développé dans le cadre d'un projet de fin d'études en mécatronique, c'est un système de contrôle robotique complet, optimisé pour des ressources très limitées.
Architecture technique
Une conception modulaire
Le firmware repose sur une architecture très modulaire aux composants clairement séparés, facile à maintenir, à tester et à étendre. Chaque sous-système est un module indépendant aux interfaces bien définies, ce qui favorise la réutilisation du code et la fiabilité.
Composants principaux
Couche d'abstraction matérielle
- Interface ADC (
__adc__.h/.c) : conversion analogique-numérique multicanal à résolution configurable - Commande PWM (
__pwm__.h/.c) : génération PWM matérielle pour les moteurs et les servos - Gestion des timers : trois modules dédiés à différentes fonctions :
- Timer 0 (
__timer0__.h/.c) : déroulement du programme et cadencement système - Timer 1 (
__timer1__.h/.c) : cadencement de la boucle de contrôle et opérations temps réel - Timer 2 (
__timer2__.h/.c) : cadencement des communications et protocoles
- Timer 0 (
- Communication USART (
__usart__.h/.c) : liaison série avec aide au débogage - Interruptions (
__INT_0_1__.h/.c) : interruptions externes pour les retours des codeurs
Architecture de contrôle
- Régulateur PID (
_pid_.h/.c) : PID discret avec anti-windup et gestion de la saturation - Odométrie (
__odometry__.h/.c) : estimation de pose en temps réel par les codeurs et la fusion de capteurs - Cinématique (
__kinematics__.h/.c) : cinématique directe et inverse pour robots différentiels - Commande des moteurs CC (
__dc_control__.h/.c) : asservissement en vitesse et en position
Fonctions de contrôle avancées
Fusion de capteurs et localisation
L'odométrie combine plusieurs sources de données :
// Potentiometer-based angular velocity estimation with median filtering
void _pmB_current_calc(void) {
if(_sample_counter > __PM_SAMPLE_COUNT) {
_sample_counter = 0;
_insertion_sort(reads, __PM_SAMPLE_COUNT);
_pmB_current = reads[(__PM_SAMPLE_COUNT >> 1)];
_omega_pmB = __PM_SLOPE * (float)(_pmB_current - _pmB_prev);
}
_pmB_prev = _pmB_current;
}
Filtrage robuste
- Filtre médian : rejet des valeurs aberrantes des capteurs
- Moyenne glissante : réduction du bruit sur les signaux continus
- Estimation de type Kalman : prédiction et correction de la pose
Contrôle en temps réel
Le système suit une architecture multi-fréquence :
- Boucle rapide : commande des moteurs et surveillance de sécurité à 1 kHz
- Estimation intermédiaire : fusion de capteurs et localisation à 100 Hz
- Communication lente : échanges entre robots et télémétrie à 10 Hz
Intégration à la plateforme robotique
Cinématique différentielle
Le module de cinématique fournit les modèles mathématiques complets des robots différentiels :
struct point {
float x; ///< X coordinate in world frame
float y; ///< Y coordinate in world frame
};
struct _theta {
float theta; ///< Robot orientation in radians
};
// Robot geometric parameters
#define L 0.06 // Wheelbase (meters)
#define r 0.02 // Wheel radius (meters)
#define R_over_L 0.333 // Turning ratio
Intégration multi-capteurs
- Codeurs incrémentaux : mesure haute résolution de la rotation des roues
- Potentiomètres : position absolue pour la tolérance aux pannes
- Centrale inertielle : prise en charge d'une IMU (extension prévue)
- Capteurs de proximité : détection et évitement d'obstacles
Communication et coordination de l'essaim
Protocole série
Le module USART assure une communication robuste avec les systèmes externes :
- Bidirectionnelle : full duplex avec contrôle de flux
- Tampons : buffers circulaires pour une transmission fiable
- Détection d'erreurs : CRC et sommes de contrôle
- Débogage : printf/scanf intégrés pour le développement
Formatage des données et télémétrie
Des fonctions de formatage dédiées rendent la transmission efficace :
char * _float_to_printable(float input) {
int16_t a = input;
uint16_t b = (float)((input - (float)a) * 10000.0);
sprintf(out, "%d,%u", a, b);
return out;
}
Comportements d'essaim
- Contrôle distribué : algorithmes de décision décentralisés
- Contrôle de formation : maintien de motifs géométriques
- Évitement des collisions : en temps réel, avec les obstacles et entre robots
- Coordination des tâches : protocoles d'exécution collaborative
Développement et déploiement
Chaîne de compilation
- Atmel Studio 7 : prise en charge complète de l'IDE et du débogage
- Makefile : compilation en ligne de commande pour l'intégration continue
- Multiplateforme : développement sous Windows et Linux
Matériel requis
- Microcontrôleur : ATmega328P (compatible Arduino)
- Fréquence d'horloge : quartz 16 MHz
- Mémoire : 32 Ko de Flash, 2 Ko de SRAM, 1 Ko d'EEPROM
- Périphériques : 2 timers, 1 USART, 6 canaux ADC, 20 broches GPIO
Performances temps réel
Le firmware est optimisé pour du matériel très contraint :
- Architecture à interruptions : latence minimale pour les opérations critiques
- Arithmétique en virgule fixe : calculs optimisés sans unité flottante
- Optimisation mémoire : usage efficace de la SRAM et de la Flash
- Gestion de l'énergie : modes basse consommation pour un fonctionnement sur batterie
Applications de recherche
Recherche en robotique en essaim
Ce firmware sert de base à plusieurs thèmes de recherche :
- Comportements collectifs : comportements émergents à partir de règles individuelles simples
- Perception distribuée : surveillance collaborative de l'environnement
- Vol en formation : déplacements coordonnés dans des environnements complexes
- Allocation de tâches : répartition dynamique des tâches dans l'essaim
Plateforme pédagogique
Sa conception modulaire et sa documentation en font un support idéal pour :
- l'enseignement des systèmes embarqués : programmation temps réel ;
- l'automatique appliquée : mise en œuvre concrète d'algorithmes de contrôle ;
- les cursus de robotique : pratique sur un système robotique complet ;
- la formation à la recherche : base de projets de recherche en master.
Performances
Système de contrôle
- Fréquence de la boucle : jusqu'à 1 kHz pour les moteurs
- Précision en position : ±2 mm sur des trajectoires d'un mètre
- Précision angulaire : ±0,5° en rotation
- Temps de réponse : < 10 ms pour un arrêt d'urgence
Communication
- Débit série : jusqu'à 57,6 kbit/s en communication fiable
- Perte de paquets : < 0,1 % en conditions normales
- Latence : < 5 ms entre robots
- Portée : jusqu'à 100 m avec des émetteurs-récepteurs adaptés
Évolutions prévues
Extensions
- Intégration ROS 2 : passerelle vers Robot Operating System 2
- Réseau maillé sans fil : meilleure communication multi-robots
- Apprentissage automatique : algorithmes embarqués pour un comportement adaptatif
- Vision : intégration d'un traitement d'image basse consommation
Passage à l'échelle
- Contrôle hiérarchique : déploiement d'essaims de grande taille
- Cloud : supervision et contrôle à distance
- Mises à jour à distance : mise à jour du firmware sans fil
- Matériel modulaire : modules capteurs plug-and-play
Ce firmware est une plateforme robotique embarquée complète : il montre une mise en œuvre avancée de l'automatique sur du matériel contraint, tout en restant assez flexible pour la recherche comme pour l'enseignement.
