The making of Omnibot mkII (work in progress)

Copyright (C) 2013 by Michal Zalewski <lcamtuf@coredump.cx>

This page documents the (ongoing) work on Omnibot mkII. The project is a new version of Omnibot mkI. The new model is meant to achieve much higher miniaturization and improve several other aspects of the original design.

Both the original Omnibot and this revised approach feature a novel reconfigurable drivertrain, which enables the robot to perform on-the-spot 360° turns and to effortlessly alternate between forward and sideways motion. As opposed to most other omnidirectional designs, Omnibot can do so without losing registration with the environment, and without relying on exotic and expensive components. In fact, it uses just three extremely cheap brushed motors and four regular wheels.

Prefabricated components

Electronics

The price tag for all the essential electronic components is around $60. I am tempted to experiment with two additional side-firing distance sensors and a small LCD, such as Newhaven NHD-0208AZ-FL-YBW - in which case, the price for a "deluxe" build may increase to $120.

Mechanical components

All these parts together should cost less than $20.

Custom-made parts

Although the basic design of Omnibot can be brought to life using common over-the-counter components - or even LEGO Technic bricks - I am making extensive use of custom-made parts created with the aid CNC machining and resin casting. Setting up a basic CNC and resin casting workshop costs around $2,000; small mills such as MDX-15 are quite office- and apartment-friendly, too. The whole process is explained in detail in my guerrilla guide to CNC.

In this spirit, master patterns for all the plastic parts were machined on Roland Modela MDX-540 in Huntsman RenShape 460 medium density modeling board, using 0.25 mm, 1 mm, and 3 mm diameter square end cutters from Hanita. Negative molds and rubber parts were cast in Quantum Silicones QM262 platinum cure silicone. Last but not least, all the rigid plastic components - around 120 parts total - were made out of Innovative Polymers IE-3075 and OC-7086 polyurethane resins, manually pigmented with several low-cost dyes.

The approximate cost of all these custom materials does not exceed $30. A detailed photo blog explaining the entire manufacturing workflow can be found here:


Mechanical design

The design uses a square platform with four swiveling wheels. Two diagonally opposite wheels (marked as orange in the illustration below) are driven directly by two independently operated, low-cost motors with no integral feedback. The other two wheels (blue) turn freely, and incorporate simple optical encoders to sense traction and correct any eventual drift.

Crucially, the position of the wheels is synchronized with the help of a third motor coupled to a simple mechanical linkage. This permits the platform to seamlessly cycle through three different layouts of the drivetrain, and perform complex maneuvers with great ease:

In addition to moving forward, backward, or sideways, the configuration shown in the middle permits the robot to rotate its body without leaving the currently occupied spot.

Planetary transmission

The commodity motors used in this design are Mabuchi FF-N20PN 8721. Every motor is coupled with a custom-machined, three-stage high-efficiency planetary featuring a 125:1 gear ratio. The planetary features 18 discrete parts, and is barely 7 mm tall and 12 mm in diameter. It runs with high efficiency and effortlessly delivers torques around 1,800 g*cm:

Because the moldmaking process is explained in detail on a separate page, I don't want to cover all the gory details again. The following illustration shows the CNC-machined master, a negative mold made out of silicone, and the final parts:

Because of the tiny dimensions of the parts and the tight tolerances of the device, putting the gearbox together is a fairly challenging operation all by itself:

The following video captures a test run of an almost finished gearbox. The yellowish cast is due to thin strips of polyimide tape used to temporarily hold the assembly together:

The planetary transmission used for Omnibot mkII is about three times smaller than the one used in the earlier build. Thanks to the use of two-part molds for the carrier assembly, it has fewer parts, too.

Chassis and linkage

The chassis copies the design of Omnibot mkI almost verbatim, but is considerably smaller: it measures less than 9 x 9 cm, versus 18 x 18 cm in the original model. The operating principle of the steering linkage is captured in the following sketch:

Each of the four axle assemblies is coupled to the chassis using a ball bearing. This allows it to swivel freely. An additional centrally-mounted motor uses four linkages to synchronize the angular position of the axle assemblies. The powered wheels are couples to turn in the same direction as the linkage motor:

