This robot was featured as NASA's
Cool Robot of the Week for 19 May 2003.
Thereafter Scientific American's online website,
SCI/Tech Web Awards, honored the NASA page as one of the top 10 engineering and technical web sites for 2003,
referencing nBot in its text. nBot is also featured in a new O'Reilly book spun off from Make Magazine in 2006,
called
The Makers.

The basic idea for a two-wheeled dynamically balancing robot is
pretty simple: drive the wheels in the direction that the
upper part of the robot is falling. If the wheels can be driven in such a way as to
stay under the robot's center of gravity, the robot remains balanced. In practice
this requires two feedback sensors: a tilt or angle sensor to measure the
tilt of the robot with respect to gravity, and wheel encoders to measure the position
of the base of the robot. Four terms are sufficient to define the motion and
position of this "inverted pendulum" and thereby balance the robot. These are 1) the
tilt angle and 2) its first
derivative, the angle velocity, and 3) the platform position and 4) its first derivative,
the platform velocity. These four measurements are summed and fed back to the
platform as a motor voltage, which is
proportional to torque, to balance and drive the robot.
Here is a diagram
of the algoithm with some code and implementation notes.

The robot hardware was built in my home machine shop. Here as some
exploded
views of the motor platform and drive components, as well as the
castering tailwheel, now removed, which was used for testing
and calibrating the motors and encoders before nBot was able to balance on two wheels.
The robot uses the
HC11 robot controller developed for the
M.I.T. 6.270 Robotics Course, the
same robot controller
used on the
LegoBot
and
SR04.

Rev 2. After learning to balance the pole, the robot was re-built as a
two-wheel version, with the
battery mounted directly above the wheels. The ball-bearing pivot was attached to the
bottom of the robot with
a short aluminium feeler touching the floor. In this way the robot can sense it's angle to the
floor and, assuming the floor is level, to gravity as well. The aluminium feeler has a teflon pad
on the end to help it ride over cracks and joints in the floor.

Rev 3.
For the third version a third deck was added and the batteries moved to the
top deck. This allows
the robot to generate more torque without having to tilt over as far.
The side view of the
platform shows the battery and user interface on the top deck, the microcontroller and
h-bridge on the middle deck, and the motors and axles on the lowest deck.

The ball-bearing pivot and angle sensor were replaced by a piezo-electric gyroscope and
ADXL202 accelerometer mounted just above the motor deck. Those sensors were eventually
replaced by a commerical inclinometer, the
FAS-G from MicroStrain, also consisting
of an ADXL202 accelerometer and a rate gyro, similar to the boards and kits available from
rotomotion. This
rear view shows the
complete stack.

Rev 4.
New base and motors for nBot, using the
Pittman GM8712 DC gearhead motors with home-brew shaft encoders. These are
powered by 18 NiMH 1800 mAh rechargeable AA cells, at about 24 volts. They have a lot
more torque at very low rpm than the previous 12 volt motors, as well as higher maximum
rpm. The result is that the robot is more stable and can respond more quickly.

The gyroscope and accelerometer are combined with
complementary filters
to provide an inertial reference sensor. The ADXL202 accelerometer provides accurate static
tilt information, when the robot is not accelerating. The gyroscope can be integrated to
provide accurate dynamic tilt information, but the integration tends to
drift over time.
Combining the two sensors provides a robust inertial measurement. The
FAS-G IMU implements
a "Weiner" filter to combine the two sensors into a single measurement. The
sourceforge autopilot project. and the boards available from
rotomotion.com use a "Kalman" filter. Some really good information on
inertial measurement units is available from the
sourceforge autopilot project.

Here is a video
of the robot balancing.
(2.2M .mpg),
(2.3M .wmv),
(1.4M .rm)
It shows nBot being shoved
and regaining its balance, and being pushed off center and resisting.

Steering.
If a constant offset voltage is added to one wheel and subtracted from the other wheel,
the robot balance is not altered.
In this way the robot can be steered while maintaining its balance.

Here is a video
(2.1M .mpg),
(1M .wmv),
(280K .rm).
of the robot spinning in place while balancing.
I'm using a knob on the robot to add a voltage offset to
one motor and subtract it from the other.

Driving.

If a small offset is added to the tilt angle the robot must remain in motion to stay balanced.
This combined with a voltage offset added to one wheel and subtracted from the other will cause
the robot to drive in a circle.

This dark mpeg (2.9 Meg) shows the robot circling smoothly on a tile floor,
until it runs into my foot. Because of the PWM wheel offsets, it pivots away from the collsion
and continues; sort of a built in "bumper" behavior without an actual physical bumper. (It's
really too dark to see what's going on. I'll try to make a better one soon.)

nbot on gravel (1.3 Meg) shows the robot circling on a gravel driverway.
You can see the platform rock fore and aft as it tries to get enough torque to climb over rocks and maintain
its balance on the uneven surface.

Navigating

Like my
other robots (except the
camera car), this is an autonomous robot. That is, it is not radio
controlled by a human and there is no R/C link. Instead it has an onboard computer
(MIT 6.270) that makes all of
its behavior decisions, in addition to balancing the robot.

