Construction de Véhicules Autonomes 2

Construction de Véhicules Autonomes 2

Partie 2 – Robots évolués

 

Dans cette seconde partie, nous allons construire des modèles plus évolués qui peuvent naviguer de façon plus autonome.  Afin d’assurer ce niveau d’autonomie, nous allons intégrer plus de puissance de calculs sur les véhicules.

 

Un Véhicule contrôlé par Raspberry Pi Zéro :

Bien que ce petit véhicule ne soit pas réellement autonome, nous vous le présentons afin de démontrer les méthodes de fabrication et de contrôle pour des ordinateurs embarqués (Embedded Computer).

 

Fabrication du châssis avec impression 3D.

La base de ce projet est inspirée par le projet JETBOT de NVIDIA. Les fichiers STL pour l’impression3d sont disponibles sur le site suivant : https://github.com/NVIDIA-AI-IOT/jetbot.

 

Les instructions détaillées pour l’assemblage sont sur le site ainsi qu’une liste de composantes nécessaires.

ELECTROMIKE offre toutes les composantes nécessaires pour l’assemblage du robot et nous avons même les imprimantes 3D pour la fabrication du châssis !

 

On retrouve sur la partie supérieure le RaspBerry Pi Zero qui est fixé avec des attaches en nylon 3mm ainsi que la caméra, fixée sur une base imprimée avec un angle négatif et qui est connectée utilisant un câble plat de 10 cm.

Au niveau intermédiaire, nous avons 2 piles 18650 NiMh qui alimentent un régulateur (StepDown) de 5 Volts ainsi qu’un interrupteur à glissière (Sliding).

Robot évolué 1

Au-dessous, on retrouve les moteurs, la roue libre de type balle, ainsi que le contrôleur Adafruit Feather.

Robot évolué 2

Le code pour le contrôle à partir d’une page web est inspiré du véhicule WaveShare alphabot2 robot que l’on retrouve ici:  https://www.waveshare.com/wiki/AlphaBot2-Pi

 

Nous avons procédé à quelques adaptations ainsi que la modification du pilote pour le contrôleur du moteur qui utilise la librairie de AdaFruit. Vous retrouverez le code modifié sur le Github d’ELECTROMIKE :

https://github.com/Electromike1257Charest

 

 

 

Le JETBOT de Nvidia:

Tel que décrit dans le projet précédent, le véhicule autonome JETBOT de Nvidia sert à naviguer en utilisant un Réseau neuronal qui a été entrainé pour reconnaitre les obstacles. La stratégie de navigation reste toutefois simpliste et est équivalente à la méthode expliquée dans la partie 1 du blogue des Véhicules autonomes.

Robot Évolué 3

Dans notre implémentation, nous avons substitué la caméra RaspBerry Pi pour une Logitech C920 USB pour des raisons de stabilité du pilote. En effet, le code de la caméra de type CSI (Interface Numérique à deux lignes) s’est avérée instable sur le Nvidia NANO.

Robot évolué 4

Finalement, nous avons modifié le code pour faire fonctionner le véhicule directement à partir de Python au lieu de l’environnement proposé de Jupiter NoteBook.  Voici notre script modifié : 

https://github.com/Electromike1257Charest

 

 

Véhicule autonome avec système de localisation - SLAM

Voici un projet avancé qui consiste à utiliser une caméra Kinect pour extraire des références visuelles afin de créer une carte de son environnement et de naviguer précisément de façon commandée ou de façon autonome.

Ce type de contrôle est appelé ''SLAM'' pour "simultaneous localization and mapping" ce qui peut se traduire par :   Cartographie, localisation et planification simultanées. Pour être en mesure de naviguer dans des endroits inconnus et non structurés, un robot doit être en mesure de cartographier l’environnement afin de s'y localiser. La charge de calcul du SLAM est dépendante de la grandeur de la carte, c’est-à-dire plus la carte est grande, plus de temps est requis pour mettre à jour la carte. Puisqu’un robot a une puissance de calcul limitée, la capacité de traiter ‘en ligne’ la navigation autonome du robot tout en faisant le SLAM est donc limitée par la taille de l’environnement.

Le système est composé d’une caméra Kinect qui offre un excellent rapport qualité prix, car on peut s’en procurer sur Internet à des prix variant autour de 50$. Le microcontrôleur est un Teensy LC qui offre une puissance supérieure à l’Arduino AVR et à un prix abordable. Enfin pour ce qui est du système de haut niveau qui opère sous Linux et ROS, vous pouvez utiliser un RaspBerry Pi 4. Dans le présent blogue, nous avons utilisé un Dell ChromeBox, car nous avions cette unité en main et que la puissance est assez attrayante.

robot évolué 5

 

Le véhicule :

Ce projet est totalement DIY, le châssis est fabriqué en contreplaqué (plywood) et sa forme ressemble au « smart car » de base que vous avons présentée à la partie 1.

 

Les moteurs sont de type brushed DC avec engrenage planétaire avec un ratio de 100:1.  Des encodeurs magnétiques à effet hall sont attachés sur l’arbre principal du moteur , donnant ainsi 4 impulsions pour chaque tour du moteur, et par conséquent, 400 impulsions par tours de roue.

Robot évolué 6

Le contrôle de base du véhicule est assuré par un microcontrôleur Teensy LC qui accomplit les tâches suivantes :

  • Lecture des encodeurs
  • Lecture de l’unité Inertielle (IMU)
  • Contrôle des moteurs
  • Contrôle de l’accélération et décélération à l’aide d'une boucle de rétroaction de type PID
  • Interfaces d’autres capteurs (au besoin)
  • Conversion des commandes de direction haut-niveau (ROS) en commandes moteurs

 

robot évolué 7

 

Le contrôle de Haut Niveau du véhicule est assuré par un Dell ChromeBox  qui a été rechargé en UBUNTU 14 LTS.

Le processeur est un Intel I7 de troisième génération avec 4 Go de mémoire DDR3 et 16 Go de disque eMMc  et il est alimenté par un régulateur (StepUp) qui augmente le voltage de la Pile LiPo 4 S de 16 à 19.5 Volts. La localisation arrière du système offre la possibilité de brancher facilement un écran et clavier souris ainsi que l’Ethernet.

 

La caméra Kinect est assise sur un plateau surélevé et fixée à l’aide d’attaches de plastique pour montage et démontage rapide. Elle se branche directement dans le port USB3 et est alimentée par un régulateur (StepDown) de 12 Volts.

Robot Évolué 8

 

Le code

 

Pour la partie Teensy , le code provient principalement de ce robot:  https://github.com/linorobot/linorobot

Vous pourrez apprécier la grande diversité de montage et des options offertes pour offrir un contrôle maximal.

Nous recommandons de lire l’excellent wiki en débutant ici: https://github.com/linorobot/linorobot/wiki/1.-Getting-Started

 

 

Pour la partie SLAM, en ayant une puissance appréciable sur le robot, nous avons la possibilité d’expérimenter avec plusieurs configurations :

 

 

Robot Évolué 9

Avec un tel système, vous serez en mesure de concevoir un véhicule totalement autonome qui peut également créer des stratégies de navigation avec évitement de haut niveau. Il va de soi que ce type de configuration demande une bonne expertise de la part de l’expérimentateur et une solide connaissance des environnements de développement Arduino, Linux, C++, Python et ROS.