GENIAL-O : a robot with style and machine-learning (Part 1 : assembly)

Year is 2173. World is in chaos and desolation. Machines are everywhere; they hear us, they know us, they force us to watch advertisements at all time. Engineers have been banned and are being bullied after GDPR v72.6 failed to stop the machines from dominating humanity.

I, Guillaume Gouchon, Software Engineer at Urban Massage, will recount in this diary the story of building GENIAL-O (the french version of AWESOME-O in South Park), a foolish try to resist the robotic threat…

Day 1

Democratising wellness has never been that hard… Delivering massages at home or at work happens to be a really difficult task in a post-apocalyptic world.

I am the last engineer at Urban Massage; nowadays designers and marketing departments have replaced IT technicians as 99% of the Internet are CMS. Even though, I have a last desperate mission before joining my fellow colleagues (surely hidden at the pub next door) : beat the machines at their own game by creating a robot which would change the fate of R&D in tech.

To create GENIAL-O, I’ll be using deprecated processors and machine learning frameworks from the 2010’s decades : a Raspberry PI and Tensorflow Python APIs.

Feature-wise, GENIAL-O will be able to move around (in manual and auto-pilot mode) and will be able to recognise objects when it encounters one, using Tensorflow APIs ; then it will display its guess on the LCD screen.

We also want it to be fully controllable via a web-app, with status checks, movement controls, talk commands, and a live-video stream of its front camera.

Here is the list of the components we need:

  • a Raspberry PI 3 Model B, GENIAL-O’s brain.
  • a DFRobot Devastator Tank Mobile Platform will be the base of the robot. It comes with two DC motors and has a really solid chassis. Cherry on the cake, it includes a 6 x 1.5V AA batteries holder.
  • a RaspiRobot board v3. It will control the motors, manage the Raspberry PI power supply, and more!
  • 4 Ultrasonic distance sensors HC-SR04. Cheap and quite precise, they will help GENIAL-O avoiding obstacles.
  • a Raspberry Pi NoIR v2.1 8 MP 1080p Camera Module. The eyes of GENIAL-O.
  • a 20x4 LCD Module Shield to display what GENIAL-O thinks.
  • a small speaker to make GENIAL-O tell jokes.
  • rechargeable batteries, breadboards, wires, resistors, etc…
  • a bottle of Chartreuse to not lose my mind.

I will surely find all the parts I need in the devastated Amazon landfills. But first, I need to read the documentation at the forgotten library of Wikipedia.

Day 5

I am back with all the bits, but my journey was not without risk : I nearly succumbed to buy an iPhone 84 after I accidentally watch an ad on the Maps app, when I was looking for directions. Who would have thought augmented reality would turn into this ?

While I am forcing myself to forget this unfortunate experience, I start the assembly of GENIAL-O.

First step, the RaspiRobot Board.

It is an expansion board for Raspberry PI and is really a must-have. Using the python lib, it will give you the control of leds, switches, 2 H-Bridge to control motors in both directions, 2 open collector outputs, and more. On top of that, it provides power supply to the PI from 6xAA batteries. Just clip it on the PI’s GPIO headers and job done.

Then, let’s assemble the beast.

The two DC motors accept a voltage between 3V and 8V, a good match with the RaspiRobot which will provide 6V as we’ll see later. By the way, despite the always angry appearance of the robot, the platform goes “really” fast in a kind of stubborn movement, which makes it even cooler (if you have ever seen a turtle walking, the same kind of unstoppable and frenetic way).

Plug the 6xAA batteries holder to the raspirobot, plug the motors to the screw terminals and that’s it.

For the LCD screen, camera and speaker, it’s even easier: plug the screen’s 4 wires to the I2C pins of the Raspirobot, and stick the camera cable to the Raspberry PI’s Serial Interface Port (CSI). Finally, plug the speaker to the 3.5mm jack output.

At last, let’s deal with the Range Sensors.

Here is a really good documentation about how to connect them to a Raspberry PI. A few resistors, many wires and a big mess later, we are good to go.

Note: I first tried with 1 sensor in front, 2 on the sides, and 1 at the back, but after some rocket science testing, I preferred to stick 2 in front and none at the back : indeed, GENIAL-O is a forward-thinking mechadroid.

Assembly is done, let’s now start coding !