Et quand tour cela aura été fait...
Un robot qui se tournera les pouces à notre place.
Didier.
Il y a 22 élément(s) pour Didier (recherche limitée depuis 22-juin 13)
Posté par Didier sur 08 février 2018 - 07:39 dans Intelligence artificielle
Bonjour à tous.
C'est un sujet qui m'interpelle.
J'ai consulté pas mal de sites pour en connaitre en peu plus sur les AI et consorts.
J'ai écrit 5 programmes en pur HTML/Javascript ( sans librairie complémentaires ) en essayant d'y inclure un maximum de commentaires.
( Ils ne sont probablement pas codés dans les règles de l'art mais ils fonctionnent comme je le souhaitais )
Je vous les propose ici en l'état :
_EvolutionGénétique
L'appli retrouve un message écrit.
_EvolutionGénétique.html 12,53 Ko 71 téléchargement(s)
_EvolutionGénétique2
Les individus apprennent à sauter quand il le faut.
_EvolutionGénétique2.html 26,44 Ko 77 téléchargement(s)
_EvolutionGénétique3
Un truc genre "Poissons/Nourriture/Requins" ou "Les Gentils petits nécureuils et leurs noisettes contre les méchants loups".
_EvolutionGénétique3.html 40,97 Ko 86 téléchargement(s)
_RéseauNeuronal
Au fil des cycles l'appli obtient de plus en plus souvent le résultat attendu.
_RéseauNeuronal.html 16,36 Ko 82 téléchargement(s)
_FourmiDeLangton
Ben... Une fourmi de Langton ( et son autoroute ).
_FourmiDeLangton.html 7,09 Ko 65 téléchargement(s)
Voili, voilà
Didier.
Posté par Didier sur 06 juillet 2017 - 09:51 dans Programmation
Bonsoir.
Mazette !
Merci pour ces explications. mais ça me semble quand même bien compliqué.
En gros on parle d'algorithmes de de philosophie métaphysique.
Je vais lire, lire et relire pour essayer de bien intégrer ça.
Edit1 : Cela vient de me venir à l'esprit...
Dans ce système l'individu compte peu, s'il est bon on le garde, s'il est mauvais on le jette.
Ce qui compte c'est la survie du groupe.
Je sens que je ne vais pas bien dormir cette nuit.
Didier.
Posté par Didier sur 06 juillet 2017 - 08:25 dans Programmation
Bonjour le forum.
Super post ...
Quelques questions sur ce principe d'apprentissage :
Si j'ai bien compris le poisson 2 de la 18ème génération ( c'est un exemple ) a été retenu parce qu'un poisson de la 17ème génération à obtenu un des meilleurs scores en fonction de son comportement dans son milieu.
Comment le poisson 2 sait-il se comporter ?
Reproduit-il le comportement du poisson de la génération 17 en y apportant une variante ?
Si oui, comment connait-il le comportement du poisson de la 17ème génération ?
Sinon comment fonctionne la mémoire "atavique" des poissons ?
Merci de m'avoir lu.
Didier.
Posté par Didier sur 16 mai 2018 - 01:29 dans Intelligence artificielle
Bonjour.
Ces explications sont très claires, merci.
j'aurais donc plutôt dû écrire :
Il me fallait prendre un problème pour lequel il n'existe pas d'algorithme connu à ce jour permettant de trouver la solution exacte dans un délai raisonnable.
Ceci dit, je me demandais dans qu'elle mesure on pouvait utiliser ce genre d'algorithme pour faire apprendre à un robot à marcher...
Exemple pour un quadrupède : Apprendre à se mettre debout, avancer, tourner > Calcul des angles de chaque articulation, timing des mouvements, ...
Didier.
Posté par Didier sur 16 mai 2018 - 03:45 dans Intelligence artificielle
Re
Euh... Comment dire. Là je suis largué.
Complexité en O(n3), RSA, diffie hellman : Késako ?
Pour la marche d'un robot, je vais regarder à cela. ( Juste qu'il me faudra trouver un quadrupède pas trop cher ).
Didier.
Posté par Didier sur 16 mai 2018 - 09:26 dans Intelligence artificielle
Re
Merci pour la nomenclature. La structure permettrait-elle de supporter un Raspi 3B ?
J'ai, rapidement, parcouru les liens concernant le quadrupède de Jekert...
Whaouu, bravo à lui. Je suis à des lieues de ce niveau ( et pas besoin d'un algo pour en calculer la distance exacte ).
Jusqu'à présent j'avais fait KRT1 ( un robot roulant ) mais contrairement à certain robot qui cherchent à grimper des escaliers
ce crétin à réussi à les descendre tout seul et très rapidement. Résultat des courses il est HS.
Didier.
Posté par Didier sur 15 mai 2018 - 09:29 dans Intelligence artificielle
Posté par Didier sur 16 mai 2018 - 07:50 dans Intelligence artificielle
Bonjour.
Merci pour les liens.
En fait j'ai codé le programme sans librairie externe car je voulais bien comprendre le mécanisme de ces algorithmes.
Didier.
Posté par Didier sur 27 février 2017 - 04:52 dans Electronique
Bonjour.
Je n'ai pas testé mais il me semble que tes 3 premières lignes après le While réinitialisent ton capteur et comme il lui faut un "temps de chauffe" avant de donner des infos cohérentes...
Teste en plaçant ces 3 lignes juste avant ton While et dis nous si ça améliore le bouzin.
Didier.
Posté par Didier sur 12 février 2017 - 03:20 dans Electronique
Bonjour à tous.
Je viens de tester le code ci-dessus... Chez moi il fonctionne correctement.
Il me semble avoir lu quelque part que la dernière ligne :
GPIO.cleanup()
pouvait parfois poser problème si la librairie RPi.GPIO n'était pas à jour. ( A vérifier )
Sinon voici le code ( adapté ) que j'utilise pour KRT1.
Didier.
#!/usr/bin/env python # -*- coding: utf-8 -*- # Test d'un capteur ultrason # Importation des librairies nécessaires et suffisantes import RPi.GPIO as GPIO import time # Mode de numérotation des GPIO's ( Ici on est en mode BCM ) GPIO.setmode(GPIO.BCM) # Définition des GPIO's pour le capteur ultrason droit CapteurDroitEmission = 19 CapteurDroitReception = 13 GPIO.setup(CapteurDroitEmission, GPIO.OUT) GPIO.setup(CapteurDroitReception, GPIO.IN) GPIO.output(CapteurDroitEmission, False) def CapteurEmission(Emission): # Envoi du signal GPIO.output(Emission, True) time.sleep(0.001) GPIO.output(Emission, False) def CapteurReception(Reception, value, timeout): # Retour du signal count = timeout while GPIO.input(Reception) != value and count > 0: count -= 1 def CapteurDistance(CapteurEnvoi,CapteurRetour): # Calcul de la distance en centimètres CapteurEmission(CapteurEnvoi) CapteurReception(CapteurRetour, True, 10000) Debut = time.time() CapteurReception(CapteurRetour, False, 10000) Fin = time.time() return int (( Fin - Debut ) / 0.000058) def EviterObstacle(): # Calcul des distances de l'obstacle et action(s) selon les résultats # Cette petite pause ( à ajuster ) améliore sensiblement les résultats ! time.sleep(0.05) # Calcul des distances CapteurDroit = CapteurDistance(CapteurDroitEmission,CapteurDroitReception) #KRT1 CapteurGauche = CapteurDistance(CapteurGaucheEmission,CapteurGaucheReception) #KRT1 ...La suite des instructions pour KRT1... print "Obstacle à " + str(CapteurDroit) + " cm " while True: EviterObstacle()
Posté par Didier sur 11 février 2017 - 06:37 dans Electronique
Bonjour.
Nouveau membre sur ce forum, je viens de prendre connaissance de ton problème.
Aujourd'hui, il est un peu tard. Mais dès que possible je fournirai ici le code utilisé pour faire fonctionner les capteurs de mon robot.
Posté par Didier sur 11 février 2017 - 06:32 dans Robots roulants, chars à chenilles et autres machines sur roues
Bonsoir à tous.
Merci pour ce retour.
En effet, les photos ne sont pas très bonnes. Je ne suis pas très doué pour cela. Je tacherai d'en faire de meilleurs que je posterai ici.
Le haut parleur est bien le truc rond situé sur l'avant de KRT1.
Je répondrai bien volontiers à toutes les questions concernant KRT1 et son programme ici.
Posté par Didier sur 11 février 2017 - 04:54 dans Robots roulants, chars à chenilles et autres machines sur roues
Posté par Didier sur 12 février 2017 - 02:59 dans Robots roulants, chars à chenilles et autres machines sur roues
Bonjour à tous.
Merci Léon pour le conseil.
On ne le voit pas très bien sur les photos mais les 2 capteurs ultrason on un "regard" très légèrement divergeant ce qui donne des résultats assez satisfaisants.
( je vais tout de même tester en écartant un peu plus les capteurs ).
Pour ce qui est de se cogner la tronche dans les murs : KRT1 calcule la distance de l'obstacle à droite et à gauche, en fonction du résultat il s'éloigne de l'obstacle le plus proche ( Si la distance est la même a droite et à gauche il recule un peu, tourne légèrement à droite et avance ).
Le système tournant en boucle lui permet ainsi d'éviter les murs mais il arrive parfois qu'il se coince.
Posté par Didier sur 13 février 2017 - 12:53 dans Energie
Bonjour à tous.
J'ai un petit moteur CC qui est alimenté par une pile 1,5 volts.
Celui-ci tourne trop vite pour mon besoin.
Comment ralentir sa vitesse de rotation ?
des résistances ? un potentiomètre ? ou autres choses ?
Si vous pouviez me proposer une solution avec un schéma de branchements ça m'arrangerai bien.
D'avance merci.
Posté par Didier sur 18 mars 2017 - 06:36 dans Programmation
Re.
Flute, je n'ai pas su utiliser la balise code.
Si quelqu'un pouvait m'expliquer comment rectifier le tir...
D'avance merci.
Didier.
(A bientôt, peut-être)
Posté par Didier sur 18 mars 2017 - 07:58 dans Programmation
Re.
Merci Mike118.
Modification de mon message effectuée.
Didier.
(A bientôt, peut-être)
Posté par Didier sur 18 mars 2017 - 06:31 dans Programmation
Bonjour à tous.
Voici ce que je propose en Python...
Code extrait et adapté du programme que j'utilise pour communiquer avec mon robot KRT1
Ca vaut ce que ça vaut et il existe certainement mieux mais ça fonctionne pas trop mal.
Didier.
(A bientôt, peut-être)
#!/usr/bin/env python # -*- coding: utf-8 -*- # Test d'un chatbot # Importation des librairies nécessaires et suffisantes import random import time #import os # Seulement si l'on veut utiliser le TTS... # OK avec Raspberry Pi > Linux Rasbian Pixel + Pico TTS # "Dé-commenter" les lignes #os.system("... # Initialisation des variables # Variables modifiables LeNom = "Crétin" # Nom du robot # Variables de réglages ColA = "\x1b[1;32;40m" # Couleur des messages d'actions : Vert ColK = "\x1b[1;36;40m" # Couleur des messages de KRT1 : Bleu ColM = "\x1b[1;31;40m" # Couleur de mes messages : Rouge ColX = "\x1b[1;30;40m" # Couleur des autres messages : Noir FCol = "\x1b[0m" # Fin de la coloration du message # Variables utilisées par le système ( NE PAS MODIFIER - Touche pas à ça p'tit con ! ) MessageEcrit = "" # Message vide MonMessage = "" # Message vide # Dictionnaire - Orthographe non respectée pour tenter de trouver un meilleur phrasé TTS... ReponsesAleatoires = ["Comment ?", "Avant peut-être, mais ça cétait avant", "Bain voyons", "Sai quand même pas très clair tout ça", "Cet aussi mon avis et je le partage", "Et puis quoi encore ?", "Indubitablement", "Jallais dire exactement la même chose", "Mais zencore ?", "Mais oui mais oui, moi aussi", "Mauvais choix, auto destruction dans 10, 9, 8, 7, boum, oupsss", "Plait-il ?", "Quoi ?", "Sacrebleu", "Saperlipopette", "Soyez un peu plus précis, jcomprends rien à cque vous dites", "Tiens donc", "Tout tà fait", "Vous allez bien ?", "Haahaahaa, la grosse marave"] ReponsesPrevues = {"bonjou":"Bonjour à vous chef", # Les mots clés doivent être tronqués après le sixième caractère # Les mots clés avec accent(s) ne fonctionnent pas toujours # correctement, il convient donc de les éviter # Actions - Penser à mettre à jour la fonction Actions()... # Actions sur mots reconnus type ORDRE : "action KRT1" ou "KRT1 action" "+avanc":"Ok chef", "+avant":"Ok chef", "+recul":"OK chef", "+stop":"OK chef, oufff, Une petite pause ça fait du bien", "+top":"OK chef, oufff, Une petite pause ça fait du bien", "+appro":"OK chef, jarrive chef", "+viens":"OK chef, jarrive chef", "+repos":"OK chef, chef oui chef, merci chef", "+rompe":"OK chef, chef oui chef, merci chef", "+date":"La date...", "+heure":"L'heure...", # Actions sur un seul mot reconnu "bazoom":"Bazoum bazoum", "bazou":"Bazoum bazoum", "bazoum":"Bazoum bazoum", "zumba":"Bazoum bazoum", "binouz":"Une petite bière ?", "star":"En route vers linfini et au dela", "trek":"En route vers linfini et au dela", # Divers "chocol":"Jpeux pas, jai pas dbras", "con":"Meunon, meunon", "connar":"Sai celui qui dit qui y est, tralalalalère", "demain":"Demain est un autre jour, alors on verra", "desser":"Moi je suis plutot fromage que dessert", "faim":"Quand sai quon mange ?", "froid":"Faut se bouger un peu aussi", "fromag":"Fromage ou dessert ? il faut choisir", "gueule":"Quoi ma gueule, caisse quel a ma gueule, ta pas vula tienne ?", "humour":"Auto destruction dans 5, 4, 3, 2, 1, boum", "merde":"Je savais bien que vous diriez ça à un moment ou un autre", "pain":"Le pain, jle met sur la table hou dans ta gueule ?", "prout":"Proute proute ma chère, je my attendais", "salut":"Je vous salut également, a qui aije lhonneur ?", "soif":"Sai lheure de lapéro ?", "voyage":"Moi jaime bien les voyages, sai quand quon va ou ?", "yes":"Pas danglais avec moi, déjà quils nous ont brulé la Janne", "you":"Pas danglais avec moi, déjà quils nous ont brulé la Janne", "zut":"O la boulette"} # Les fonctions def Dialoguer(): global MonMessage global LeNom MonMessage = MessageEcrit print ColM + "Moi - " + MonMessage + ColX MonMessage = MonMessage.lower() LeNom = LeNom.lower() if MonMessage[0:len(LeNom)] == LeNom: MonMessage = "+" + MonMessage[len(LeNom)+1:len(MonMessage)] elif MonMessage[len(MonMessage)-len(LeNom):len(MonMessage)] == LeNom: MonMessage = "+" + MonMessage[0:len(MonMessage)-len(LeNom)-1] ReponseKRT1 = ChercherLaReponse(MonMessage) if ReponseKRT1: print ColK + "KRT1 - " + ReponseKRT1 + ColX #os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + ReponseKRT1 + "'") #os.system("omxplayer -o local /dev/shm/krt1.wav") # On va ensuite exécuter l'action demandée Actions() else: ReponseChoisie = random.randint(1, len(ReponsesAleatoires))-1 #os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + ReponsesAleatoires[ReponseChoisie] + "'") #os.system("omxplayer -o local /dev/shm/krt1.wav") print ColK + "KRT1 - " + ReponsesAleatoires[ReponseChoisie] + ColX ReponsesAleatoires[ReponseChoisie] = "" def ChercherLaReponse(MessageSaisi): global Mot MessageSaisi = MessageSaisi.lower() Mots = MessageSaisi.split() LesReponses = [] for Mot in Mots: if len(Mot) >= 6: Mot = Mot[0:6] if Mot in ReponsesPrevues: UneReponse = ReponsesPrevues[Mot] LesReponses.append(UneReponse) print print ColA + "xxxxxxxxxxxxxxxxxxxx" + ColX print ColA + "Mot reconnu = " + Mot + ColX print ColA + "xxxxxxxxxxxxxxxxxxxx" + ColX print if LesReponses: ReponseChoisie = random.randint(1, len(LesReponses))-1 return LesReponses[ReponseChoisie] return "" def Actions(): # Penser à mettre à jour le dictionnaire... Action = Mot if len(Action) >= 6: Action = Action[0:6] # Actions sur mots reconnus type ORDRE : "action KRT1" ou "KRT1 action" if Action == "+avanc" or Action == "+avant": print ColK + "-> Exécution de l'action..." + ColX elif Action == "+recul": print ColK + "-> Exécution de l'action..." + ColX elif Action == "+stop" or Action == "+top": print ColK + "-> Exécution de l'action..." + ColX elif (Action == "+appro" or Action == "+viens"): print ColK + "-> Exécution de l'action..." + ColX elif (Action == "+repos" or Action == "+rompe"): print ColK + "-> Exécution de l'action..." + ColX elif Action == "+date": Maintenant = time.localtime(time.time()) Date = "Nous sommes le " + time.strftime("%d/%m/%y") + ", chef" print ColK + "KRT1 - " + Date + ColX #os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + Date + "'") #os.system("omxplayer -o local /dev/shm/krt1.wav") elif Action == "+heure": Maintenant = time.localtime(time.time()) Heure = "Il est " + time.strftime("%H") + " heure " + time.strftime("%M") + ", chef" print ColK + "KRT1 - " + Heure + ColX #os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + Heure + "'") #os.system("omxplayer -o local /dev/shm/krt1.wav") # Actions sur un seul mot reconnu elif Action == "bazoom" or Action == "bazou" or Action == "bazoum" or Action == "zumba": print #os.system("omxplayer -o local static/BAZOOM.mp3") elif Action == "binouz": print #os.system("omxplayer -o local static/BIERE.mp3") elif Action == "star" or Action == "trek": print #os.system("omxplayer -o local static/STARTREK.mp3") # En route... while True : print ColA MessageEcrit = raw_input ("Ecrire le message... : ") print ColX Dialoguer()
Posté par Didier sur 11 février 2017 - 04:47 dans Et si vous vous présentiez?