Do Arduinos Dream of Electric Sheep?

Some people opt for a robot base with two wheels; others are tempted by a base with four wheels; but engineers like yours truly are satisfied with nothing more or less than three wheels.

I am currently having a delightful, exuberant, and all-around wonderful time. This is because I've started work on my Arduino-powered robot, which means my head is currently bubbling over with ideas and brimming with questions.

In my previous blog on this topic (What's the Best Robot Base for My Arduino?), I started off by looking at traditional 2-wheel and 4-wheel bases. Eventually, however, I decided to go with a 3-wheel base from RobotShop.com as shown below. Why? Well, quite apart from anything else, it looks almost as cool as Doctor Who in a bow tie and a fez!

Robot base in its usual orientation (top) and flipped over so we can better see the motors (bottom).

Observe the special "transwheels" attached to the motors. These boast free-turning rollers mounted perpendicular to the axle arranged around the periphery of the wheel. Based on its use of transwheels, the exciting thing about my omni-directional robot base is that it can move in any direction. Of course, the tricky thing about controlling this omni-directional base is that it can move in any direction (LOL). This is actually a tremendously interesting topic, which we will consider in more detail below, but first...

So, with my base on order, the next thing I need is a controller to handle my three DC motors. Of course, I could use my main Arduino board to directly control an H-Bridge, but I want to keep the Arduino's computing resources as free as possible. The solution is to use a dedicated motor controller board.

This little beauty -- which connects to the main Arduino via an I2C interface, thereby consuming only two pins -- can control up to four DC motors (which is what I need) or two stepper motors. It can handle 1.2A per channel and offers a 3A peak current capability, so it's more than capable of dealing with the motors on my base. The cool thing is that all my main Arduino has to do is send a command to the motor controller saying "Make motor 'n' run in 'x' direction at 'y' speed," after which we can leave the motor controller to perform its magic.

@David: Of course you could use that 4th motor to rotate the camera......then you can see where you're coming from as well.....

The great thing about the Adafruit motor controller boards is that they are stackable -- and they are controlled via I2C so the whole stack consumes only twoi pins (you just have to chang ethe I2C address of each board.

I have thought about having a "turret" holding th evision sendor on the top of the base, where the turret can rotate independently ... but lets not get too far ahead of ourselves here -- I haven't even got the base working yet :-)

@Max...you're making my head spin (along with your robot)... :-) But thanks for all that - I can see where you're going with this....and I wondered about making one direction "front" if you are using a camera. Of course you could use that 4th motor to rotate the camera......then you can see where you're coming from as well.....

@DrFPGA: How about using an algorithm that 'learns' how to move in a particular direction? The robot starts out with only some simple functions for wheel control and builds up functions for specific directions and speeds after 'trying' out some combinations. 'Winning' combinations become the next 'best' function for moving that way. Let the robot do the work of coding by programming itself...

That's one thing I'm thinking about -- using Genetic Algorithms to learn the best way to do things...

How about using an algorithm that 'learns' how to move in a particular direction? The robot starts out with only some simple functions for wheel control and builds up functions for specific directions and speeds after 'trying' out some combinations. 'Winning' combinations become the next 'best' function for moving that way. Let the robot do the work of coding by programming itself...