Aller au contenu


Photo
- - - - -

Programme intelligent


64 réponses à ce sujet

#1 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 16 juin 2012 - 10:54

Bonsoir, je lance un ptit sujet pour avoir des idées de programmation.
Je suis en train de faire un robot et je voudrai le rendre le plus "intelligent" possible. C'est a dire le plus interactif avec l'environement, qu'il adopte plusieurs comportements en fonction de ce qu'il voie etc. J'aimerai aussi lui donner une mémoire ( notamment grace à l'incrémentation de variables) des humeurs ( argressif ...). Il faudrait aussi lui trouver un but, qu'il ne fasse pas que se balader dans une piece..
Donc si vous avez une quelquonc idée sur comment materialiser des comportements en langage de programmation n'hésitez pas^^ même si on part dans la philosophie, au contraire ca donne meme des idées !

#2 microrupteurman2

microrupteurman2

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 2 023 messages
  • Gender:Male
  • Location:33
  • Interests:Tout

Posté 16 juin 2012 - 11:57

Allé au frigo, prendre une biere et l'apporter devant ton canapé....

Il font que l'on connaissent l'équipement de ton robot....
 
 
 

#3 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 01:28

C'est un robot quadruped, l'équipement est décrit dans mon blog sur le site (lien juste en bas) et la liste devrait s'agrandir.

#4 microrupteurman2

microrupteurman2

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 2 023 messages
  • Gender:Male
  • Location:33
  • Interests:Tout

Posté 17 juin 2012 - 01:44

Il est trop petit, tu pourra pas faire grand choses. Tu pourrais en faire 2 et les faires communiquer...
 
 
 

#5 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 01:54

Pourquoi trop petit ? tu penses que j'aurai des restrictions à quel niveau ?

#6 SRWieZ

SRWieZ

    Membre

  • Membres
  • PipPip
  • 231 messages
  • Gender:Male
  • Location:Evreux, Haute-Normandie, France

Posté 17 juin 2012 - 01:57

Je verrais bien plusieurs petits programmes avec un indice de priorité et de conditions nécessaires au déclenchement.

Je détails, prenons quelques exemple de sous programmes (ou apparenté à une fonction dans le robot) :
  • 1) Survivre : à l'aide du capteur sharp il évite de tomber dans un trou dont il ne ressortira pas.
  • 2) Lumière : Se mettre à la lumière (ou à l'ombre selon ce qu'il aime :D )
Le programme 1 peut s'exécuter n'importe quand (seulement quand il bouge en réalité)
Le programme 2 s'exécute seulement si on détecte de la lumière dans une direction, s'il fais nuit noir, inutile de chercher de la lumière.
Le programme 1 est prioritaire sur le programme 2 car même si un endroit parait moins sombre, s'il y a un trou, on ne va pas s'y jeter dedans.

Ce qui serait ensuite intéressant c'est qu'il arrive à reconnaître son environnement de sorte qu'il retienne des endroits qui sont souvent mieux éclairer que d'autres.
Il pourrait donc avoir des endroits "préféré", puis en trouver de nouveaux au fur et à mesure, puis de ne plus aimer certains endroits et d'y aller à tour de rôle.
Voilà un début de mouvement qui ne serais plus seulement du hasard. On peut imaginer la même chose avec un capteur de température, où il ira dehors l'été mais pas l'hiver.
Ce qui serait parfait c'est qu'il aille se recharger quand il fais nuit, ou simplement demander à ce qu'on le recharge. S'il met ses microcontrôleur en mode veille (rechercher sur le site arduino), il pourra même tenir plusieurs jours sans demander d'être rechargé (à condition qu'il ne bouge pas non stop dans la journée). De plus le mode veille permet de réveiller le robot par une entrée Interrupt, avec un petit circuit on peut se débrouiller pour alimenter seulement le capteur de lumière qui réveillera l'arduino lorsqu'il fera jour. Comme ça il ne se réveille pas à une heure donner.

