Pour ceux qui prennent le projet en route, je leur conseil d'aller voir la première synthèse pour avoir plus d'informations.
I. Fiches qualités :
J'ai mis en place deux fiches pour éviter de s'égarer dans l'avance du projet. Vous verrez, elle sont assez simple à utiliser. En fait elle résume le cahier des charges et, du point de vu réalisation technique, permettra de juger de notre retard ou non. Pour l'instant elles sont vide, je laisse les utilisateurs les remplir, me faire des propositions et me les envoyer... quesson.cyrille@voila.fr
-- La fonction est ce que l'on souhaite obtenir.
-- Le test est définis par l'utilisateur/développeur. Il indique dans la case comment il souhaite mettre en évidence la fonction.
-- Le développeur indique dans la case résultat effectivement le résultat et, en cas d'échec, ce qui est nécessaire pour y remédier.
Il y a deux fiches, les voilà :
La fiche pour l'herbivore :
Fonctions |
Tests |
Résultats |
La fiche pour le carnivore :
Fonctions |
Tests |
Résultats |
II. Propositions
II.i Herbivores
II.i.a partie mécanique
L'image d'un herbivore déjà réalisé est proposé par Xargos sur le site http://www.robolife.fr.st/. On remarquera que la partie mécanique qui sert à détecter une attaque d'un carnivore n'est pas implémenté. C'est dù, je le pense à un manque d'effectif. Mais j'y reviendrai lors de la synthèse.
II.i.b Partie logiciel
Nanobapt propose le comportement global d'un herbivore. En voici l'algorithme :
programme herbivore : (je ne tient pas en compte que le robot envoie en permanence le message 255)
1)avancer 1seconde
decrementer 1 sur sa vie
regarder si n'y a pas d'aliment sur ca route
si oui aller en 4)
si il y a un obstacle aller en 2)
faire un tour sur soit même (ou moins)
faire une boucle jusqu'a ce que le tour soit fini
si il voit un aliment : aller en 4)
autrement : revenir en 1)
fin de boucle
2) voir une si un message 20 (carnivore a trouvé herbivore) a été envoyé
si oui : aller en 3)
autrement : le contourner
3) avancer 5 secondes en vitesse 8 et decrementer 15
si il voit un obstacle : aller en 2)
4) prendre l'objet
si la vie est supérieur ou égal a 81
alors chercher une lumière et la suivre
autrement le relâcher et aller en arrière
Je n'ai pour l'instant pas de commentaire. Que ceux qui le lisent et qui pensent qu'il y a des erreurs ou des imprécisions le fassent savoir sur le forum. Nanobapt devrait m'envoyer, je l'espère, une version NQC, ce qui nous permettra de tester le robot.
Pour ma part je me suis intéressé à la partie communication entre deux herbivores. Pour cela, il faut mettre en place un protocole (simple) de communication. Pour cela on va considérer 3 codes, chaque code représentant un état de l'herbivore.
Le code 255 émis en permanence, indique la présence de l'herbivore qui l'émet.
Le code 254 indique la présence d'un herbivore qui est à l'arrêt. Il est prêt à communiquer.
Le code 253 indique la fin d'une communication.
L'algorithme serait alors quelque chose de la forme :
Si(code_reçu == 255)
{
//on vient de détecter la présence d'un herbivore. Tenter une communication.
Stopper_moteur;
Envoyer_code_254;
Si(pas_de_réponse) { Reprendre_Action }
Sinon { Stocker_Réponse; Envoyer_code_253;}
Reprendre_Action;
}
//Si l'on sort de la boucle, c'est que l'on vient de détecter la présence d'un herbivore.
Sinon_Si(code_reçu == 254)
{
//Un herbivore cherche à communiquer:
Stopper_moteur; //à ce niveau l'autre est déjà à l'arrêt. La communication peut commencer.
Envoyer_Code_Communication;
Finir_avec_code_253;
}
Sinon_Si(code_reçu == 253)
{
//le robot veut arrêter la communication.
Reprendre_Action;
}
Sinon
{
//comportement normal de l'automate
}
Remarque :
Le protocole est très simple. Je ne l'ai pas encore testé et il y a peut-être des erreurs. On remarquera que c'est à l'initiative du robot qui détecte la présence d'un autre de lui demander des informations. La communication se fait même s'il n'y a rien à dire. C'est promis, je me dépêche de le programmer pour voir ce que ce protocole vaut.
Il est nécessaire de coder la partie manipulation de la pince.
Il est nécessaire de coder la partie détection attaque carnivore.
II.ii Carnivores
II. ii. a. Partie mécanique
Pour l'instant rien à communiquer. Voir le cahier des charges.
II. ii. b. Partie logiciel
Voici le comportement en RCX du carnivore (Source Xargos).
PROGTXT1( // Carnivore 4.rcx
#source RIS1.5
#target RCX
main [
sensor s1 on 1
var counter = 0
timer timevalue
clear timevalue
clear message
output motorA on 1
output motorB on 2
output motorC on 3
forward [motorA motorB motorC]
power [motorA motorB motorC] 7
s1 is switch as boolean
start progTask
wait 10
watch s1 [
when closed [ start task1 ]
when opened [ ]
]
]
task progTask [
forever [
if message is 10..10 [
clear counter
clear message
if s1 is closed [
power motorB 7
on motorB for 20
reverse motorB
on motorB for 20
][
power [motorA motorC] 4
forward [motorA motorC]
on [motorA motorC] for 30
if message is 10..10 [
clear message
if s1 is closed [
power motorB 7
on motorB for 20
reverse motorB
on motorB for 20
][
power [motorA motorC] 4
forward [motorA motorC]
on [motorA motorC] for 30
]
][
wait 20
power [motorA motorC] 7
forward motorA
backward motorC
on [motorA motorC] for 30
if message is 10..10 [
clear message
if s1 is closed [
power motorB 7
on motorB for 20
reverse motorB
on motorB for 20
][
power [motorA motorC] 5
forward [motorA motorC]
on [motorA motorC] for 30
]
][
wait 20
power [motorA motorC] 7
forward motorC
backward motorA
on [motorA motorC] for 60
]
]
]
][
power [motorA motorC] 7
forward motorC
backward motorA
on [motorA motorC] for 30
counter += 1
if counter is 1..10 [
][
if timevalue is 1..50 [
][
sound 6
clear counter
power [motorA motorC] 7
forward [motorA motorC]
on [motorA motorC] for 100
forward motorC
backward motorA
on [motorA motorC] for (random 19+1)*10
forward [motorA motorC]
on [motorA motorC] for 100
clear timevalue
clear counter
]
]
]
]
]
task task1
[
if message is 10..10 [
clear message
][
power [motorA motorC] 7
backward [motorA motorC]
on [motorA motorC] for 100
forward motorA
backward motorC
on [motorA motorC] for (random 19+1)*10
forward [motorA motorC]
on [motorA motorC] for 100
]
]
III. Synthèse
Il n'y a toujours rien de tangible. A cela une raison simple : nous sommes trop peu nombreux. Le principe de laisser chacun se manifester au sujet du projet est une bonne idée dans le cas ou le projet ne doit pas être réalisé en un temps limité. Mais voilà, ce n'est pas le cas et il faut le finir pour Mai. Aussi je pense que l'on va modifier la façon de s'organiser. Je propose la méthode suivante :
Voilà, cela peut paraître exagéré, mais il faut bien un minimum d'organisation si l'on veut aller jusqu'au bout. Je suis libre à toutes autres suggestions. Mais à y regarder de plus près; des choses ont quand même étaient faites.
-- Un site dédié par Xargos. http://www.robolife.fr.st/
-- Nanobapt a fait connaître notre projet sur le site Automates intelligents.
-- Une demande de sponsoring devrait être faite (Le partenariat devrait se faire avec LEGO).
-- Un comportement d'herbivore a été donné.
-- Le problème épineux de la communication a été abordé.
Il faut absolument que quelqu'un s'intéresse à la partie mécanique.
C'est un défis à relever, et je fais appel au goût de certaines personnes pour les projets fédérateurs et la difficulté pour les inviter à participer ou encore à poser des questions.
Nous sommes le 28-01-01. Je donnes rendez-vous le 11-02-01 pour une nouvelle mis à jour. Cela laisse 2 semaines pour proposer et améliorer de nouveaux éléments. D'ici là je serais en vacance et je pourrais m'investir à fond.