Tactile Design Robot

Updated 4/24/16


 A brand new robot, designed to test out the concepts of using insect like antennas and small mammal whiskers to assist in internal home navigation. Only six inches in diameter, it is the perfect size for our robot arena test area and will be right for upstairs testing in the home environment. All programming is done using CCS-C.

The next phase in the development of this robot is to fix the corner escape problem. Once this is done, the robot can be free to roam the arena and do sensory experiments without getting stuck in the 4 corners of the arena.

The general rules are:

1. Left whisker impact – Stop, backup and turn right, continue on.
2. Right bumper impact – Stop, back up and turn left, continue on.

 This is a good formula to almost guarantee that your robot will be stuck or trapped in short order in your home environment, or even in a more controlled maze like arena like test area. First, as soon as the robot encounters a corner, it will be trapped in an endless bouncing back and forth movement until the batteries die. This is called "Corner Entrapment", or "Canyoning" and there are a number of solutions that can be implemented to correct this condition.

 This is the most common type of time correlated impact event robot experimenters encounter. In this case, the robot will become trapped in a corner of a room, or parts of furniture at the correct spacing by bouncing back and forth between adjacent walls. For example, when a robot hits the corner with its left whisker, it turns right evasively. But then a second later, it hits on the adjacent wall with its right whisker and then turns left evasively. This can go on indefinitely until the robots batteries run flat. Detecting and correcting this condition is of major importance if we expect the robot to function in a household environment. To correct this condition, we first have to detect it. This is done by recording the directions of the last four or five impact events in memory, and possibly the time between them. Then we examine the data to detect "canyoning".

 To implement this method, we will program the robot to remember. This is not difficult, and introduces the concept of learning matrixes. The basic idea is to set aside four or more variables that will be used to store direction or timing data. Then after every impact, we take a quick look at the list of for variables, which is really a 5 element array. If the pattern recorded over the last five impacts alternates right/left, than the corner entrapment condition has been detected. You can also time the period between impacts and if the sum is less than say 10 seconds, you have a series of rapid impacts that may requrie escape. For most cases this will suffice to escape the corner by rotating 180 degrees.
Its probably 99 percent effective at corner escape. A corner will record as: Right-Left-Right-Left or its inverse. If this occurs AND your time sum is short, then you are certain you are trapped in a corner.

 Left: Escaping a corner. Really, the only sure way to get out of a corner is to do a 180 degree turn away from it and drive off. While this may face the robot in the wrong direction to achieve its goal, it is better to do this than stay stuck indefinitely!

Below is a movie clip of the robot in the arena, in which it demonstrates the corner entrapment and escape after using only the directions to detect the condition.

Movie 3
Corner entrapment Escape
Some Example C code used to implement corner detection:
First we initialize the array at the top of the program:

int8 S[5] = {0,0,0,0,0};  //Right/Left storage array 0=Left, 1=Right

Each time we make contact with any whisker, we first assign the direction to the 4th and top element in the array:

For a Right hit:
 S[4] = 1;  //save direction
Next we test last 5 impacts to see if pattern emerges:
if ((S[4]==1) && (S[3]==0) && (S[2]==1) && (S[1]==0) && (S[0]==1)) {
            break;  }

State 6 is the corner escape state.

After taking normal evasive action on a whisker hit, such as turn left or right, we update the array and roll it down an element for next time:

 //Update direction array:

If this condition is not met - or its inverse - we continue on forward.  and just keep on saving the directions to the 5 array variables.
Now if we DO have to evade the corner, we then do a 180 degree, then clear the Array for the next set:

//Zero out direction array since you just escaped:

Previous Uploads on this robot:

Intro page 1
First 4 whisker functioning!