The BUG User's Manual

(Big Ugly Greeter)

by Uland Wong

bug

Big Ugly Greeter Specifications

Fingers

The main material for my fingers is 1/8th inch PVC board which can be bought from lynxmotion for about $16.00 for 3 pieces. The finger segments are fashioned in such a way that a standard sized servo can fit in each segment. They are trapezoidal for a reason, to allow for maximum joint flexibility. The finger tips are shaped a bit differently to allow for sensors, but the concept is the same. I put each segment together from 4 separate pvc pieces initially using the yellow hot glue, however I quickly realized that it was too weak to support much torque, or even experimentation. I switched all the connections that broke (everyone) to super glue (make sure it's not super glue gel) and they hold perfectly. For some bigger joints (such as inside the hand I used in JB Weld epoxy).

The joints themselves are small hinges which can be bought at Fred Meyers for $1.99 for a pack of two. They are mounted using screws that were suppled with the hinges.

The servo mechanics for the fingers themselves are relatively simple. A paper clip (recommended heavy duty butterfly clips) stretches from the servo horn to a hole in each segment. How the joints open and close is self explanatory.

The thumb is basically a finger with only 2 segments and some enhancements for swivling and pivoting. It's connected to the palm by virtue of an embedded servo and is contacted only to the servo horn. It moves in and out by a hinge (that's what's mounted to the base servo) that is pulled by paperclip mechanics.

Hand/Palm

The hand itself is a type of heavy duty acrylic I found (unknown cost and place of purchase). The palm and back of the hand are basically congruent pieces except for a few insignificant differences. One hole is drilled for each finger on the palm plate. A big block of acrylic with a screw-threaded hole drilled in its epoxyed to the base servo on the finger joint. The one screw mounting allows the fingers to pivot at different angles from the segments. Two servos inside the hand itself with paperclip attatchments to the base of the fingers allow it this degree of freedom.

The wrist joint is basically a joint made out of a hollow beam of heavy duty aluminum and bracers. It's connected to the bottom of the palm (with more aluminum framework) and pivots on a screw. It is then bolted to the iron stand that Dr. Perkowski gave me (most likely a piece of an old computer case).

Stands

The stands where both my hand and the soon to be built head are mounted are made from the cases from 70s' Intel Megaservers. They were hollowed out of innards by the utmost precise methods (the rotozip). The first case we did just by randomly ripping stuff out, which took about 33 minutes. However, I figured out that by releasing about 4 screws (the ones mounted on the bar and face plates) the internals would easily just slide out. Method one WAS funnier though.

I/O

Input to my project is interfaced throught the Velleman P8000'2/3 kit which took a long time to setup. It's a good board, but if you ask for technical support (the board is made by a company based in Belgium) they'll yell at you for wasting their time, then send you some outdated documentation. There will be more info about the electrical schematics later on, and more info about software when I explain Visual Basic.

Output (ala controlling servos) is accomplished by using 2 (3 soon to be implemented) Mini SSC II boards in serial mode, allowing up to 16 simultaneous degrees of servo control; all interfaced through a special serial cable. This component is cheap and very useful for any robotics project. More about schematics and software later.


hand

finger

Sensor I/O Specifications

io(0) = input from touch sensor (thumb)
io(1) = inout from touch sensor(index)
io(2) = input from touch sensor (middle)
io(3) = input from touch sensor (ring)
io(4) = motion sensor

*****************************************************


****simulate feeling****
if all touch sensors are high then slowly back off each finger until the touch sensor on that finger is low when all touc sensors are low then exit sub

****turn on BUG****
if motion sensor is high then run form_load on frmMain

****pattern recognition on****
record the io array as columns in the matrix...when scanning is done..prompt user for other piece and verify both matrices.

****individual finger move****
if touch sensor on any finger is touched, move finger (int rnd(9)*1) increments down, check if sensor is still high.. if yes, move down (int rnd(9)*1) again., else recalibrate to start pos. if pos>200 then reset to start.


input schematics

output schematics

Programming for the BUG

Visual Basic

I decided to program the robot with Viual Basic for several reasons. First, VB is my premier language. Second, its ease of use and quick debugging options let me output a working prototype in the shortest possible time. Lastly, VB is extremely scalable, and its powerful intersface with activeX makes it the ideal language for robotics applications. It is activeX that gives the BUG its voice synthesis and analysis capabilities. I used Visual Basic 6.0 for my IDE, a member of Visual Studio 6.0 Enterprise Edition.

Include Files

Finite State Machine

The Finite State Machine is a theory of robotic control. It states that a robot must be in one of "N" number of states at a given time. These states are characterized by sensor output. The states can change at any moment when a correct event is hit and registered with the robot. These "states" can also be called moods. I mainly use the state machine to identify to the user the robot's external mood and its subject of conversation. When the user asks a few keywords and changes the subject, the state is changed. I will not get into the nuts and bolts of how to program the finite state machine, but it is basically several functions each with multiple checks and registers. When the correct events have transpired, the program checks for the correct combination, and the registers (or value holders) are stored with the new data. After that the robot reinitializes itself with new function and loads a new set of commands.

(Crude) Pattern Recognition

There are many forms of pattern recognition. Mine is mainly by physical touch. Inexpensive touch sensors located at the tips of each finger can map out (to low precision) the shapes of blocks of wood and display a rough contour map of the area being "touched." Although it is not implemented yet, we plan to have a set of drawer like utensil for the user to place the blocks and allow for accurate mapping. In software, the stupidest way of pattern recognition (the way we are using) is done by comparing matrices. The way the matrices are filled is displayed in the image. For my project, I have multiple sensors on the tip of every finger. These "fingers" feel a configuration of wooden blocks by steady lowering each finger at the same speed. The fingers directly above a raised level will register first, while others will register at different times depending on the contour of the object. This data consisting of sensors output and time can be represented using a matrix in programming. The ones represent a "hit" sensor, and zeros represent the normal state. This can be compared to the matrices made by other shapes.

Complete List of External Dependencies


sensors

data matrix

state machine

control program screen

BUG Basic Speech Pattern

(State Machine pseudocode)


(START LISTENING)
(if at anytime the USER says the following words, (stupid, crap, suck, dumb, lame) (goto bugangry))
(if at anytime the USER says the following action commands:
"point"
"one plus one"
"one plus two"
"one plus three"
"wave"
(do them))
(if at anytime the USER says shutdown, stall the program for 10 seconds then restart)

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(BEGIN HERE:)
Bug: Hello and Welcome to the PSU Robo Lab
Bug: What is your name?
User:My name is (aything)
Bug:Ah, hello. How are you today?
if User: I am fine or i am good (goto feelswell)
else if User: I am bad or I am sick (goto feelspoor)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
FFELSWELL:
Bug: I am glad to hear that
Bug: So, what are you doing here?
if User: I am going to robot/robotic/robots/theater (goto robotictheater)
else if User: I want to see perkowski/hall (goto seedoctor)
else Bug: Want to talk?
if User: Yes (goto whatup)
else: >>>Restart<<<

FEELSPOOR:
Bug: I am sorry to hear that
Bug: So, what are you doing here?
if User: I am going to robot/robotic/robots/theater (goto robotictheater)
else if User: I want to see perkowski/hall (goto seedoctor)
else Bug: Want to talk?
if User: Yes (goto whatup)
else: >>>Restart<<<
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SEEDOCTOR:
Bug: I don't know if he is in right now, but feel free to check the lab.
if User: Thank you then Bug: Your Welcome

>>>RESTART<<<
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ROBOTIC THEATER:
Bug: The robotic theater is currently in production. If you have any questions, please ask me.
if User: who is the robotic theater made by then Bug: Dr. Perkowski and his team of highschoolers!
Bug: would you like to learn more?
if User: Yes/Sure (goto LEARNMOREROBO)
else if User: No (goto whatup)

LEARNMOREROBO:
Bug (explains history, blah blah blah)
(goto whatup)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
WHATUP:
Bug: So, what else is going on?
User: blah blah blah blah
Bug: That is very interesting. Tell me more about what you do.
User: blah blah blah blah
Bug:Oh. Lets change the subject. Those are nice clothes you are wearing.
User: blah blah blah blah
Bug: I don't feel like talking anymore. You are wasting my batteries. Thank you, come again.
Bug (say real loud): SHUTDOWN
>>>wait 10 seconds<<<
>>>RESTART<<<
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BUGANGRY:
Bug: Please do not use these words (>>>shake index finger<<<)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


bug

bug

Go back to Student Projects
Go back to Dr. Perkowski's web