The free wheels swivel in a direction opposite to the powered ones, thanks to a pair of gears placed in line with the linkage:

The above picture also shows the two optointerrupters used to detect the orientation of the linkage and monitor traction across the freely rotating wheels.

A complete rendering of the chassis is provided below. Note the 7.4 V, 350 mAh lithium-polymer battery mounted underneath; this should be sufficient for around 100 minutes of driving across flat terrain.

Later on, the robot will be fitted with a smaller top cover screwed onto the four protruding spacers. The cover will hold the PCB and several ultrasonic distance sensors needed to navigate the environment.

The machining of molds for the chassis is fairly uneventful. In this picture, a 1 mm cutter is used to reproduce some of the finer details of the platform, after the initial pass with a 3 mm tool:

For the curious, this photo illustrates the surface finish and edge definition for RenShape 460 molds straight off the mill. Gear teeth visible in the image are around 0.5 mm thick near the base. It is possible to get even better results with denser boards or more careful machining strategies - but in this particular case, I'm just aiming to get things done quickly.

...and here is a close-up of the resulting negative mold made out of silicone:

Finally, here is a snapshot of the main part of the chassis made out of polyurethane, as it came out of the mold:

Here are all the parts of the main assembly, still without tires and wheels:

Wheels, tires, final assembly

The design used for wheels is fairly unassuming: a monolithic plastic wheel with stylized, somewhat flexible spokes, and a treaded 40 Shore A rubber tire made out of silicone:

The oversized 4.5 cm wheels provide generous ground clearance of almost 2 cm - more than enough to deal with a variety of common obstacles.

Here's a photo of the chassis with the wheels:

...and a test run of the linkage:

Finally, you can have a look at this close-up of one of the assembled wheels. Both position sensors are clearly visible, but not hooked up yet:

Electronics

The control circuitry for Omnibot mkII follows the general design of my earlier project, Tinybot. The two-cell lithium-polymer battery supplies around 7.4 V when fully charged, which is well above the comfort zone of most of the remaining components in the circuit; because of this, a tiny switching DC-DC converter from Murata is used to produce a stable supply of 5 V. This is preferred to linear regulation because of the relatively high current required for the motors.

Actively discharging the battery below 5.6 V is a concern, too, as it may negatively affect its chemistry; for this reason, MAX8212 voltage monitor and a cheap, high-current p-channel MOSFET are coupled to cut off all power to the DC-DC converter as necessary.

The 1 MΩ and 250 kΩ resistors are used to set the MAX8212 threshold voltage, and should be matched reasonably closely; the same goes for the 270 Ω resistor used to set the output voltage of OKR-T/3-W12-C. The p-channel MOSFET and its 68 kΩ bias resistor can be substituted freely. It is advisable to place a low-ESR MLCC capacitor in the vicinity of 10 µF between the output pin of the DC-DC converter and ground.

The main circuit uses an 8-bit AVR microcontroller running at 20 MHz (ATmega1284P). The MCU is interfaced to several accessories:

The MCU and its immediate surroundings are wired in a fairly predictable way, with the LCD module connected in parallel write-only mode:

All capacitors, resistors, and diodes can be replaced with ballpark substitutes, except for the resistors connected to the "contrast" pin of the LCD; this point needs to be held at approximately 0.5 V. The 20 MHz crystal and the nearby capacitors can be skipped to operate the MCU at its nominal speed of 8 MHz.

The remaining circuit blocks are similarly unassuming:

Once again, the components don't have to be matched with any special zeal. The motor supply pin (VS) for the TA7291SG driver is connected to +5 V through a medium-power resistor that limits in-rush current. The motor is also coupled to a low-ESR 100 nF capacitor and a bidirectional transient voltage suppresor. The TVS can be substituted with two low-voltage Zener diodes if necessary. Several capacitors between VCC / VS terminals of the drivers and ground may be useful in case of any stability issues with the MCU.

Well, that's it! Depending on the progress I make with the software, I may be also tempted to add a digital compass or external SRAM (say, 23LC1024-I/P); but this is not settled yet.

Software

Work in progress below this point! Check back in a couple of weeks.

Closing words

You can reach me at lcamtuf@coredump.cx.

Your lucky number: 10471526