Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Autonomous Driving AI for Donkey Car Garbage Collector

Utiliser un SSD TensorFlow MobileNetV2 DNN sur la caméra Raspberry Pi plus Pi pour construire une voiture autonome capable de détecter des objets.

Histoire

Ce projet montrera comment transformer une voiture RC alimentée (Raspberry Pi + Pi Camera) en une voiture capable de détecter des objets et de conduire de manière autonome. Pour ce faire, nous allons déployer deux réseaux de neurones profonds. L'un pour la détection d'objets et l'autre pour la conduite autonome utilisant l'inférence pour la direction et l'accélérateur. Un RPi 3 sert d'ordinateur du véhicule. En raison des ressources limitées du RPi, un seul des réseaux peut fonctionner à la fois.

L'idée est d'entraîner le réseau de neurones à identifier les poubelles afin que la voiture puisse les ramasser de manière autonome.


identification de la voiture et de l'ordinateur portable

Le projet se compose de deux parties. Dans la première partie, le plan consiste à utiliser un réseau convolutif de taille modérée pour reconnaître les objets dans le flux vidéo d'entrée de la caméra Pi. TensorFlow sera utilisé pour déployer le modèle CNN et OpenCV sera utilisé pour gérer le flux vidéo de la caméra Pi.

Dans la deuxième partie, nous allons utiliser le clonage comportemental pour faire naviguer la voiture de manière autonome. La voiture modifiée sera également complétée par des capteurs supplémentaires tels qu'un capteur de distance à ultrasons, un GPS et un IMU 6-DOF, ainsi que des fonctionnalités de télémétrie supplémentaires.

Présentation

En 2017 (il y a un an), Google a publié MobileNet, et plus tôt cette année MobileNetV2. Ces réseaux sont optimisés sur mesure pour fonctionner sur des appareils embarqués comme les smartphones. Par coïncidence, le MPU utilisé sur RPi 3 entre dans cette catégorie car il peut fonctionner sous Linux ou Android.

Le premier problème que l'on rencontre est la RAM et la capacité de calcul limitées du Raspberry Pi 3. Même s'il s'agit d'un MPU quadricœur, il n'est toujours pas suffisant pour traiter des fichiers de poids volumineux nécessaires à YOLO (You Only Look Once) type réseaux.

La première solution qui vient à l'esprit est d'envoyer l'image acquise via la caméra Pi via WIFI vers un PC externe et d'y faire l'étape d'inférence d'objet, puis d'envoyer des commandes à la voiture à âne. Essentiellement, nous devons contacter le vaisseau-mère à chaque étape. Ceci est inefficace pour ne pas dire peu pratique dans les scénarios où la communication avec un ordinateur portable externe n'est pas possible.

J'ai initialement testé un réseau VGG16 qui était relativement précis lors de la détection des poubelles. Cependant, il ne pouvait pas fonctionner sur le RPi car les poids seuls étaient d'environ 350 Mo ! Pour tester le réseau VGG, reportez-vous au code joint à la fin avec des images similaires en entrée.

Problème :

python KerasVGG_test.py

Donc, pour résoudre le problème des poids énormes, nous allons exécuter tous les modèles sur le RPi en utilisant des réseaux plus fins. Plus précisément, nous allons utiliser le CNN basé sur un détecteur de tir unique MobileNetV2. Il s'agit d'un DNN qui a été optimisé pour avoir des poids (relativement) très faibles.

La technique est appelée apprentissage par transfert puisque nous utilisons un réseau de poids pré-entraîné.

Avant de nous plonger dans le logiciel, nous devons apporter quelques modifications matérielles.

Matériel

Une voiture Magnet a été utilisée pour le projet Donkey Car. Magnet est une voiture RC (télécommandée) qui fonctionne à l'aide d'une radio multicanaux de 2,4 GHz. Pour transformer l'aimant en voiture d'âne, il y a quelques étapes à suivre.

1. Démontage

Enlevez d'abord le top-cover en retirant les clips et les deux vis à l'arrière. Vous trouverez une cage avec deux chauffeurs. Retirez-le également, puis retirez la cage supérieure extérieure. Vous avez maintenant accès aux circuits de la voiture. Du haut une fois peut voir le récepteur, l'ESC (contrôleur de vitesse électronique) et le servo.

Un DonkeyCar nu