In the following mpeg videos,
the robot is running a simple navigation
program that uses wheel odometry
to go forward 24 feet (or some arbitrary distance) and turn around and come back, looping endlessly.

Most of the following videos are of the robot running this odometry program in different environments,
indoors and outdoors, etc.

Here is a video
(7.8M .mpg),
(3.4M .wmv),
(1.4M .rm),
of the robot running the same program
on an inclined driveway. Note the "pirouette" required to keep its balance while turning around
on the incline. The cicadas singing in nearby trees provide the soundtrack for a hot Texas
afternoon.

For outdoors perfomance in general, the robot's balance seems to be unaffected by uneven and irregular
surfaces, as this
outdoor mpeg (2.7 Meg)
demonstrates.

I think the two-wheel balancing robot will turn out to be more stable than my other three-wheeled robots.
Here is an mpeg movie
(3.3 Meg) of the balancing robot going up and down a loading ramp. Notice how it leans
backward as it goes down the ramp, and forward is it goes back up.

Notice also that it takes several trys to overcome the bump at the start
of the ramp. The robot initially bounces away, leaning further forward to get enough
torque to climb over the bump and start up the ramp.
At the top of the ramp the robot
touches the left wall. At this stage in development it has no sensors to detect collisions.
The balance algorithm bounces it along the wall until it is finally free at the corner. In
its final version it will have sensors and behaviors to avoid running into things, but note
that the robot does not lose its balance and fall over when it does collide.

Here is a video (5.2 Meg) that shows what happens when you try to run down-hill too fast without
wearing your helmet. In order to slow down the robot must first speed up, to get the wheels
underneath and eventually out ahead of the center of gravity. If the robot is going too fast, it
is unable to speed up, and hence unable to slow down. Also includes some successful attempts.

So I started the robot at the bottom of the ramp further away from the wall, hoping that
the odometery errors would be small enough that the 'bot could made several runs up and
down. Instead, it climbed the ramp smoothly and then
fell off the side (2.8 Meg mpeg)
coming back down. Ouch! Time to think about installing those sensors...

Adventuring

Update Rev 4: The two-wheel robot is indeed able to handle much more agressive slopes than my other robots.
Here
(3.6 Mb mpeg) ,
(800K .wmv) ,
(400K .rm) ,
is the Rev 4 robot descending a very steep uneven grassy slope on
the campus of UNT. Note the bounce and recovery as it hits the concrete at the bottom.
Here (3.2 Mb mpeg) is another, with a more graceful dismount.
This one (2.7 Mb mpeg) got going too fast and took a tumble.

nBot's first step. I think it's possible that the two-wheel balancing robot may eventually
be able to descend stairs, even if it can never go up them.
Here (1.5 Meg) is nBot successfully negotiating a step. One
small step for a robot, one giant leap...
Here (1.6 Meg) is another attempt.

Here is an mpeg (5.3 M) of the robot obliquely descending a set of
canted stairs. Leaning left and right does not affect the robot's balance, unless the tilt angle is great
enough for the center of gravity to be outside of the base. Watch that last step!

Here is a video
(5.9M .mpg),
(3.0M .wmv),
(1.2M .rm),
of the robot set to go in a straight line
cross country, traversing the campus of UNT and more-or-less following a footpath.

This mpeg (5.3 M) is of the robot doing a 24 foot looping
pattern in a sloping couryard over a drain and some broken concrete.

Here is a video
(1.4M .mpg)(730K .wmv)(340K .rm)
of the robot attempting to
to descend a gravel road that is too steep/rough for it to handle. That's my mother in the background
talking encouragingly to the robot like she does to all small creatures.

A tour of the Seattle Fairgrounds with nBot during the Seattle Robotics Society Robothon 2003.

Other two-wheel inverted pendulum balancing robots:

Here is
Joe le pendule, a radio-controlled 2 wheel robot that seems to work very well. Included are
some cool mpeg movies and documentation. They have a
pdf document in English which describes their project. They seem to be getting
all their sensor data from only 2 wheel encoders and a rate gyro.
Here is a local copy I've downloaded.

Steve Hassenplug has built a two-wheeled balancing robot from Legos he calls
LegWay that uses
IR proximity detectors to balance and also do line following. Pretty cool.

Ted Larson is working on a two-wheel balancer with Bob Allen. The web page includes some
videos of their robot in action (always the best!) as well as a link to their recent appearance
on TechTV.

Larry Barello of the Seattle Robotics Society has done some excellent work on
GyroBot, a gyroscopically
stablized robot.

Duane Gustavus is working on a balancing robot with the weight distribuition arranged so
that it can drive on three wheels or tip forward and balance on two. Very cool. Duane uses the
MRM board running RTEMS

Dan Piponi has a clever balancing robot
Equibot
that uses a Sharp infrared sensor to measure
the distance to the floor and uses that information to deduce tilt angle.

Juan Pablo Angulo has developed a similar balancing robot using IR to measure
floor angle. There is a nice writeup of his work on the
Parallax website.