J'ai vu que tu as une CMUCAM4, tu pourra lui donner envie de suivre certaines choses lorsqu'il en rencontre.
Si tu veux faire une telle intelligence je pense qu'il faudrait lui ajouter une horloge http://www.sparkfun.com/products/99 pour qu'il puisse associer des actions à des moments de la journées. Encore un exemple pour illustré mes propos : Il pourrait aller se mettre au soleil en milieu de journée pour recharger un peu ses batteries (avec un mini panneau solaire bien entendu).

Je sais je suis aller très loin dans mon imagination mais j'espère que ça t'aidera. :)

#7 microrupteurman2

microrupteurman2

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 2 023 messages
  • Gender:Male
  • Location:33
  • Interests:Tout

Posté 17 juin 2012 - 02:02

Au niveaux du poids.
Aprés tu peut le controlleur en IR ou avec 2 ldr et une lampe torche
Je trouve qu'avec les quadripede on est vite limité, tu peux pas lui mettre un bras par exemple, par contre tu peut lui mettre une ch'tite pince devant fait avec deux servo 9g.
 
 
 

#8 microrupteurman2

microrupteurman2

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 2 023 messages
  • Gender:Male
  • Location:33
  • Interests:Tout

Posté 17 juin 2012 - 02:14

S'il met ses microcontrôleur en mode veille (rechercher sur le site arduino)

T'a pas un lien ? :D je trouve pô.
 
 
 

#9 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 02:19

Au niveaux du poids.
Aprés tu peut le controlleur en IR ou avec 2 ldr et une lampe torche
Je trouve qu'avec les quadripede on est vite limité, tu peux pas lui mettre un bras par exemple, par contre tu peut lui mettre une ch'tite pince devant fait avec deux servo 9g.


J'ai justement pris des servo puissants (environ 6kg.cm) et il a une sacrée force malgré la longueur de la patte.^^ Pour la pince, pourquoi pas lui faire des espèces de mandibules ^^

Je verrais bien plusieurs petits programmes avec un indice de priorité et de conditions nécessaires au déclenchement.

Je détails, prenons quelques exemple de sous programmes (ou apparenté à une fonction dans le robot) :
•1) Survivre : à l'aide du capteur sharp il évite de tomber dans un trou dont il ne ressortira pas.
•2) Lumière : Se mettre à la lumière (ou à l'ombre selon ce qu'il aime )
Le programme 1 peut s'exécuter n'importe quand (seulement quand il bouge en réalité)
Le programme 2 s'exécute seulement si on détecte de la lumière dans une direction, s'il fais nuit noir, inutile de chercher de la lumière.
Le programme 1 est prioritaire sur le programme 2 car même si un endroit parait moins sombre, s'il y a un trou, on ne va pas s'y jeter dedans.

Ce qui serait ensuite intéressant c'est qu'il arrive à reconnaître son environnement de sorte qu'il retienne des endroits qui sont souvent mieux éclairer que d'autres.
Il pourrait donc avoir des endroits "préféré", puis en trouver de nouveaux au fur et à mesure, puis de ne plus aimer certains endroits et d'y aller à tour de rôle.
Voilà un début de mouvement qui ne serais plus seulement du hasard. On peut imaginer la même chose avec un capteur de température, où il ira dehors l'été mais pas l'hiver.
Ce qui serait parfait c'est qu'il aille se recharger quand il fais nuit, ou simplement demander à ce qu'on le recharge. S'il met ses microcontrôleur en mode veille (rechercher sur le site arduino), il pourra même tenir plusieurs jours sans demander d'être rechargé (à condition qu'il ne bouge pas non stop dans la journée). De plus le mode veille permet de réveiller le robot par une entrée Interrupt, avec un petit circuit on peut se débrouiller pour alimenter seulement le capteur de lumière qui réveillera l'arduino lorsqu'il fera jour. Comme ça il ne se réveille pas à une heure donner.

J'ai vu que tu as une CMUCAM4, tu pourra lui donner envie de suivre certaines choses lorsqu'il en rencontre.
Si tu veux faire une telle intelligence je pense qu'il faudrait lui ajouter une horloge http://www.sparkfun.com/products/99 pour qu'il puisse associer des actions à des moments de la journées. Encore un exemple pour illustré mes propos : Il pourrait aller se mettre au soleil en milieu de journée pour recharger un peu ses batteries (avec un mini panneau solaire bien entendu).

