Awake Challenge 2025 — Véhicule autonome 1/10

Compétition nationale, perception RGB-D et ultrasons, exécution bas niveau sur Arduino

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.

Prototype du véhicule Awake

Objectif

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).

Architecture

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.

Schéma d'architecture Awake

Perception RGB-D

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.

Décision (Raspberry Pi)

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.

Exécution (Arduino)

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.

Ultrasons

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.

Technologies et outils utilisés

  • Langages : Python 3, C++ (Arduino)
  • Vision : pyrealsense2, OpenCV (HSV, masques, contours)
  • Calcul : NumPy (cartes de profondeur, agrégations par zone)
  • Communication : pyserial, port USB série 9600 bauds
  • Calculateurs : Raspberry Pi 5, Arduino Uno
  • Capteurs : Intel RealSense RGB-D, 2× HC-SR04
  • Actionneurs : 2× moteurs DC avec ponts, 1× servomoteur de direction
  • CAO : conception mécanique 1/10, profilés aluminium 15×15 mm

Choix techniques et solutions retenues

  • Raspberry Pi + Arduino : le Pi absorbe le coût logiciel de la vision 3D et du suivi de parcours tandis que l’Arduino assure PWM stable et lecture ultrasons avec latence maîtrisée.
  • Step-up 24 V : les moteurs du châssis sont alimentés sous une tension supérieure à la LiPo 3S, d’où l’élévation de tension côté alimentation avant les drivers.
  • Step-down 5 V / 5,1 V : rails distincts pour le servo et pour le Pi afin de limiter les chutes de tension et le bruit sur la logique.
  • RealSense : accès direct à la profondeur alignée sur la couleur pour la même ROI que le comptage de tours couleur.
  • Ultrasons en secours : correction qui court-circuite temporairement la décision caméra lorsqu’un obstacle est détecté très près sur un côté.

Conception mécanique

Propulsion et châssis

Le 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é.

Vue CAO propulsion et engrenages coniques

Fixation des roues arrière

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.

Montage roue arrière et palier

Direction et gabarit

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.

Mécanisme de direction et servo

Conception électronique

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.

Schéma électronique Awake

Navigation autonome

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.

Analyse de profondeur et zones gauche centre droite

Contributions

  • Participation à la conception mécanique complète (propulsion, direction, intégration capteurs) dans le cadre du groupe.
  • Intégration logicielle Python RealSense, logique de zones, filtrage ultrasons et comptage de tours dans coderasp.py.
  • Firmware Arduino : lecture HC-SR04, protocole série, asservissement du servo et commande des moteurs.
  • Schéma et câblage électronique cohérents avec la contrainte multi-tensions (LiPo, boost 24 V, bucks 5 V / 5,1 V).

Métriques clés

Vision

Profondeur et couleur 640×480 à 30 FPS (configuration pipeline RealSense du code).

Série

Lien Pi ↔ Arduino 9600 bauds (serial.Serial(..., 9600)).

Directions servo

Consignes discrètes 60°, 97°, 130° dans coderasp.py.

Ultrasons

Seuil de correction 0,1 m et envoi périodique des distances ultrasons de l’Arduino vers le Pi.

Course

Arrêt automatique après 5 tours détectés sur bande couleur.

Limites actuelles et niveau de validation

Validé

  • Boucle navigation profondeur + secours ultrasons sur banc et piste
  • Chaîne Pi → série → Arduino pour direction et traction
  • Comptage de tours et arrêt moteurs sur scénario de course

En cours d’amélioration

  • Robustesse aux variations d’éclairage et de revêtement
  • Réglage fin des seuils de profondeur et des temporisations de tour
  • Documentation vidéo pour la vitrine en ligne

Écart réglementaire

  • Le règlement visait au minimum trois ultrasons le véhicule en intègre deux : choix assumé côté intégration, à mettre en perspective lors d’une évaluation stricte du cahier des charges.