Ron Grant of the
Dallas Personal Robotics Group
is working on a nifty balancing robot. He is currently using a "floor feeler" to determine tilt angle,
a potentiometer driven by a lever and ping pong ball that rests on the floor. Ron uses a home-brew
CPU board with an ATMEL controller and on-board H-bridge. [Ron, where did your site go?]

Jack Wu and Jim Bal at Carnegie Mellon University have constructed
BBot as a semester design project for the Fall of 2003,
"a self-balancing two-wheeled robot." Based on their 68 Meg mpeg video, it doesn't appear to actually
be balancing yet... (Note: link no longer working as of 07 July 04. I guess school's out)

Lee Magnusson at MIT is working on a
self-balancing unicycle. His page has links to some videos and a pdf report. From the videos
it looks like the human rider still has to do the side-to-side balancing. Cool nonetheless!
(This link also not working as of 07 July 04. The college sites must go down at the end of the semester.)

The Technology Department of the Bolton School in Manchester, England, has built this nifty single
wheel cycling robot which they call the
Loony-Cycle. I believe this design has to
stay in motion in order to maintain balance. It is steered with propellers that are arranged at 90 degrees
to the direction of travel.

Sanghyuk Park, a recent graduate of M.I.T., has a fascinating group of robot control/navigation/guidance
projects including a two-wheel balancing robot named
Balance-bot I. Sanghyuk writes that he was
"deeply impressed" with the nBot website, which pleases me greatly! Be sure and check out his
unmanned air vehicles projects as well. Very intriquing.
[But, as of 04 Feb 2005, Mr. Park and all his nifty robots seemed to have vanished from the Internet.]

Four members of the The University of West Florida's Institute for Human and Machine Cognition have
built a self-described Joe le Pendule look-alike as a testing platform for autonomous agent software.
Real-time Linux and wireless ehternet! Some video and lots of links.
Their robot and a several others (including nBot) have been gathered together as
Joe's Relatives on the
Joe le Pendule website.

Joris Maervoet and friends have built a
Balancing LEGO Robot using Java and standard LEGO parts, including the LEGO light sensor,
that can balance while
standing on a mirror. Very nice web page: graphics, charts, graphs, and code.

Alistair Sutherland and Thomas Bräunl are working on a couple of two wheel balancing robots they call
ballybots
based around the excellent
eyebot robot controller.

Blind Man is a fuzzy logic-based two wheel balancer that appears to be a class project of the
University of Alberta. The robot uses a floor feeler to sense it's angle, like a blind man's cane,
hence the name.

uBot from UMASS, Amherst, by Patrick Deegan and Robert Grupen, appears to be
an R/C controlled 2-wheel balancing platform using a
Rotomotion IMU and custom software. Nice site with descriptions and mpeg videos. Check out uBot standing up on its own from leaning on its kick stand in the 3rd movie.
Update: 03 March 2007: Patrick sends a new web page with more work completed on
several new two-wheel balancers including some with grippers and manipulators. Includes videos of various
lifting and pushing tasks while balancing.

Ballbot from the Microdynamic Systems Laboratory at Carnegie Mellon University balances on a single wheel, actually a ball.
Press release includes links to videos of the robot recovering from a disturbance and navigating across a room.

Nuts_and_volts Magazine for November and December 2006 have a two-part
Personal Robotics article
by Phil Davis and Brandon Heller, titled "Building a Balancing Bot on a Budget."
Their design is based around a
SparkFun 5DOF IMU and modified R/C servos, and the article includes a link
to their Kalman filter
and balancing code on the Nuts_and_Volts ftp server.

Brian Kuschak has a very nicely implemented
home-brew balancing robot based around an ARM7 processor and custom inertial measurement sensor.
Lots of good information and details, very nice webpage.

Dirk Uffmann from Munich, Germany, has developed a two-wheel balancing robot based on fischertechnik components, named ARTIST, with home-brew electonics and tilt sensor. Nice web-page with lots of links and videos.

Frits van Evert and colleagues at the
Wageningen University and Research Center in the Netherlands
have built a two-wheel balancing "field robot" to compete in the
field robot competition in June of 2007. Their web site has photos and videos of
the robot in action navigating autonomously through rows of corn, and they have sent
along a very nice note thanking nbot for "inspiration and lots of practical information."
Great job!

This company has a nice
pdf document
on building a two wheel balancing robot like Steve's "Legway" using LEGO parts and
a couple of photo reflector sensors for measuring the angle to the floor.

These people from a company called "Balbots" offer a kit for a photo-reflective type balancer. Looks pretty nifty, lots of good documentation and a nice design.

Ted Larson has also developed some nice balancing robot components listed on his
CTG robotics website. I don't see any prices listed yet.
He show a very nice looking 3-axis inertial measurement unit, somewhat like the ones offered by
Rotomotion.

Stumpy is an inverted pendulum walker, or more accurately an inverted pendulum hopper.

The 1932
Dynasphere
was a two-person
single wheel vehicle that could cruise at speeds of 30 mph. Ok, it's not really the
same thing as a two-wheel dynamic balancer, but it's a very cool picture! I especially
like the 1930's geek driver, complete with suit and tie.