This project is my update of the original RB5X.
A little history:
The original RB5x
The RB5X is a personal robot that has been around since 1982. Although not currently manufactured, there had been efforts to update the system to more modern technology and manufacturing techniques.
– 13″ in diameter,
– 23″ high
– 24 lbs.
Traveled about 4″ per second,
– 8 bumper panels around perimeter
– 1 photodiode under carriage to track to its charger using line following
– 1 sonar transducer
There were several things that needed updating on the original RB5X base that I had. The largest change, I felt, that was needed was the mobility and drive system of the robot. The original system made use of a differential motor system with a relay based H-bridge driver. Since the motor system was centered on the base, it required casters on the front and the back of the robot. This produces a rocking motion and the robot moves and hangs up the robot when it comes across floor height variation like ramps and door thresholds.
The sonar was originally produced by Polaroid. Although I had one of these sensors, I decided to update the sonar with an SRF05 ranger which was more recent an easier to interface with.
I decided to update the old INS8073 brain with an Arduino Mega 2560 which used the Atmel ATMega2560, which gives me about 100 times the program area of the 8073, as well as a bunch of other additional resources.
Speech was now going to be provided by a Speakjet chip.
Power would be provided by a set of lithium Ion batteries. (I was shooting for a 12 volt system for all the major components and motor drive).
I decided to add some additional sensors as well:
– Encoders on the motor drive
– IR rangers on the bottom skirt to add object/wall detection out to 80 cm.
– Voltage monitors to keep an eye on the batteries (This becomes more important with Lithium Ion).
– PIR sensor
– IMU, mainly for the Magnetometer.
– ZigBee communications for remote access
The original base derive systems was a differential drive systems with a front and rear caster set. The new system makes use of a holonomic drive system this is a systems with three omnidirectional wheels spaced rotated 120 degrees apart around the center of the base. This system provides two degrees of freedom on a surface without having to turn.
holonomic drive system
The Power Supply Let’s face it, we’ve yet to develop a portable light-weight fusion generator and robots need a good power source to operate over a reasonable amount of time. If we can find a power sources that will take use less time to charge than is available for operation
Motor Encoders, the motor encoders used on this design are based on Hall-effect devices. They pulse on every rotation of the base motor. Which doesn’t sound like a lot of resolution but I’m using the pulse for odometry not tachometry.
Bumper Sensors, the bump sensors ae used as a last ditch response to the robot running into a wall or an object. They are also used as an input device to cause the robot to perform 8 different actions.
Sonar, the sonar gives the robot an indication of how far an object, wall or surface in from the front of the robot. The range is about 4 meters and has a roughly 60 degree cone.
PIR, the PIR sensor detects the presence of body heat. It has a wide cone of detection so it’s not really useful for tracking, but it can be used as a human (or animal) presence sensor. Sensing range is about 7 meters (120 degree cone)
IMU 10 DOF is contained in this IMU combines 3 sensors to give 11 axes of data: 3 axes of accelerometer data, 3 axes gyroscopic, 3 axes magnetic (compass), barometric pressure/altitude and temperature. It uses a L3DG20H gyroscope, a LSM303DLHC accelerometer compass and a BMP180 barometric/temperature sensor. They all use I2C to communicate.
Specs for the sensors are:
- L3GD20H 3-axis gyroscope: ±250, ±500, or ±2000 degree-per-second scale
- LSM303 3-axis compass: ±1.3 to ±8.1 gauss magnetic field scale
- LSM303 3-axis accelerometer: ±2g/±4g/±8g/±16g selectable scale
- BMP180 barometric pressure/temperature: -40 to 85 °C, 300 – 1100hPa range, 0.17m resolution
The brains use an Arduino Mega 2560 operating at 16MHz. The microcontroller board is based on the Atmel ATmega2560.
– 256 KB of flash memory (8 KB used by bootloader)
– 8KB of static RAM – 54 digital input/output pins
– 16 analog inputs
– 4 UARTs (hardware serial ports)
– An I2C bus
It is programmed using the free Arduino Integrated Development Environment (IDE) in C/C++.
The Mega sits on a custom build break-out board I developed to make interfacing the sensors easier. The breakout board also contains a 1 Amp power regulator for some of the more power hungry sensors.
The brain also uses a Sparkfun VoiceBox Shield. The shield is mounted on top of break out board and has some minor modification to connect the serial input to UART 3 of the Mega
The Voice Box Shield uses the SpeakJet chip to convert phoneme based serial commands to voice.
The SpeakJet is programmed with 72 speech elements (allophones), 43 sound effects, and 12 DTMF Touch Tones. Through the selection of these sounds and in combination with the control of the pitch, rate, bend, and volume parameters, one can to produce an unlimited number phrases and sound effects.
The base has been updated already, but I thought I’d post the initial update phases for posterity. The first holonomic base I used was a kit from SuperDroid Robots but the wheel base was a little too wide.
As you can see in the main picture I had to add some foam padding to two of the bumpers in order to allow them to sense when the robot ran into a wall. Also the SuperDroid Robots base did not include encoders. So I fabbed a base of my own, found some 12V motors with encoders and brought in the motors some.
I wasn’t entirely successful though. These particular motors were also longer and as a result I could only bring them in so far. I still had to put padding on the bumpers but overall I wasn’t unhappy with the result. Plus I also added four IR rangers essentially giving the robot additional whiskers around the wheels so I should have less trouble with the robot getting hung up on walls.
Internally I also changed how I mounted the Mega control system
So the current state of the robot looks like this (with the top shell/skin removed):
The original link: