In a normal household environment a robot will encounter many obstacles which it will be able to easily detect and avoid with standard IR Proximity sensors, or an instrumented bumper system. There are however, numerous situations in which the robot will become stalled, stranded, or entangled in which these sensors will not detect. Stasis sensors fill this very important gap in sensory data and will allow the robot to attempt an escape to free itself and continue on with its assigned task. In this report, we will discuss methods of stasis detection, and the associated programming behaviors for use in a household robot.
In our experience, every home robot that we have built that did not have a stasis sensor would in a matter of hours become entrapped on a ledge, corner of overhanging furniture, or on a simple lamp or extension cord, no matter how well built or thought out. The very nature of the unprepared home environment presents complexities which we cannot plan for in every case. Household robots have in general, two modes of operation: Performing a task, and getting to the destination to perform that task. These can be layers in a subsumption style architecture staggered such that the travel to and from a goal can be layered with the stasis behavior in the appropriate level. A simplified example of this can be a Wander Behavior at the bottom, an overlying Bumper impact behavior, a Stasis behavior, and finally, the primary task such as grabbing that can of alcoholic beverage from the fridge at the top+. With this type of architecture, if the robot gets entrapped on the way to the fridge and the bumper sensors do not register an impact, the Stasis behavior will engage and attempt to free the robot.
Stasis Sensing Techniques
Here we will discuss a variety of techniques to detect Stasis, and the issues with each method.
Optical Floor Sensor
IR Ranging Sensing
Sonar Ranging Sensing
Visible Light Photocells
Stasis Wheel: Mechanical design
The basic mechanical design is simplicity in itself, as illustrated above. There are several ways to implement this design mechanically. One technique used in our Ostracode and Paami robots is a cantilevered strut with limited rotational movement which drops a drag wheel to the ground, and rides up and down on uneven surfaces by pivoting the arm. A photo interrupter is mounted on the arm, and intercepts the dark sectors on the rim of the transparent drag wheel. In PicBot IV, we implemented the concept on a much simpler and smaller scale to fit the physical constraints of the small robot design. Here, as seen in the illustration, the drag wheel is mounted directly on and axle on struts glued to the opto interrupter itself, and using a .015 lexan sheet curved rib as both a support arm and preloaded spring to both press the wheel into the ground firmly, and limit its drop range to about a quarter of an inch. This design was easy to mount and the curved rib was a strip of lexan bent with small pliers into the required shape since lexan bends and doesn't break like acrylic.
Stasis Wheel: Electronics Design
Depending on how you detect the stasis wheel rotation, will determine the electronics interface. In Paami, we used a Fairchild QRB1114 opto reflector module and detected the IR reflection from a printed paper wheel encoder. This required not only an LM324 opamp for a signal buffer, but was followed with a comparator with hysteresis to form a Schmidt trigger arrangement for the input into the processor. You can go this route which offers great flexibility or as a much simpler alternative, make your stasis wheel thin and clear such that you can use a photo interrupter that the wheel can fit into. We went this route with PicBot IV, and with the proper pull up resistor our NTE 3100 unit put out a full TTL range with no buffering. The best part, is that with most PIC processors, the many of the inputs are Schmidt trigger inputs, and will automatically shape this type of nearly square wave shaped form for an easy interface. For other processors, without Schmidt inputs, you can add a Schmidt trigger quad package to your circuit board and use one of four devices and have three spares for other applications.
Fortunately, programming for Stasis sensing is fairly straightforward. Essentially consisting of a Finite State Machine with two primary states: Scan, and Escape. During the Scan state, the stasis sensor is continually polled to determine a stalled condition. This is very simply done by counting the edge transitions over a small interval such as 5 seconds. If during that time, the count falls below the expected value or is zero, then the stall condition is met, and this is the trigger for the stasis escape state.
To escape Stasis, the general idea is to reverse course for a small amount of time and rotate away from the entrapment trigger. The most successful routine we have used in a home environment is to do a reversing waddle. Here, we back up one wheel at a time in succession, to escape the lamp cord or carpet thread we are stuck on. Then after a few inches we rotate the robot by a random amount so we do not re-enter the entrapment condition again. If the stasis sensor is tripped again in a minimum time frame, we may choose to try again or shut down and call for help. In addition, we may add a stasis detect output on the stasis processor, such that other processors higher in the subsumption architecture can use this sensory information to make higher level decisions.
Testing and Evaluation
Our Robot Arena was used once again for the preliminary evaluation, followed by an actual home environment on both tile, and carpeted floors. Here is a movie of the arena testing. Here you can see the PicBot running into a very thin obstacle (foam board) and stopping with the wheels still driving at full speed. After 3 seconds, the bot decides it is in a stasis condition, and stops, makes an appropriate sound, then waddles off the obstacle. It then rotates randomly, and moves on.
In the household environment, the robot performed very well on both tile, wood, and carpeted floors. While the wheels slipped easily on the smooth surfaces, I might shorten the 3 seconds timeout to perhaps shorter on carpet, since the wheels tended to completely stall upon impact.
Our testing and data from two of our previous very successful home roving robots Ostracode and PAAMI have shown without a doubt that a stasis sensor is absolutely essential to keep the robot from getting caught or stuck in a variety of situations in which no other sensor would detect a problem. It is such a simple addition to consider for your own robot, and the payback will be a robot that roams in your home not for hours, but for days on end without getting fatally snared on a carpet, cord or perhaps corner of some furniture.