Je sais je suis aller très loin dans mon imagination mais j'espère que ça t'aidera.


Justement c'est en partant loin qu'on trouve des idées :)
Ton histoire d'horloge est interessante et facile à faire en programme (incrémentation) ou électroniquement.
Pour ce qui concerne l'ordre d'importance des programmes j'avais pensé à les écrire en cascade avec la fonction "if" : if il fait sombre et if y'a pas de trou, on y va, else on va ailleur ou autre..
Pour les endroits préférés, il faudrai lui concevoir une mémoire, peut etre avec des variables a incrémenter qui correspondraient à des types de lieu.
Et pourquoi lui faire des humeures, si t'a pas de bruit, pas trop de lumière, qu'on le titille pas, la variable calme augmente (incrémentation...) et vis et versa.
Le problème est si il s'éteind il oublie tout.. à moins de tout écrire dans une eeprom ou je sais pas ^^

#10 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 02:21

T'a pas un lien ? :D je trouve pô.


Servomoteur ;)
ha merde autant pour moi .. j'avais lu trop vite..

Modifié par ashira, 17 juin 2012 - 02:22 .


#11 microrupteurman2

microrupteurman2

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 2 023 messages
  • Gender:Male
  • Location:33
  • Interests:Tout

Posté 17 juin 2012 - 02:25

T'a pas un lien ? :D je trouve pô.


Je parler pas des servo, cepandant, j'hallucine un peu, 22€ pour un servo de 6kg...... j'en ai a 10€€ des 12kg....
 
 
 

#12 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 02:29

Je parler pas des servo, cepandant, j'hallucine un peu, 22€ pour un servo de 6kg...... j'en ai a 10€€ des 12kg....


