Étape 5: Objet évitement
Pour conduire de façon autonome, le véhicule doit être en mesure de rechercher et éviter les obstacles qu’il rencontre comme il pousse. J’ai gérer cela avec un capteur à ultrasons « ping » et une logique de l’ordinateur.
Le capteur est un capteur ultrasonique de base. J’ai que combiné avec l’Arduino NewPing bibliothèque, qui est une grande amélioration sur la bibliothèque de Ping originale (entre autres choses, il suffit d’une seule broche partagée car les deux envoyer et recevoir).
Le capteur est assez basique et a un champ de vision très étroit. Pour ce projet, je suis seulement en utilisant un seul capteur avec une position fixe (pas une implémentation de type balayage « radar »).
J’ai monté le capteur sur le pare-chocs avant du véhicule avec quelques Surgu. C’était ma première fois l’utilisation du produit, et il fonctionne très bien. J’ai seulement utilisé un paquet unique de 3,5 g, et cela suffisait à cet effet.
La sonde a tendance à retourner l’impair occasionnel ou valeur aléatoire... ne sais pas pourquoi. Dans son excellente série d’articles, Miguel Grinberg propose une solution simple : utiliser une moyenne mobile. J’ai adopté sa classe MovingAverage au projet avec de bons résultats.
La routine checkSonar() prend continuellement de nouvelles mesures, ajoutant chaque nouvelle mesure le déplacement moyen ; la moyenne est ensuite utilisée pour la logique du programme.
Si un objet est détecté, la logique suivante est appliquée :
- Plus lentement
- Si le véhicule s’apprête à droit (ne tourne ne pas), tournez dans le sens le plus proche de notre point de cheminement (techniquement, plus proche de la voie à notre point de cheminement).
- Si le véhicule tourne déjà, puis tournez dans le sens inverse pour tenter d’éviter l’objet.
- Si nous parvenons à une distance définissable (TOO_CLOSE) de l’objet, arrêter, sauvegarde, puis réessayez.
Dès que nous aurons un chemin clair à venir, la navigation normale reprend.