WALL-E Replica
(EN)
WALL-E is a cute little robot featured in the Disney movie of the same name. I wanted to reproduce it to be able to implement my skills in order to improve them and especially to be able to discover the use of AI.
My WALL-E robot is able to move on flat ground, it can raise/lower its arms as well as move its head from left to right and up and down. He is also able to express himself through pre-recorded audios and he has a small screen to show his battery level. Finally, a camera already present will allow him in the future to move independently with the help of 2 ultrasonic sensors as well as a powerful LED which will light up when the ambient light is too low. To control all this, WALL-E has a web interface that can be accessed to interact with it manually.
(FR)
WALL-E est un mignon petit robot présent dans le film Disney du même nom. J'ai eu pour envie de le reproduire pour pouvoir mettre en oeuvre mes compétences afin de les améliorer et surtout pour pouvoir découvrir l'utilisation de l'IA.
Mon robot WALL-E est capable de se déplacer sur un terrain plat, il peut lever/baisser ses bras ainsi que bouger sa tête de gauche à droite et de haut en bas. Il est également capable de s'exprimer grâce à des audios pré-enregistrés et il possède un petit écran afin de montrer son niveau de batterie. Pour finir, une caméra déjà présente lui permettra dans le futur de se déplacer en autonomie avec l'aide de 2 capteurs à ultrasons ainsi qu'une puissante LED qui s'allumera lorsque la luminosité ambiante est trop basse. Pour contrôller tout ça, WALL-E possède une interface web à laquelle on peut accéder afin d'intéragir avec lui de façon manuelle.
Nomenclature / Nomenclature
(EN)
- 1 Raspberry Pi 4
- 1 Servo driver HAT
- 1 Motor driver HAT
- 1 5A step-down module (XL4015 type)
- 1 3A step-down module (LM2596 type)
- 2 12V gearmotors (100-150RPM) (JGB37-520 type)
- 2 M4x4mm grub screws
- 7 MG90S servomotors
- 1 1.3in TFT screen
- 1 12V 3W COB LED
- 2 D32mm plano-convex lenses
- 1 IRF520 MOSFET module
- 2 8R 1W speakers 13x18mm
- 1 PAM8403 amplifier
- 1 3A USB-C cable
- 1 Voltage sensor (can be made)
- 1 ADS1115 ADC module
- 1 Heatsink 25x25x10mm
- 2 HC-SR04 ultrasonic sensor
- 1 Raspberry Pi camera
- 1 5.5x2.1mm power connector
- 2 1kΩ resistors
- 2 2kΩ resistors
- 3D filament
- Electric wires
- Dupont connectors (male and/or female)
The total price is around 200€
(FR)
- 1 Raspberry Pi 4
- 1 HAT pilote servo
- 1 HAT pilote moteur
- 1 Module abaisseur de tension 5A (type XL4015)
- 1 Module abaisseur de tension 3A (type LM2596)
- 2 Motoréducteurs 12V (100-150RPM) (type JGB37-520)
- 2 Vis sans tête M4x4mm
- 7 Servomoteurs MG90S
- 1 Ecran TFT 1.3pouces
- 1 LED COB 12V 3W
- 2 Lentilles plano-convexes D32mm
- 1 Module MOSFET IRF520
- 2 Haut-parleurs 8R 1W 13x18mm
- 1 Amplificateur PAM8403
- 1 Câble USB-C 3A
- 1 Capteur de tension (peut être fabriqué)
- 1 Module CAN ADS1115
- 1 Dissipateur 25x25x10mm
- 2 Capteurs ultrason HC-SR04
- 1 Camera Raspberry Pi
- 1 Connecteur d'alimentation 5,5x2,1mm
- 2 Résistances 1kΩ
- 2 Résistances 2kΩ
- Filament 3D
- Fils électriques
- Connecteurs Dupont (male et/ou femelle)
Le prix total est d'environ 200€
3D printing / Impression 3D
(EN)
For this project, I looked for an already existing 3D model of WALL-E which was created in order to motorize it. The chillibasket model available on Thingiverse is perfect for this. In addition, many people have already created remixes to improve the basic model. I also made some modifications myself on the model in order to adapt certain parts. Finally, I collected all the 3D models that I used in a collection.
Link to Thingiverse (Collection) (Thanks a lot to chillibasket for his work!)
(FR)
Pour ce projet, j'ai cherché un modèle 3D déjà existant de WALL-E qui ai été créé afin de le motoriser. Le modèle de chillibasket disponible sur Thingiverse est parfait pour cela. De plus de nombreuses personnes ont déjà créé des remix afin d'améliorer le modèle de base. J'ai également moi-même fait quelques modifications sur le modèle dans le but d'adapter certaines pièces. Enfin, j'ai rassemblé tous les modèles 3D que j'ai utilisé dans une collection.
Lien vers Thingiverse (Collection) (Merci beaucoup à chillibasket pour son traval !)
(EN)
Electronic diagram 1/2 : This first electronic diagram mainly corresponds to the power supply of the various WALL-E component elements.
- The 5A step-down module should be set to 5V with the potentiometer screw. As for the 3A one, it must be set to 3.3V. I put some hot glue on the potentiometers to make sure they won't go wrong over time.
- The raspberry does not have an analog-to-digital converter (ADC), which is why I use an ADS1115 (4 inputs) with a voltage sensor. The output signal of the latter must be sent to one of the 4 ADC inputs.
- The 7 servomotors are connected one after the other from channel 0 to channel 7 as shown in the diagram.
- When connecting the motors, it may be necessary to reverse the connections so that they work in the correct direction.
(FR)
Electronic diagram 1/2 : Ce premier schéma électronique correspond principalement à l'alimentation des différents éléments composants WALL-E.
- Le module abaisseur de tension 5A doit être réglé sur 5V grâce à la vis du potentiomètre. Quant à celui de 3A, il doit être réglé sur 3.3V. J'ai mis un peu de colle chaude sur les potentiomètres afin de m'assurer qu'ils ne se dérègleront pas avec le temps.
- Le raspberry ne possède pas de convertisseur analogique numérique (CAN), c'est pourquoi j'utilise un ADS1115 (4 entrées) avec un capteur de tensions. Le signal en sortie de ce dernier doit être envoyé à l'une des 4 entrées de CAN.
- Les 7 servomoteurs sont branchés à la suite les uns des autres du canal 0 au canal 7 comme indiqué sur le schéma.
- Pour le branchement des moteurs, il sera peut être nécessaire d'inverser les branchements afin qu'ils fonctionnent dans le bon sens.
(EN)
Electronic diagram 2/2 : This second electronic diagram corresponds to the connection of the various modules on the Raspberry Pi.
- Pay attention to the connection of the ultrasonic sensors. You have to supply them with 5V, and the Raspberry Pi sends them a 3.3V pulse on the Trig pin. But the Echo pin of the sensors will send a 5V pulse back to the Raspberry, which will destroy the Raspberry inputs! To avoid this, you must add a voltage divider bridge, which is why two resistors of 1kΩ and 2kΩ are present in the diagram. The GND pin of the sensors is connected directly to the GND of the associated power supply.
- There is also the LED on the front of WALL-E which must be supplied with 2.2V. A 56Ω resistor is therefore placed in series with the LED in order to limit the voltage.
- The HAT boards and the Raspberry Pi are nested together, with the motor HAT board above to facilitate assembly/disassembly (this direction is not mandatory).
(FR)
Electronic diagram 2/2 : Ce second schéma électronique correspond au branchement des différents modules sur le Raspberry Pi.
- Il faut faire attention au branchement des capteurs ultrasons. Il faut les alimenter en 5V, et le Raspberry Pi leur envoie une impulsion en 3.3V sur la broche Trig. Mais la broche Echo des capteurs va renvoyer une impulsion 5V au Raspberry, ce qui va détruire les entrées du Raspberry ! Pour éviter cela il faut ajouter un pont diviseur de tension, c'est pourquoi deux résistances de 1kΩ et 2kΩ sont présents dans le schéma. La broche GND des capteurs est branché directement au GND de l'alimentation associée.
- Il y a également la LED de la face avant de WALL-E qui doit être alimenté en 2.2V. Une résistance de 56Ω est donc mise en série avec la LED afin de limiter la tension.
- Les cartes HAT et le Raspberry Pi sont emboitées les uns aux autres, avec la carte HAT des moteurs au dessus afin de faciliter le montage/démontage (ce sens n'est pas obligatoire).
Raspberry pin | TFT screen | Raspberry pin | LED driver | |
BCM 13 / GPIO 27 | BLK | BCM 7 / GPIO 4 | SIG | |
BCM 18 / GPIO 24 | DC | BCM 9 / GND | GND | |
BCM 22 / GPIO 25 | RES | |||
BCM 19 / GPIO 10 | SDA | LED | ||
BCM 23 / GPIO 11 | SCK | BCM 29 / GPIO 5 | VCC | |
BCM 30 / GND | GND | |||
ADC module | ||||
BCM 3 / GPIO 2 | SDA | Ultrasonic sensor (right) | ||
BCM 5 / GPIO 3 | SCL | BCM 11 / GPIO 17 | TRIG | |
BCM 12 / GPIO 18 | ECHO | |||
Ultrasonis sensor (left) | ||||
BCM 11 / GPIO 17 | TRIG | |||
BCM 12 / GPIO 18 | ECHO |
(EN)
Electronic diagram (optional) : It is possible to make several modifications in order to simplify the electronics and the use of WALL-E.
- I added a power connector in order to be able to connect the robot with a mains power supply.
- I made a card with several terminals. I put a terminal block there for each of the two power connectors, one for a switch and one for each of the 6 modules which is supplied with 12V. I soldered a double Schottky diode (MBR1560CT) so that one of the power supplies cannot go up into the other power supply and thus burn one of them.
- I added Dupont connectors between the power supplies (5V and 3.3V) and the various modules in order to facilitate the assembly/disassembly of the electronics.
- I added a fan powered by the 5V step-down module so I could fan the Raspberry.
(FR)
Electronic diagram (optional) : Il est possible d'apporter plusieurs modifications dans le but de simplifier l'électronique et l'utilisation de WALL-E.
- J'ai ajouter un connecteur d'alimentation afin de pouvoir brancher le robot grâce à une alimentation secteur.
- J'ai fabriquer une carte avec plusieurs borniers. J'y ai mis un bornier pour chacun des deux connecteurs d'alimentation, un pour un interrupteur et un pour chacun des 6 modules qui est alimenté en 12V. J'ai soudé une double diode Schottky (MBR1560CT) pour que l'une des alimentations ne puisse pas remonter dans l'autre alimentation est ainsi faire bruler l'une d'elle.
- J'ai ajouté des connecteurs Dupont entre les alimentations (5V et 3.3V) et les différents modules afin de faciliter le montage/démontage de l'électronique.
- J'ai ajouté un ventilateur alimenté par le module abaisseur de tension 5V afin de pouvoir ventiler le Raspberry.
Programming / Programmation
(EN)
WALL-E works as follows: a python web server (flask library) is hosted on the Raspberry Pi. The latter generates its own wifi network so that you can connect to it without having to go through a home network . The flask server is thus used as an interface to interact remotely with the robot.
For the programming part, it is necessary not to forget anything! First, you have to install an operating system on a micro SD card to run the Raspberry. It is essential to use a 64-bit OS to use the "mediapipe" library. Also, I strongly recommend that you use an OS without a desktop environment to limit unnecessary performance usage of the Raspberry. That's why I advise you to use "Raspberry Pi OS Lite (64-bit)" (Bulleye). To do this, you must use the "Raspberry Pi Imager" software available on the Raspberry website. You should also remember to activate SSH for the future.
Secondly, it will be necessary to connect to the Raspberry. That's why on a Windows computer, I'm using Visual Studio Code with the "SSH Remote" extension. Once connected to the Raspberry, you must first update it, then install the following libraries: "opencv-python", "opencv-contrib-python", "mediapipe", "flask", "pyyaml", "pygame " and "smbus". You can now get my code from my project's Github and put it in a folder on your Raspberry. The "Tests" folder contains Python codes that allow you to test each of the different WALL-E modules and the "Datasheets" folder contains the documents of the technical characteristics of the different components.
In order not to have to launch the web server myself each time I turn on WALL-E, I created a service to launch the code automatically when it starts. In addition, I installed RaspAP so that the Raspberry generates its own wifi network, so that I can connect to it outside of any network.
Link to the project's Github
(FR)
WALL-E fonctionne de la manière suivante : un serveur web en python (librairie flask) est hébergé sur le Raspberry Pi. Ce dernier génère son propre réseau wifi afin que l'on puisse s'y connecter sans avoir à passer par un réseau domestique. Le serveur flask est ainsi utilisé comme interface afin d'intéragir à distance avec le robot.
Pour la partie programmation, il est nécessaire de ne rien oublier ! Dans un premier temps, il faut installer un système d'exploitation sur une carte micro SD pour faire fonctionner le Raspberry. Il est indispensable d'utiliser un OS 64 bits pour l'utilisation de la librairie "mediapipe". De plus, je vous recommande fortement d'utiliser un OS sans environnement de bureau afin de limiter l'utilisation inutile de performances du Raspberry. C'est pourquoi je vous conseille d'utiliser "Raspberry Pi OS Lite (64-bit)" (Bulleye). Pour cela, il faut utiliser le logiciel "Raspberry Pi Imager" disponible sur le site de Raspberry. Il faut également penser à activer le SSH pour la suite.
Dans un second temps, il va être nécessaire de se connecter au Raspberry. C'est pourquoi sur un ordinateur Windows, j'utilise Visual Studio Code avec l'extension "SSH Remote". Une fois connecter au Raspberry, il faut d'abord le mettre à jour, puis installer les librairies suivante : "opencv-python", "opencv-contrib-python", "mediapipe", "flask", "pyyaml", "pygame" et "smbus". Vous pouvez à présent récupérer mon code sur le Github de mon projet et le mettre dans un dossier sur votre Raspberry. Le dossier "Tests" contient des codes Python qui permettent de tester chacun des différents modules de WALL-E et le Dossier "Datasheets" contient quand à lui les documents des caractéristiques techniques des différents composants.
Afin de ne pas avoir à lancer le serveur web moi-même à chaque fois que j'allume WALL-E, j'ai créé un service afin de lancer le code automatiquement à son démarrage. De plus, j'ai installé RaspAP afin que le Raspberry génère son propre réseau wifi, pour pouvoir m'y connecter en dehors de tout réseau.
Lien vers le Github du projet
Future improvements / Futures améliorations
(EN)
- One of the first improvements to be made is to change the servo motor that moves the robot's neck up/down and replace it with an MG996 servo motor. The originally planned MG90S is far too weak to be able to lift the neck and head properly.
- A big improvement, and not the least, would be to replace the Raspberry Pi 4 with a more powerful microcomputer. It is possible to replace it with a Raspberry Pi 5 or an Nvidia Jetson Nano. The additional CPU/GPU power will allow the calculations made by the AI to be carried out more quickly. However, there is another solution. It is possible to transfer the calculations made by the AI to a PC which is connected to the robot. However, I personally would not take this solution, because I don't want to have a PC constantly on to be able to run WALL-E.
- I also plan to add a 3rd and final ultrasound sensor on the front of the robot. This will allow him to be able to manage the obstacles present in front of him.
- Develop and add the automatic mode that was planned. The robot will be able to move independently (detection of walls / obstacles). He will be able to follow a person and say hello to a waving person.
- Change the software architecture: several solutions are possible. The first solution is simply to use more threads for the different tasks that the robot can perform. The second solution is to change the programming language to C++ (and also use more threads). The latter is more complex than Python but also more optimized. The last solution is to use ROS to run WALL-E. ROS is a middleware widely used in robotics, and I am currently working on this solution.
(FR)
- L'une des premières améliorations à faire est de changer le servomoteur faisant monter/descendre le cou du robot et de le remplacer par un servomoteur MG996. Le MG90S prévu à l'origine est beaucoup trop faible pour pouvoir soulever le cou et la tête correctement.
- Une grosse amélioration et pas des moindres, serait de changer le Raspberry Pi 4 par un micro-ordinateur plus puissant. Il est possible de le remplacer par un Raspberry Pi 5 ou par une Nvidia Jetson Nano. La puissance CPU/GPU supplémentaire permettra de réaliser les calculs fait par l'IA plus rapidement. Malgré tout, il existe une autre solution. Il est possible de déporter les calculs fait par l'IA sur un PC qui est connecté au robot. Cependant, je prendrai personnellement pas cette solution, car je n'ai pas envie de devoir avoir un PC constamment allumé pour pouvoir faire fonctionner WALL-E.
- J'ai également prévu d'ajouter un 3ème et dernier capteur ultrason sur le devant du robot. Cela lui permettra de pouvoir gérer les obstacles présents devant lui.
- Développer et ajouter le mode automatique qui a été prévu. Le robot sera capable de se déplacer en autonomie (détection des murs/obstacles). Il sera capable de suivre une personne et de dire bonjour à une personne qui fait coucou de la main.
- Modifier l'architecture logicielle : plusieurs solutions sont envisageables. La première solution est simplement d'utiliser plus de threads pour les différentes tâches que peut réaliser le robot. La seconde solution est de changer de language de programmation pour du C++ (et en utilisant également plus de threads). Ce dernier est plus complexe que le Python mais également plus optimisé. La dernière solution est d'utiliser ROS pour faire fonctionner WALL-E. ROS est un middleware très utilisé en robotique, et je suis actuellement en train de travailler sur cette solution.
Last edited: Sun 03 nov 2024
Add a comment