O_o Tu les as commandé sur quelle site ? (j'en ai acheté 6 de ceux la...)

#13 SRWieZ

SRWieZ

    Membre

  • Membres
  • PipPip
  • 231 messages
  • Gender:Male
  • Location:Evreux, Haute-Normandie, France

Posté 17 juin 2012 - 02:32

L'horloge que je te proposait étais plus précise et continue à compter débranché avec une pile.

Pour ce qui est du programme en cascade de "if" ce sera très moche (pour pas dire très mauvais), il faut réfléchir à un système plus complexe que je commencerais bien mais la semaine prochaine je passe le bac donc on verra ça plus tard. Le fait est que là on a deux sous programme donc la cascade ne dérange pas mais si comme tous le monde tu veux faire évoluer ton robot, ça va devenir vite incompréhensible.

L'eeprom de l'arduino va être utile pour des variables telles que l'humeur que l'on incrémente.
Mais pour ce qui est des positions, oui il te faudra un lecteur micro SD (micro car t'as besoin de place) comme sur le shield ethernet.

Pour ce qui est du titillement, un accéléromètre qui donne de grande valeurs alors qu'il ne bouge pas fera une bonne affaire (tu peut lui donner envie de te mordre :D )

EDIT : J'ai oublier microrupteurman2 : http://www.arduino.c...rduinoSleepCode

#14 microrupteurman2

microrupteurman2

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 2 023 messages
  • Gender:Male
  • Location:33
  • Interests:Tout

Posté 17 juin 2012 - 02:34

O_o Tu les as commandé sur quelle site ? (j'en ai acheté 6 de ceux la...)


Ebay, servo tower pro, ou light in the box.
 
 
 

#15 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 02:43

L'horloge que je te proposait étais plus précise et continue à compter débranché avec une pile.


Pour ce qui est du programme en cascade de "if" ce sera très moche (pour pas dire très mauvais), il faut réfléchir à un système plus complexe que je commencerais bien mais la semaine prochaine je passe le bac donc on verra ça plus tard. Le fait est que là on a deux sous programme donc la cascade ne dérange pas mais si comme tous le monde tu veux faire évoluer ton robot, ça va devenir vite incompréhensible.

L'eeprom de l'arduino va être utile pour des variables telles que l'humeur que l'on incrémente.
Mais pour ce qui est des positions, oui il te faudra un lecteur micro SD (micro car t'as besoin de place) comme sur le shield ethernet.

Pour ce qui est du titillement, un accéléromètre qui donne de grande valeurs alors qu'il ne bouge pas fera une bonne affaire (tu peut lui donner envie de te mordre :D )

EDIT : J'ai oublier microrupteurman2 : http://www.arduino.c...rduinoSleepCode


C'est vrai que le programme en cascade montrerait assez vite ces limites.. sinon attribuer des valeurs à des conditions, qui devront être testées par ordre croissant.

Un accéléromètre ou même des petits contactes sous la peau ( en silicone )^^

Tous ça me donne envie de terminer la construction mécanique au plus vite pour pouvoir commencer à le programmer :)

Ebay, servo tower pro, ou light in the box.

Ok ^^ j'aurai du mieux chercher sur le net..

#16 SRWieZ

SRWieZ

    Membre

  • Membres
  • PipPip
  • 231 messages
  • Gender:Male
  • Location:Evreux, Haute-Normandie, France

Posté 17 juin 2012 - 02:51

Et bien moi ça me donne aussi envie de programmer un robot seulement je suis trop pauvre pour avoir un quadrupède :D
Je chercherais plus tard une librairie pour faire de la programmation évènementielle sur Arduino.
Je te sortirais quelques exemple, tu peut prendre ton temps pour faire ton chassi.

PS : Merci d'éviter le double post, éditer votre message. J'ai combiner tes 2 messages.

#17 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 03:01

Et bien moi ça me donne aussi envie de programmer un robot seulement je suis trop pauvre pour avoir un quadrupède :D
Je chercherais plus tard une librairie pour faire de la programmation évènementielle sur Arduino.
Je te sortirais quelques exemple, tu peut prendre ton temps pour faire ton chassi.

PS : Merci d'éviter le double post, éditer votre message. J'ai combiner tes 2 messages.


Ok ;)

Pour l'instant j'ai le materiel pour faire les 2 pattes de devant, une fois ça fait ça devrait commencer à devenir interessant de programmer des déplacements, là il ne peut que tourner en rond..
Je vais encore réfléchir sur ce qui a été dit, les incrémentations m'intéressent beaucoup.

#18 SRWieZ

SRWieZ

    Membre

  • Membres
  • PipPip
  • 231 messages
  • Gender:Male
  • Location:Evreux, Haute-Normandie, France

Posté 17 juin 2012 - 03:15

Une dernière petite chose, fais toi un truc claire avec des fonctions de déplacement bien distinct avec des bonus comme tourneSurSoit(int degres) (pour qu'il tourne sur lui même).
Et ajoute une variable d'état qui contiendra ce que le robot fais actuellement (avance, ne bouge pas, dort) pour qu'en suite ça soit plus simple lorsque tu vas introduire mon système d'évènements.

Ainsi voilà un exemple de ce que ton robot pourra faire:
Le robot n'a rien à faire alors le sous programme du lumière est exécuté.
Le sous programme de lumière donne une direction au robot pour atteindre la lumière.
Le code détecte l’évènement "robot en mouvement" (grâce à la variable que je te demande de mettre en place) et exécute donc le sous programme Survie.
Admettons que le programme de survie détecte un trou, il ordonne au robot de s’arrêter.

Là où ça sera vraiment compliqué c'est que le robot puisse évité le trou pour continuer à aller vers la lumière. (Que les 2 sous programmes se mettent d'accord)
Ça n'est pas du tout impossible, un poil long mais le résultat sera magnifique.

#19 ashira

ashira

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 282 messages
  • Gender:Male

Posté 17 juin 2012 - 03:57

Une dernière petite chose, fais toi un truc claire avec des fonctions de déplacement bien distinct avec des bonus comme tourneSurSoit(int degres) (pour qu'il tourne sur lui même).
Et ajoute une variable d'état qui contiendra ce que le robot fais actuellement (avance, ne bouge pas, dort) pour qu'en suite ça soit plus simple lorsque tu vas introduire mon système d'évènements.

Ainsi voilà un exemple de ce que ton robot pourra faire:
Le robot n'a rien à faire alors le sous programme du lumière est exécuté.
Le sous programme de lumière donne une direction au robot pour atteindre la lumière.
Le code détecte l’évènement "robot en mouvement" (grâce à la variable que je te demande de mettre en place) et exécute donc le sous programme Survie.
Admettons que le programme de survie détecte un trou, il ordonne au robot de s’arrêter.

Là où ça sera vraiment compliqué c'est que le robot puisse évité le trou pour continuer à aller vers la lumière. (Que les 2 sous programmes se mettent d'accord)
Ça n'est pas du tout impossible, un poil long mais le résultat sera magnifique.


Pour ça il pourrait par exemple se contenter d'abourd d'éviter le trou, puis lorsqu'il ne le détecte plus de rechercher la lumière.
Et j'aimerai introduir la notion de but et un peu de probabilité..
Par exemple, il se dirige là ou il y a le plus de lumière, mais il détecte un trou, à ce moment il y a 80% de chance qu'il cherche à l'éviter puis recherche à nouveau la lumière, sinon il abandonne et fait autre chose.
Un autre exemple avec la cmucam, il joue avec une balle rouge (met un coup de patte pour la faire rouler..); à chaque coup de patte il y a 90% de chance qu'il rejoue avec etc..
Et pour le but, lorsque la batterie est à - de 25%, il cherche l'endroit pour se recharger.

#20 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 17 juin 2012 - 05:41

Salut !

Pour ça il pourrait par exemple se contenter d'abourd d'éviter le trou, puis lorsqu'il ne le détecte plus de rechercher la lumière.
Et j'aimerai introduir la notion de but et un peu de probabilité...


Héhé, ça, ça me plait ^^
Pour que ton robot arrive à se représenter son environnement, il faut qu'il garde en mémoire des données de type symboliques.

Tes capteurs te renvoient des données de types numériques (distances, luminosité, etc.) Ensuite, ton programme doit venir traiter ces données pour extraire des données symboliques (carte de la pièce, il fait jour, nuit, etc.)

Ensuite, pour aller encore plus loin, ce que tu peux faire, c'est raisonner sur ces données symboliques afin que ton robot ait des croyances ! (c'est la base si tu veux ensuite travailler avec des buts).
Par exemple, ton robot croit qu'il fait nuit. Si tu reçoit d'autres données qui contredise cette croyance, alors ton robot se remettra en cause et modifiera ses croyances.
Pour ça, tu peux ajouter un système basé sur de la logique. Comme ça tu pourras en plus faire des déductions ! Car avec la robotique, tu ne connais jamais la totalité de ton environnement, et tu dois souvent prendre des décision sans tout connaitre ! Avec ton système de déduction, tu peux faire des hypothèses qui te semble probable, déduire les faits qui sont cohérentes avec ces hypothèses et, si à un moment, tu te rend compte que ton système se contredit, ton robot pourra remettre en cause ses hypothèses ! :)

Une fois que tu as ça, alors tu peux essayer d'intégrer un mécanisme de buts. C'est à dire un système qui permettrait, en fonction de tes croyances ,d'adopter tel ou tel but (si ton robot croit qu'il fait jour et qu'il est à l'extérieur, alors il adopte le but "recherche la lumière"). Si les croyances change en fonction du temps, ton système de but pourrait alors décider d'abandonner ou non un but particulier (car les hypothèses qui ont permit de choisir ce but ne sont plus valides: le robot se rend compte qu'il pensait que c'était le jour mais qu'en réalité, il s'est trompé et qu'on est la nuit, alors il abandonne le but "recherche la lumière").


Si tu veux, j'ai des références de publication sur les buts à te filé, mais c'est assez costaud. Sinon, pour avoir la philosophie, tu peux toujours regarder les modèles BDI (Belief, Desire, Intension)

++
Black Templar

Mon site internet : http://ferdinandpiette.com/




Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users