T.D.R.
Tactile
Design Robot
Updated
4/24/16
Key
Search Words: ROBOT, ROBOTICS, ROBOTIC VISION, ARTIFICIAL INTELLIGENCE,
AI
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.
|
|
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)) {
STATE=6;
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:
S[0]=S[1];
S[1]=S[2];
S[2]=S[3];
S[3]=S[4];
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:
S[4]=0;
S[3]=0;
S[2]=0;
S[1]=0;
S[0]=0;
Previous Uploads on this robot:
Intro page 1
First 4 whisker functioning!
HOME