Le récepteur est un récepteur à 4 canaux avec un circuit B/C (élimination de la batterie). Chaque canal utilise un connecteur à 3 fils. Les canaux CH3 et CH4 ne sont pas utilisés. L'ESC prend la batterie comme entrée, l'interrupteur d'alimentation et l'entrée du récepteur canal 1. Le servo est connecté au canal 0 du récepteur. Le servo est utilisé pour la direction. L'angle de braquage peut être ajusté manuellement si vous conduisez via un joystick ou il doit être calibré.

2. Montez les adaptateurs

Deux adaptateurs en plastique imprimés en 3D sont utilisés, après avoir retiré les deux vis et le dessus du corps. Vous devez visser les deux adaptateurs à la place des clips existants en utilisant les mêmes vis. Après avoir remplacé les deux clips par les deux adaptateurs imprimés en 3D, nous pouvons maintenant monter la plaque supérieure en bois de la voiture Donkey.

Adaptateurs qui remplacent les longs clips

Vissez ensuite la poignée de la caméra sur la plaque de base. Placez ensuite les pièces filetées en plastique sur chaque trou. Ceux-ci sont utilisés pour fixer le Raspberry Pi et le servo-contrôleur en place.

3. Servocontrôleur et RPi

Montez le RPi et le servocontrôleur sur la plaque en bois. J'ai fini par utiliser des attaches pour sécuriser le RPi car je ne voulais pas mettre de vis métallique près de l'antenne. Après avoir vissé le servocontrôleur, connectez les broches du bus I2C du RPi au servocontrôleur. Ensuite, prenez un petit couteau et coupez les attaches qui maintiennent ensemble les fils de l'ESC et du servo à 3 broches.

Lors de la connexion au servo-contrôleur externe, les deux connexions au récepteur doivent être déconnectées de celui-ci et connectées aux canaux 0 et 1 du servo-contrôleur que nous monterons plus tard sur le dessus de DonkeyCar- assiette.

4. Assiette en bois

Montez la plaque en bois sur les adaptateurs. Utilisez maintenant les clips pour fixer la plaque DonkeyCar aux adaptateurs Magnet Chassis.

Montez la plaque de voiture Donkey sur le dessus et utilisez un câble USB court pour connecter la batterie USB au RPi. Les câbles d'accélérateur et de direction dépasseront de l'ouverture de la plaque et se connecteront aux canaux 0 et 1 du servo-contrôleur monté sur la plaque de la voiture Donkey.

5. Capteurs supplémentaires

Le principal problème avec la configuration standard est qu'il n'y a pas de capteur utilisé pour mesurer la vitesse ou la distance aux obstacles. J'ai ajouté un IMU 6DOF MPU6050 qui permet au RPi de mesurer l'accélération et les virages 3D, Ensuite j'ai ajouté un GPS au port série et également un capteur HCSR04 pour la mesure de distance. Le HCSR04 fonctionne cependant via 5V et a besoin d'un levier de niveau.

Ceci termine la phase matérielle de l'unité. La Donkey Car a été entièrement transformée en véhicule à 4 roues équipé de :

a) Caméra monoculaire grand angle

b) Servocontrôleur.

c) Capteur IMU 6-DOF

d) GPS

e) Capteur de distance

Tous les capteurs supplémentaires seront horodatés lors de l'acquisition et utilisés pour augmenter les vecteurs d'entraînement pour le réseau de neurones profonds.

Pour prendre en charge le capteur supplémentaire, il faut modifier le script manage.py pour ajouter cette fonctionnalité.

Pour utiliser l'IMU, j'ai d'abord essayé une bibliothèque Python pour FXOS8700 sur Debian Stretch. Cela n'a pas fonctionné immédiatement en raison du bug de démarrage répété du RPi, j'ai donc fini par utiliser un MPU6050 qui est également livré avec un gyroscope.

Pour tester le code IMU, utilisez l'extrait suivant ci-dessous :

depuis l'importation IMU MPU6050
mu =MPU6050()
a =imu.run()
a #print answer

Le logiciel suivant doit provenir de virtualenv pour le MPU6050 :

sudo apt install python3-smbus
pip install mpu6050-raspberrypi

Le fichier meta.json sous le dossier tub doit être augmenté pour prendre en charge la journalisation des données IMU.

{"entrées":["cam/image_array", "utilisateur/angle", "utilisateur/accélérateur", "utilisateur/mode", "imu/acl_x", "imu/acl_y", "imu/acl_z", "imu /gyr_x", "imu/gyr_y", "imu/gyr_z"], "types":["image_array", "float", "float", "str", "float", "float", "float", « flotter », « flotter », « flotter »]}

