Monthly Archives: April 2021

Omnibot 5402: Adding LED matrix eyes and computer vision

The next important thing was to give the robot more personality and I found one or two chaps in the internet that worked on LED matrix eyes. But I also wanted to get computer vision to Omnibot so that it could see things or people and potentially speak to them, grab them or move towards them.

So let’s start with the decomposition of the original eyes which basically had a little lamp build in:

Omnibot 5402 head plate with reflectors, lamps, distortion plate and color filter

I decided to just keep the head plate and the black adapter and replace all other parts. Next I soldered the two 8×8 LED matrices, they are chainable and adapted the code from the above link.

Minimal expressive eyes (MEE) for the Omnibot 5402 powered by a Raspberry Pi 3.

This was very satisfying as there was a quick success. However, as you can see, the MAX7219 controller chip is standing out of the black adapter, making it impossible to build the eyes into the adapter. So the next iteration was to desolder them again and rotate them 90 degrees…

Rotated LED matrices and a 3d printed adapter from square to round.

I also decided to design a 3d printed adapter to keep the squared matrix in the round hole.

Original black Omnibot 5402 eye plate with black 3d printed adapters and the 8×8 LED matrices in place.

I also had to connect the two LED matrices differently as the pins would look downwards now. I decided to use a perf-board that I had in my cupboard from since my teenage years, so it would match the Omnibot in age 😀

Two LED matrices on perf-board and cable to the Raspberry Pi.

A little software experiment yielded this:

When I was working on the Omnibot’s eyes, the high resolution Raspberry Pi cameras were launched and I had to buy them immediately. I don’t really like the flimsy design on the original Pi cams.

The two objectives for the two 10 MP Raspberry Pi cams.

I decided to use the fish eye lens as it is small enough and would broaden the Field of View of the Omnibot.

I realised that the original black Omnibot adapter certainly has no hole for the objective, but I definetly wanted to have the camera very close to the LED eyes. So I decided to do away with the adapter altogether and re-designed the whole adapter to keep the objective as well. This was not too easy as the diameter is really huge and I wanted to keep the matrices at a maximum in size.

10 MP Raspberry Pi cam with fish eye lens in the next iteration of the Omnibot 5402 adapter.

Finally, I also had to match the PCB with the matrix PCBs which also was not too easy. But luckily, it worked out:

LED matrices, fish eye lens as well as all three PCBs in the 3d designed adapter.
PCB view of the Omnibot 5402 eye adapter.
Optimisation in height vs overlap was hard work.

Finally, I had to buy a longer cable to connect the camera to the Raspberry Pi that was mounted on the Omnibot 5402’s tape recorder base plate in the meantime.

Hardware stack of the Omnibot 5402: Raspberry Pi 3, relais board to switch components, servo controller for the arms and motor control board for the wheels.
Eyes adapter connected to the hardware stack including the power management: current sensor, bucket converter for the wheel motors and 5V bucket converter for the Raspberry Pi.

So, finally, all pieces come together in under the dome of the head part. The dome is dimming the picture a bit, so experiments will show whether computer vision works well enough. The manual focus of the Pi cam is helping here.

Eyes incl LED matrices and Pi Cam built into the head of the Omnibot 5402.

See the currently final setup here:

All parts of the current hardware setup in place. Now it’s a matter of software.

Pimping the Omnibot 5402, pt 2: making the arms move

I always wanted the Omnibot to be able to actually grab and lift objects. So I started with the arms and recycled the 2 DoF shoulder servo pack from Trashbot.

The original two arms of the Omnibot 5402

The goal was to get the should parts replaced in a lean looking way. However, the original arms only move forward but not sideways, i.e. Omnibot cannot hug. Adding a second degree of freedom will thus inevitably broaden its shoulders:

Increaing distance between arm and body when using two servos

One trick was to hide the hugging servo within the body as good as possible. A next iteration could also hide the lifting servo a bit in the upper arm. For the current version, I chose to add it on a newly designed base plate that is at least slimmer than the inner should cover (compare it to the underarm):

