/**
* W/BO Project Wi-Fi over AIBO
* Author: Gilles RÉANT - 2005/2006
* GPLv2 licence http://www.gnu.org/licenses/gpl.html
* see http://macneill.cs.tcd.ie/~reantg/WIBO_Project/
* or http://www.reant.net/tcd/WIBO_Project/
* for more informations
**/
echo "Defining functions & variables";
global.default_noise = wlan.noise;
def max(my_list) {
maximum = -1;
index = -1;
i = -1;
foreach n in my_list {
i++;
if (n > maximum) {
maximum = n;
index = i;
};
};
return index;
};
def min(my_list) {
minimum = 99;
index = -1;
i = -1;
foreach n in my_list {
i++;
if (n < minimum) {
minimum = n;
index = i;
};
};
return minimum;
};
def standard_deviation(my_list, my_mean) {
result = 0;
foreach n in my_list {
result = result + (n - my_mean) * (n - my_mean);
};
result = sqrt(result);
return result;
};
def checknoise(waiting_time) {
loop {
if (wlan.noise != global.default_noise) {
echo "Wow, the noise is original!! " +
wlan.noise + " (instead of default " + global.default_noise + ")!!";
};
wait(waiting_time);
};
};
def measure(number_of_measures, start_waiting_time, waiting_time) {
ok = false;
number_of_problems = -1;
while (!ok) {
number_of_problems = number_of_problems + 1;
if (number_of_problems == 0) {
ledF1 = 0;
ledF2 = 0;
ledF13 = 0;
ledF14 = 0;
global.ledMode = 0;
};
if (number_of_problems == 1) {
ledF13 = 1;
speaker.play("wxex.wav");
};
if (number_of_problems == 2) {
ledF14 = 1;
speaker.play("wxer.wav");
};
if (number_of_problems == 3) {
global.ledMode = 1;
speaker.play("wxcs.wav");
echo "/!\ We had measurement problems 3 times in a row, so forward!";
return -1;
};
wait(start_waiting_time);
mean = 0;
my_list = [];
for (i = 0 ; i < number_of_measures ; i++) {
current_signal = wlan.signal;
mean = mean + current_signal;
my_list = my_list + current_signal;
echo "measure[" + i + "]: signal=" + current_signal + "; mean=" + mean/(i+1);
if (i < number_of_measures - 1) {
wait(waiting_time);
}
};
mean = mean / number_of_measures;
ecart_type = standard_deviation(my_list, mean);
echo "for information: mean=" + mean + " standard deviation=" + ecart_type;
if (ecart_type > 0.1) {
echo "The standard deviation is too high
(>0.1). We are going to make another set of measurements after
moving a bit.";
ok_1 = false;
} else {
ok_1 = true;
};
if (mean < 0.05) {
echo "The mean (" + mean + ") is
inferior to 0.05. We are going to make another set of measurements
after moving a bit.";
ok_2 = false;
} else {
ok_2 = true;
};
ok = ok_1 && ok_2;
if (!ok) {
speaker.play("drum1.wav");
walk.turn(30);
walk.turn(-30);
};
};
return mean;
};
def ears_movement() {
earR->blend = queue;
earL->blend = queue;
loopn(5) {
earR = 0;
earL = 0;
wait(0.1s);
earR = 1;
earL = 1;
wait(0.1s);
};
};
def recherche(minimum_signal_quality_required, number_of_values_remembered) {
current_signal_quality = wlan.signal;
while (current_signal_quality < minimum_signal_quality_required) {
my_list = [];
forced_forward = false;
loopn(number_of_values_remembered) {
if (!forced_forward) {
variable = measure(5,2s,0.5s);
if (variable == -1) {
echo "forward!";
forced_forward = true;
};
if (!forced_forward) {
my_list = my_list + variable;
walk.turn(72);
};
};
};
if (!forced_forward) {
echo "Measurements done!";
echo "List: ";
echo my_list;
minimum = min(my_list);
echo "Minimum: " + minimum;
variable = measure(5,2s,0.5s);
if (variable == -1) {
echo "forward!";
forced_forward = true;
};
if (!forced_forward) {
while (variable > minimum) {
echo
"The current value (" + variable + ") isn't inferior to the minimum ("
+ minimum + ").";
new_list = [];
i = 0;
foreach n in my_list {
if (i != 0) {
new_list = new_list + n;
};
i++;
};
new_list = new_list + variable;
my_list = new_list;
echo "New list: ";
echo my_list;
minimum = min(my_list);
echo "New minimum: " + minimum;
walk.turn(72);
variable = measure(5,2s,0.5s);
if (variable == -1) {
echo "forward!";
forced_forward = true;
};
};
echo "Cool! :D I have a
value of " + variable + " inferior to the minimum " + minimum + ".";
};
} else {
echo "Cool! :D I have a value of " + variable + ", so forward.";
};
ledF1 = 1;
ledF2 = 1;
speaker.play("wxpc.wav");
walk.go(0.5);
current_signal_quality = wlan.signal;
};
echo "We have reached a quality of signal of " + current_signal_quality + "!";
echo "End of the program.";
};
def gillesdemo() {
ledBFC = 1;
ledBMC = 1;
ledBRC = 1;
echo "Gilles start - W/IBO project ; Wi-Fi over AIBO";
echo "My name on the network: " + wlan.stationName;
echo "I'm on channel " + wlan.channel;
echo "WLAN noise (constant value; bad implementation?): " + wlan.noise;
checknoise(5s),
echo "I'm connected on the network " + wlan.ssid;
echo " but I can't tell whether it's an ad-hoc or infrastructure network. :-(";
motor on;
echo "Motors on";
echo "Getting up";
robot.stand();
neck = 2 & ears_movement() & tailPan = 0 speed:20;
speaker.play("wxpc.wav");
echo "OK, I'm ready";
timeout (10m) recherche(0.75,5);
};
def quality_of_signal() {
ledF = 0;
timeout (2m) loop {
ledF = 0;
current_signal_quality = wlan.signal;
echo "signal quality (0.0-1.0): " + current_signal_quality;
ledF13 = (current_signal_quality == 0);
ledF14 = (current_signal_quality == 0);
ledF1 = (current_signal_quality > 0.08);
ledF2 = (current_signal_quality > 0.16);
ledF3 = (current_signal_quality > 0.24);
ledF5 = (current_signal_quality > 0.32);
ledF12 = (current_signal_quality > 0.40);
ledF6 = (current_signal_quality > 0.48);
ledF4 = (current_signal_quality > 0.56);
ledF7 = (current_signal_quality > 0.64);
ledF9 = (current_signal_quality > 0.72);
ledF11 = (current_signal_quality > 0.80);
ledF10 = (current_signal_quality > 0.88);
ledF8 = (current_signal_quality > 0.96);
speaker.play("beep.wav");
wait(5s);
};
};
at((backSensorF > 10) && (backSensorM > 10) && (backSensorR > 10)) {
gillesdemo();
};