Excellent! That little hummer really goes. I notice the cameraman got a
little behind at the beginning, and had to peel out fast. I am kinda
surprised at how fast it is going. How many sonars are in the array?
And is these the only obstacle avoidance measures on the bot?
Regarding the fact it did better after the first pass, were you in any
sense using the results of the previous trials, from memory store, to
aid in later trials?
- dan michaels
Yeah, I was the witless cameraman, sitting there enjoying the view
until Irealized I had run out of zoom...
This was originally supposed to be a 1/4 scale version of a vehicle
with a top speed of 25 mph, so top speed of the robot should be about
6 mph, but it's running here at a "crusing speed" of 70% full speed,
so about 4 mph, which is a good walking pace. And I'm kind of out of
4 sonars in the array, spaced at 15 degree intervals. Here's a
Yes, for now. Original plans were to use an array of 6 sonar
for a total frontal coverage of about 90 degrees, but the simpler
4 sonar array with a total coverage of about 60 degrees seems to
be sufficient. It even works remarkably well for wall/perimeter
following. Here is the robot following part of the perimeter of
a big institutional-type building here on campus at SMU (6.2M):
Well not intentionally, but it must be something like that.
Perhaps the IMU Kalman filter refines it's estimate of the
system error over the course of the run?
Hmmm. I imagine your scale-model was mainly intended to test the
odometry system, but I should think the sonar array might not work very
good at 26 MPH = 36 fps. You probably need a bit more lead time on
making steering decisions than this system would provide. I'm just
conjecturing here. OK for 4-6 MPH, though.
I did notice the bot in the other movie having a little trouble
recognizing tree roots and sometimes cutting very close to the tree
trunks. OTOH, 6 wheels did a good job climbing over every obstacle in
the field - picnic table platforms/etc.
Dan your robot is one of the great examples of hobby 'robotics' (quotes for
empahsis on autonomous operation, not RC controlled devices). I am
particularly interested in your mention of an IMU and Kalman filter. I know
what both are, but I'd like to hear more about your implementation. Are you
doing odometry for each wheel? What other inputs are you providing to the
I'm not sure at this time that the full-scale version will ever get
so I'm concentrating on the performance of the robot as an end in
This is the first real outdoor off-road robot that I've built, and
there are some different definitions about what constitutes an obstacle
vs. what is just, for example, a rough road.
The idea was for the platform to be able to drive over anything that
the sensors don't detect, or vice versa (detect anything we can't drive
which it can more-or-less do now. Still a few vulnerabilities, and
some of those corners pretty close! (Although I've seen human drivers
the same ;) With 6-wheel drive and 6-wheel independent suspension, the
robot can pretty much climb over any objects lower than the sonar
Well thank you very much. Sorry about the name confusion.
The robot is running odometry on both wheels to track it's position,
somewhat like outlined here:
In addition there is an inertial measurement unit consisting of a
3-axis gyroscope, 3-axis accelerometers, and 3-axis magnetometer all
driving a Kalman filter to return orientation and accelerations.
On the videos, the robot is using the IMU value for rotations (theta)
and the wheel values for distance (X and Y). Today, I ran the robot on
a large grass field to a waypoint 1000 feet away and back, with an
error of only about 3 feet.
thanks again for the kind comments,
I have used a laser pointer and video camera for parallax type
rangefinding. It works nicely on mazes and other similar situations where
the walls are typically at right angles.
Set the camera high and the laser low (or vice versa) and use a
cylindrical mirror or lens. This will produce a solid line of laser light.
The long axis of the optics must be vertical.
Aim the laser light "sheet" forward and it will stripe everything in one
shot- no scanning which could introduce artifacts. Try to get a good narrow
band red filter (although stacked red gels can work well also). Place this
over the video camera. The camera will see almost nothing except the red
lines. I say lines instead of line because parallax will split it into
multiple segments, depending on the obstacles that are present.
If the laser is low and the camera high, then the height of the line is
a direct indicator of distance, where a low line is nearby and a high line
is in the distance. A simple scale factor relating video scan line to
distance can be used to determine how far away a wall is.
Now, if we are smart, we can create a histogram of the line positions-
treat the line as a trace on an oscilloscope for this to work well. Slice
the video frame into vertical columns and in each column you will have no
more than one (but perhaps zero) red dots. That is a sliver of your laser
line. Make a one dimensional array in software having the same number of
cells as the video image has scan lines- and each time a slice has a red
dot, add it to the proper array cell.
One pass at the image reveals a fascinating fact- if the robot's camera
is perpendicular to the walls, the histogram will have sharply defined
buckets of data- two or three cells will have all the counts, with a little
noise here and there- cells with a single count or two in them.
But if the robot is at an odd angle, the histogram will be all over the
map- one or two counts per cell, for instance, over a broad range. This is
because perpendicular lines tend to add all their red dots into very well
defined array cells, whereas non-perpendicular images will spread them
uniformly per segment over a wide range of histogram cells.
So right away, you know whether your robot is facing the wall at right
angles- a very useful fact for navigating doorways, for instance. This can
help you find a true bearing without fancy compass or GPS hardware or
beacons and trigonometry.
If your robot is in high light environments, the red filter will tend to
eliminate most of the interference, leaving only the laser data to be
considered. Raise the contrast on the image mathematically to eliminate
noise and large blocky images- we really need only the line of red light.
Once you have tried this method, you will see that rounded obstacles in
a strongly perpendicular setting will stand out easily. You can get a
direct conversion of every single pixel of red line into a distance. This
is a powerful tool for mapping things and getting around obstacles, and
depending on your skill as a programmer, you can even tentatively identify
many things. The key here is a controlled environment, as is almost always
the case in robotics.
Sir Charles W. Shults III, K. B. B.
How about using a diffraction grating instead of the mirror/lens?
This would produce a patter of dots that would be predictable
and might give more information than a line. Or might now;
I haven't had time to try this yet.
D. Jay Newman
We have a commercial IMU, but have done some work with a home-brew
version. Are you familiar with the sourceforge autopilot project?
and these folks:
The one we're currently using is from Microstrain:
It is a 6DOM device but at this time we are basically using it as a
gyro-corrected 3D compass. The pitch and roll angles are only used to
recover from unstable attitudes. Unlike the IMU in the 2-wheel robot,
nbot, where the pitch angle is used for balance:
As Sir Charles correctly observes, this present robot is designed to
run outdoors in unstructured environments where the ground is not level
and the obstacles are not well defined. This is a challenge for the
mechanical platform as well as the sensing:
My current thinking is that I will add dynamic balance, like nbot, to
this robot as well, so that it can balance on the front or rear two
wheels, and drive arouind that way, making the vehicle extremely
difficult to tip over. I've got the data coming from the IMU anyway,
and it would be pretty cool, I think.
Static + dynamic balance makes sense for an offroad vehicle; I bet
Detroit will offer it someday!
Cylindrical lenses are often referred to as "anamorphic" lenses- they
are used in the Cinemascope process. I tried looking under "anamorphic
lens" in Google and was astounded to find what they want for them. But
there is a simple source that I remembered before I tried to come up with
one myself. There is a "single line text magnifier" that is available in
many drugstores; it is exactly what you want and is in the price range of
from one to five dollars US.
Your best bet is to either find a scrap or surplus unit if the text
magnifier does not pan out, or if you have a little patience and skill, get
a Plexiglas rod and cut it down and polish it yourself.
This is not for the faint-hearted but the results can be very good. I
gave it a shot and came up with a quite decent lens on the first try. Here
is what to do.
Locate some clear plastic rod. Using a bandsaw, cut off a short
section, perhaps about a centimeter in length. Cut it across the axis so
that you have a stubby cylinder. Clean or sand the end and then stand it on
the end and cut a chord through this and you will have a piece you can
polish down. Make your cuts as square and accurate as possible; you may
want to make a jig.
Now, using fine sandpaper, rough sand the unit until the piece is clean
and will set flat. Whatever you do, refrain from flame polishing the piece
as this will distort the curvature terribly- the thin ends will curl and
wreck your work. This must then be polished as flat and smooth as possible,
because you are going to be feeding your laser beam into the flat surface
you are polishing.
There are plastic polishing kits available from the plastic supply
houses, and you can get very, very close by rubbing the piece over a large
flat steel file with fine teeth. A few passes over 600 sandpaper on a
stable, flat surface is next, followed by the polishing. I use 1 micron
compound and a little water, and you can make it clear as glass. A drop of
water on this surface is very useful as you can see where it is going as you
are getting close.
I know this sounds finicky and time consuming (and it is) but this is
one skill you will not regret adding to your bag of tricks- the ability to
polish plastic properly. You can then make all sorts of lenses or clear
surfaces or windows for things. Even machining a Plexiglas part and leaving
a perfect surface on one critical face then becomes a feasible act.
But do try the drugstore first and see if you can find the text
magnifier- it has to be the long thin type that magnifies on one axis only.
They are cheap and pretty available.
Sir Charles W. Shults III, K. B. B.
Most of the animorphic lenses Chip talks about will be way too large for
the average sized desktop bot. You want a modern line-generating optic,
the kind they use for small scanners.
You can almost always find something decent at Meredith Instruments
. Check out their "Line Generating Optic," for
$15 (a little high, but Dennis provides good customer service). It's the
perfect size, and unlike an animorphic lens, it's low-loss. Check around
and you should be able to find these for $1 to $5. Try
midwest-laser.com, lasersurplus.com, and the other laser surplus
outfits. Also be sure to read Sam's Laser FAQ
for other ideas.
Keep in mind that most of the cheapo penlight lasers come with different
diffraction heads, and a line optic is usually included. These work by
diffraction through an inexpensive film filter, and the line quality
isn't always very good (it might look "hazy"). Still, it might not
matter for your application.