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.