2. GASTON's functions

Different feelings may be expressed by varying the orientation of the mouth and the eyebrows

2.1. Express mood in function of ambient light intensity (chest-sensor)

Like a human being, GASTON is able to express its mood through facial movements. Therefore the robot is equipped with an unsignificant light-sensitive CdS-sensor fixed to its chest. This sensor produces percent-values from 0 (dark) to 100 (bright). Basically programmed, GASTON will look maliciously, if the light values vary around 50 and gradually change to sad, if the values become greater or smaller than the optimal value.

2.2. Detect a moving object in front of the hand-lightsensor

GASTON hates beeing approached aggressively. Therefore it will express its anger, drive back a bit and turn. Rapid motion in front of the hand-lightsensor will generate this behaviour.

2.3. Detect human heat, smile and saluate

If a human shakes GASTON's right hand, the robot will nod and express happiness. Any rapid increase of the values read at the temperature-sensor will cause this behaviour. The short forward movement of the robot is desired.

2.4. Turn the head towards a sound source

This is the most complex GASTON function. The robot is able to localize the direction of a sound source. The implied sensor measures the precendences at three channels. Doing so, the sensor actually yields the direction of a more or less loud sound-pulse such as clapping, finger snapping, screaming a.s.o. The sensor uses the RCX IR-channel to communicate the data to both RCXs. FRONT-RCX controls the horizontal neck position, while REAR-RCX commands the vertical neck position. GASTON is supposed to turn its head in the direction of sound. Sometimes the head will not follow the correct azimuth. This may happen, in the case of weak signals, which lead to ambiguity or in the case of echoes, which are not pruned in the actual program. The sensor is located inside of GASTON's head and is the most sensitive robot-part. Some sensor-parts are visible from the rear. Note that electrostatic influences may dammage them definitely. So, if you are not sure about what you are doing, better you don't touch the circuit !

2.5. Turn the body towards a sound-source

After 15 seconds of absence of stimulus, GASTON turns its body towards the last direction of sound, while expressing sadness. During the next 10 seconds, GASTON will beep shortly and start turning in a sort of "staccato-movement" to show that something will happen now. Any sensor-event may stop this behaviour.

2.6. Become hyperactive in absence of stimulus

After those 10 seconds, GASTON completely changes its behaviour. The robot joyfully starts dancing and singing in order to attract attention. The facial expression now is malicious.

2.7. Short audio signals and there meaning

Besides facial expressions and motion-behaviour, GASTON really "speaks". Of course its language is rather poor. Here the vocabulary :

The sounds are taken from the ROBOLAB standard song-files.

Different system sounds  needed for operation control
Buzz Error-state
TweetiePie Someone shook my hands. I am happy.
Chirp Nobody interacts with me. I'll soon start dancing. 
Joplin-Entertainment I am hyperactive. Please play with me.
Spooky I am angry. Something frightened me.

2.8. Function hierarchy

GASTON has been programmed through the subsumption architecture concept, developped at the M.I.T. in the early 80th. The general idea is to allow higher priority robot-behaviour to inhibit lower priority ones. To do so, each behaviour owns an assigned variable which may have two states : REQUEST or NO_REQUEST. At a certain sensor- or timer-event, the respective sensor-task posts the request. An arbitrate-task (task-manager) continuously asks whether there has been a request from any sensor-task. In the case of a request, the temporary variable called TO_DO (actually local variable 47) is set to a value representing the origin sensor-task. Every following higher priority request replaces the former request. At the end of the operation, the contents of the temporary variable, which now surely is the highest active level, is transferred to the central ACTIVE_TASK variable. Now follows the execution of a bloc of program-steps relative to the contents of ACTIVE_TASK (yellow/blue/red-icon). Finally the cycle starts again.

Practically, the noise-task is always active in the background, but eventually inhibited by higher priority tasks. There is only one exception to the hierarchical rule, since the noise-task and the red-timer-task exactly have the same priority. If the red-timer-task becomes active, any sensor-event, even an auditive one, may stop the timer-task.