The chassis and suspension were designed from scratch, with modularity and budget in mind.  I used the 1cm x 1cm MakerBeam Starter Kit, plus the add-on corner cube and bearing hinge kits, and designed my own joints and servo brackets which I sent off to a commercial print shop.  The MakerBeam bearing hinges are a little cheesy, basically a molded copper strip which clamps a pair of bearings against a beam.  It doesn't support a lot of weight, and I eventually swapped these out for a pair of steel pillow blocks for the main rocker pivots.

I wasn't aware of any similar projects when I designed this.  I later discovered Roger Cheng's Sawppy project.  He did a MUCH better job with all of the joints, wheels, etc.  If you're thinking about building something like this, use his design.  It looks much more rugged and well thought-out.  Sawppy looks a little bigger than mine, too.  @Ameer also did a fine job building his own Rover-X, derived from Roger's design, with some unique updates of his own.

I used an Adafruit PCA9685 16-ch servo driver to power the ten mobility metal-gear micro-servo plus two for the mast.  I hand-modified the six wheel drive servos to allow continuous drive.  The Pololu robot wheels mounted directly onto regular servo horns.  Found some servo pull rods that are normally used for steering linkage in RC cars and I used these to link the rocker arms to the differential arm across the top.  The swivel action is butter smooth, and it's fun to see how the two sides counter each other to stabilize the center chassis.

I chickened out from building a robotic arm.  Pretty sure my suspension would not have supported the weight, and the micro-servos likely wouldn't have been up to the task either.

The ESP8266 operates the servo driver, current sensor, LCD display, and optical flow sensor over i2c, which is awesome - all of this on just 2 wires from the ESP8266.

When we drive the Curiosity test rover around JPL's Mars Yard, someone (an intern, usually) holds a panic button at all times, to shut off power to the rover's motors if anything goes wrong.  I wanted a similar emergency interrupt capability for my rover, but didn't want a push-button that would be hard to press on the back of the somewhat fragile, moving chassis.  Instead, I put a capacitive touch sensor against the chassis, so that touching any part of the chassis stops the motor driver.  It works beautifully, and I highly recommend this feature for micro-rover builds and other robotic projects.

Mainly for bragging rights, I programmed a CLI which accepts driving commands like the ones we use on Mars.  The most common point-to-point driving command is called "mob-arc", which takes two arguments, a path length and an azimuthal change in heading.  The ESP8266 calculates Ackerman steering angles for each corner wheel, then calculates the speeds needed from each wheel in order to drive constant angular rate around the arc, and then drives the requested distance by running the wheels at the calculated speeds for calculated duration.  This didn't work all that well at first, due to imprecision in rate control and slippage between the rubber wheels and the surface it's driving on.  Path lengths were accurate to about 10-20%, which isn't good enough if you care about repeatability.  Heading changes weren't super precise either.

I found a solution for drive distance accuracy that worked out remarkably well.  I mounted an Apm2.5 optical flow sensor (with an attached lens) to the chassis, pointing downward.  This basically works like an optical mouse, tracking motion relative to the floor like your mouse tracks itself relative to a mousepad.  Turns out this measures traversed distances to within about 1% or better.  I linked this into my mob-arc routine instead of a simple...

Read more »