Projet de voiture autonome à l’échelle 1/10 pour l’Awake Challenge 2025, compétition nationale de robotique. Le véhicule enjambe une piste intérieure avec navigation par carte de profondeur (Intel RealSense), deux ultrasons latéraux pour des corrections de proximité et comptage de tours par détection de bande couleur. Le groupe a terminé 2e du classement.
Enchaîner tours de piste de façon autonome en restant centré grâce à la vision de profondeur, éviter les obstacles rapprochés que la caméra peut mal voir, et arrêter proprement après un nombre de passages détectés sur la ligne de course. L’architecture sépare la décision (Raspberry Pi 5, Python) et l’exécution temps réel (Arduino Uno, PWM servo et moteurs).
L’orchestration est portée par coderasp.py sur le Raspberry Pi, qui lit la RealSense, applique la logique
de navigation et envoie des angles et commandes moteur à l’Arduino via USB série pendant que
codearduino.ino pilote servo et ponts en PWM et remonte les distances ultrasons.
Flux profondeur et couleur RealSense (640×480, 30 FPS). La profondeur alimente la détection
d’obstacles par zones dans une ROI basse de l’image.
Choix de direction à partir des distances minimales par zone (gauche, centre, droite), correction prioritaire si un ultrason signale un obstacle sous le seuil, et comptage de tours par segmentation HSV sur l’image couleur.
Réception des angles de direction sur la liaison série, rampe PWM pour les moteurs DC (START,
STOP, VITESSE:<pwm>), commande du servo de direction sur la broche prévue.
Deux HC-SR04 lus côté Arduino et émis vers le Pi sous la forme ULTRA_G: et ULTRA_D: pour
compléter la vision en champ proche.
9600 baudsLe véhicule est en propulsion arrière avec deux roues motrices indépendantes, chacune entraînée par un moteur dédié. La transmission passe par un train d’engrenages coniques pour transférer le couple jusqu’aux essieux arrière. Le châssis repose sur des profilés aluminium 15×15 mm pour un compromis masse et rigidité.
Les roues arrière sont montées sur des paliers fixés au châssis. Un axe métallique traverse chaque palier et porte la roue ainsi que la transmission par engrenage vissé sur l’axe.
Une garde au sol d’environ 10 mm et des pneus polyvalents permettent de rouler sur revêtements lisses ou texturés. La plage de vitesse visée est d’environ 5 à 20 km/h selon la consigne moteur. La direction utilise un servomoteur à couple élevé relié au moyeu de la roue avant gauche par une tige filetée et une biellette, pour un réglage simple et une maintenance rapide.
L’alimentation principale est une batterie LiPo 3S 5200 mAh (tension nominale 11,1 V, plage utile typique environ 11 à 12,5 V). Deux cartes principales dialoguent par USB : un Raspberry Pi 5 pour la perception et la navigation, une Arduino Uno pour l’acquisition ultrasons et la commande des actionneurs. Les moteurs requièrent une tension élevée (schéma 24 V côté boost) par rapport à la batterie, d’où un convertisseur step-up. Deux step-down fournissent typiquement le 5 V pour le servo et le 5,1 V pour le Pi. La caméra RGB-D est branchée sur le Raspberry Pi. Les deux HC-SR04 sont câblés sur l’Arduino.
La navigation combine profondeur (décision principale) et ultrasons (sécurité de proximité). Le programme Python acquiert la carte de profondeur, extrait une ROI dans la partie basse de l’image puis la divise en trois bandes (gauche, centre, droite). Pour chaque bande on prend la distance minimale sur les pixels valides si le centre est suffisamment libre, la voiture vise tout droit sinon on choisit le côté le plus dégagé, et si tout est bloqué on privilégie la zone avec l’obstacle le plus lointain. Les consignes de braquage envoyées à l’Arduino sont 60°, 97° et 130° selon la décision. Si un ultrason mesure un obstacle sous le seuil de 0,1 m dans le code, la commande correspondante (tourner à droite ou à gauche) remplace temporairement la sortie caméra.
Le comptage de tours utilise l’image couleur : détection HSV d’une bande au sol, machine à états avec temporisations
pour éviter les doubles comptages, arrêt des moteurs après cinq tours validés et envoi de STOP à l’Arduino.
coderasp.py.Profondeur et couleur 640×480 à 30 FPS (configuration pipeline RealSense du code).
Lien Pi ↔ Arduino 9600 bauds (serial.Serial(..., 9600)).
Consignes discrètes 60°, 97°, 130° dans coderasp.py.
Seuil de correction 0,1 m et envoi périodique des distances ultrasons de l’Arduino vers le Pi.
Arrêt automatique après 5 tours détectés sur bande couleur.