Close up of the 3d printed 2 DoF shoulder joint on the Omnibot 5402

Here’s an earler version of the design, before I moved the should into the corpus:

Trashbot’s shoulders re-used in the Omnibot 5402

Software wise, I had to slow down the servo speed as otherwise Omnibot would move like this:

Single arm of the Omnibot 5402 moved by two servos without speed control

The final result are the two arms, each controlled by a thumbstick of the Bluetooth game controller. I added the Adafruit servo HAT to the stack that was using the motor stack before:

Omnibot 5402 moving two arms on two different axes using a bluetooth gaming controller

As usual, I’ve uploaded the two 3d files (.STL) on thingiverse, let me know, when you’re trying these out!

One of the things that are not making me happy is that Omnibot’s belly is to bold that it can’t close the arms and the arms are so short that they can’t lift anything that is in front of it. Fixing these two “bugs” would mean a complete redesign of the arms, I fear.

Pimping my favourite 80’s robot: Omnibot 5402 (Pt 1: driving)

When i was a child, I was dreaming of the Omnibot 5402, I loved its size, its ability to be radio controlled, it could speak and it could record movements on a built-in tape recorder and it could carry things. A perfect companion!

When you get older, you can make some of your youth dreams come true. So two years ago, I was lucky to get not only one, but two Omnibots on Ebay for 99$ (tax and shipping summed up to another 200$, though 😀 ):

I cleaned the battery compartments of the remote control and the white one and made sure that these work properly, I replaced the original batteries with 2S 7.4V LiPos and bucket converters (max 20 Amps for the Omnibot itself):

1800mAh 7.4V LiPo and bucket converter and barrel connector for the Omnibot 5402
1800mAh 7.4V LiPo and bucket converter and barrel connector for the Omnibot 5402
Battery and converter built into the Omnibot 5402
Battery and converter built into the Omnibot 5402

But the real fun starts with the yellow Omnibot:

  • I wanted to have a Raspberry Pi controlling it,
  • a decent Bluetooth remote control with more options,
  • the arms moving,
  • a camera for computer vision
  • USB sound card with a loud speaker and a microphone
  • LED matrix eyes for emotional expressions and to indicate where the robot’s looking at

So, the journey starts with decomposing it and enjoying how it is constructed:

Base of the Omnibot 5402 including all wheels, gearbox and motors
Base of the Omnibot 5402 including all wheels, gearbox and motors

That’s the lower part containing the four wheels that are driven by two motors in the gear box.

The four wheels of the Omnibot 5402, the belts light greay have flattened over the years.
The four wheels of the Omnibot 5402, the belts light greay have flattened over the years.

Of course, we want to keep the robot as original as possible, so I needed a H-bridge controller to control these two motors.

Omnibot 5402 gearbox and motors open
Omnibot 5402 gearbox and motors open
Omnibot 5402 gears taken out for cleaning
Omnibot 5402 gears taken out for cleaning
Omnibot 5402 gearbox connected to the Adafruit Motorshield and the Raspberry Pi 3
Omnibot 5402 gearbox connected to the Adafruit Motorshield and the Raspberry Pi 3

I took the original cable from the Omnibot’s motherboard and connected it to a Motor HAT from Adafruit. In that way, it was easy to use their examples to control the motors using Python.

Omnibot 5402 gearbox controlled by Raspberry Pi and Adafruit motor HAT

Next I’d build this into the base, add LiPo power to the motor controller and USB battery power to the Pi:

Omnibot 5402 base drive test

Finally, I’d add some code to connect by 8bitdo sf30 Pro Gamepad via Bluetooth to it:

Bluetooth controlled base of the Omnibot 5402

I decided to use the D-pad to control the Pi since I wanted to use the thumbsticks for the arms. The D-pad can be used to drive the Omnibot like a tank, forward lets both motors go forward, rotation on the spot can be achieved by turning the motors in opposite directions. Since the motor control is PWMed, we can also set the speed so that the speed is independent of the battery level.

You can find a tutorial on how to read a gamepad via python here.

The next blog entry will cover the movement of the arms.