Our newest addition to the strictly outdoor roaming Geobot, is a slope tilt sensor which allows the robot to act on uphill slopes that are too steep to climb, and downhill slopes that if traversed at full speed would cause a possible crash with obstacles at an unacceptable speed. Our solution to this was to add a damped pendulum style tilt sensor as described below in greater detail to sense these conditions an allow the programming architecture to deal with such issues.
We decided that the reaction to over and under tilt in the priority arbitration architecture would be considered an impact, since running into a steep hill is no better for forward motion to the goal than hitting a big rock. Consequently, exceeding the limits of the tilt sensor which we set for +/- 12 degrees causes a top priority impact like behavior to be initiated.
With a 5.0v regulated voltage on the ends of the pot, the center tap was read with a DVM. The center of the pots range was set for a vertical pendulum and of course was 2.50vdc. With our 10 bit A/D converters in the 16F877, and using the 5v as the reference, the following equation describes the ADU value for a given voltage at the pots wiper:
Value = (Vo (1023))/5.00
Therefore for midrange we get around 512, and the values go up as the tilt went down and vice versa.
The tilt sensor is marked also in 22.5 degree increments, however we found a 12 degree tilt was right for most dirt and gravel surfaces.
Here is the basics for the pendulum style sensor. A six inch aluminum bar is attached at the top to a 10K linear taper potentiometer, with a heavy brass knob at the bottom acting like a pendulum weight. The grease on the pot damps the movements but does not alter the swing rest position significantly. As the robot goes up or downhill, the pendulum swings and causes the potentiometer to vary its output voltage into the analog input of the microcontroller and thus the tilt angle can be detected.
Here is the schematic for the sensor. We put a 5v signal on the pot, with a 1uf for decoupling. On the right is the input of the micro controller. Using a 10uF for additional damping, we achieve about a 2 second time constant, allowing the robot to rock and roll over obstacles without reacting to an over tilt condition.
It is important to understand the reason for the time constant for the swing time. When released here at a 22 degree angle, the time to swing to center was about half a second, and then it stops without swinging back and forth. For an outdoor robot, the rocks, bumps and side to side tilts must not set off the tilt behavior unless it continues for at least 2 seconds or more.
End on view, the entire unit stands bout six inches high, and the wires run neatly down the side rail. The golden 10k potentiometer is on the right side.
Two shots of the sensor reacting to an uphill on the left, and downhill on the right. The pendulum always pointing to the ground. About half a volt each way from the 2.5v center position is seen for a 22 degree tilt.
This first mpg movie clip (400k) shows the robot encountering a large pile of dirt, with a steep uphill slope. The robot first hits a weed patch and backs off, but then goes up the hill. At the point where the tilt sensor indicates over tilt, the robot stops for a second, beeps then backs down hill for 1 time constant - 2 seconds. Then a 90d turn to go parallel to the hill to escape it.
The second clip (400k) shows the reaction to a steep downhill slope. The idea is that since the robot will probably not be able to back up, and is generally heading toward its goal anyway, we cut the speed in half to avoid impacting on rocks and trees so hard as it flies down hill as to cause extreme damage to the front of the robot. So as the robot senses the down hill over tilt limit has been exceeded, it cuts speed to a roughly 50 percent PWM on both motors, and as seen near the end of the movie, when the surface becomes level again, it resumes full speed toward its goal.