Le fichier manage.py doit également être modifié comme ci-dessous :

imu =Mpu6050()
V.add(imu, output=['imu/acl_x', 'imu/acl_y', 'imu/acl_z', 'imu/gyr_x', 'imu/gyr_y', 'imu /gyr_z'], threaded=True)
# add tub pour enregistrer les données
inputs =['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'imu/acl_x', 'imu/acl_y', 'imu/acl_z','imu/gyr_x', 'imu/gyr_y', 'imu/gyr_z']
types =['image_array', 'float' , 'float', 'str', 'float', 'float', 'float','float', 'float', 'float']

Enfin, j'ai également ajouté un module GPS à l'appareil. Bien que cela ne puisse pas être utilisé à l'intérieur, il est utile de l'ajouter pour des tests en extérieur dans des zones où vous pouvez vous connecter à un réseau WIFI.

Si l'on doit se connecter aux données GPS, la même modification qu'avec l'IMU doit être mise en œuvre.

Pour utiliser le capteur de distance HSCR04, il faut une fois installer la bibliothèque RPI.GPIO à partir de l'environnement python.

pi p installer RPi.GPIO


Ceci résume toutes les modifications matérielles. Au final, vous allez vous retrouver avec une DonkeyCar qui ressemble à ceci :


Logiciel

L'idée ici est d'implémenter un pipeline d'IA pour la détection d'objets s'exécutant sur le RPi. La première étape sera de déployer un DNN de détection d'objets qui fonctionnera sur le RPi 3 sans dépendre de périphériques externes. Commençons par installer le logiciel nécessaire.

1. Installez les bibliothèques DNN

Le projet utilise TensorFlow et OpenCV. En termes simples, pour faire de l'inférence sur le Raspberry Pi, nous utilisons un réseau déjà formé. Une fois les poids chargés, la détection et l'inférence des objets sont effectuées pour chaque image de la caméra.

pip install tensorflow[pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-devsudo apt-get install qt4-dev-tools
pip3 install opencv-python

Une chose qui doit être soulignée est que TensorFlow utilise un format de fichier différent contrairement à Keras qui a un flux de travail relativement simple pour charger les poids sous forme de fichiers h5.

sudo pip3 installer keras – mise à niveau

Cloner le référentiel de modèles officiel TensorFlow.

git clone –recurse-submodules https://github.com/tensorflow/models.git

et exportez le chemin :

export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim

Enfin quand tout est installé et avant de redémarrer problème

désactiver #pour sortir de l'espace de travail env virtuel si vous en utilisez un
sudo shutdown -h now

L'étape suivante consiste à installer le compilateur Protobuffer pour les poids du SSD MobileNetV2.

2. Installez le compilateur ProtoBuffer

Keras utilise un format de fichier différent de TensorFlow. Nous devons donc gérer les Protobuffers qui sont le format natif de TensorFlow.

J'ai installé la version 3.5.1

sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all–3.5.1.tar.gz
tar -zxvf protobuf-all–3.5.1.tar.gzcd protobuf-3.5.1
./configure

Compiler cela prendra un peu de temps (environ 1,5 heure) sur le RPi. L'autre solution consiste à effectuer une compilation croisée, mais nous devrons faire simple pour le moment. Problème :

faire

Ensuite :

make check
sudo make install
cd pythonexport
LD_LIBRARY_PATH=../src/.libs

Installez enfin le compilateur :

python3 setup.py build –cpp_implementation python3 setup.py test –cpp_implementationsudo python3 setup.py install –cpp_implementation

Exportez maintenant le chemin :

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3
sudo ldconfig

Enfin pour tester le compilateur tapez simplement :

protocole

Maintenant, nous sommes en train de gronder. Cela nous permettra de convertir le poids dans un format que TensorFlow comprend.

Lire plus de détails : IA de conduite autonome pour le collecteur d'ordures de voiture d'âne


Processus de fabrication

  1. Planification de mouvement en temps réel pour une voiture autonome dans plusieurs situations, dans un environnement urbain simulé
  2. Une leçon de conduite pour les opérations et la maintenance
  3. Préparer un avenir autonome
  4. Que peut apporter la 5G pour la voiture connectée ?
  5. Sécurité :une priorité absolue pour les voitures du futur
  6. 7 conseils importants pour des opérations de dépoussiérage en toute sécurité
  7. Système de suivi de mouvement 3D pour technologie autonome
  8. Port de charge pour essaims de drones autonomes
  9. Daimler et BMW vont coopérer sur la conduite autonome