Aller au contenu


Contenu de Didier

Il y a 22 élément(s) pour Didier (recherche limitée depuis 04-mai 13)


#98043 Reconnaissance de carte en lego mindstorm

Posté par Didier sur 31 juillet 2018 - 08:44 dans Lego

Bonsoir à tous.

 

Les cartes collent entre elles... Peut-être qu"en les "talquant" elles glisseraient mieux.

 

Didier.




#97891 Brainstorming projets robotiques originaux

Posté par Didier sur 26 juillet 2018 - 07:02 dans Lego

Et quand tour cela aura été fait...

 

Un robot qui se tournera les pouces à notre place.

 

Didier.




#95500 Le problème du voyageur de commerce ( Javascript )

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.




#95495 Le problème du voyageur de commerce ( Javascript )

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.




#95492 Le problème du voyageur de commerce ( Javascript )

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.

 




#95485 Le problème du voyageur de commerce ( Javascript )

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.




#95478 Le problème du voyageur de commerce ( Javascript )

Posté par Didier sur 15 mai 2018 - 09:29 dans Intelligence artificielle

 
Bonsoir à tous.
 
Il y a quelque temps, sur un autre fil de ce forum parlant d'intelligence artificielle, j'ai déposé 2 ou 3 fichiers/programmes utilisant un algorithme d'évolution génétique.
 
Mais après réflexion je me suis rendu compte qu'il n'était pas nécessaire d'utiliser un tel algorithme pour résoudre les problèmes posés. (Sinon juste pour comprendre comment fonctionne cet algorithme).
 
En effet, la solution de ces problèmes étant connue d'avance, il "suffirait" de la coder directement.
 
Il me fallait prendre un problème pour lequel il n'existe pas d'algorithme connu à ce jour permettant de trouver la solution exacte.
 
J'ai donc retenu le "problème du voyageur de commerce".
(Voir Wikipédia pour plus d'informations sur ce problème).
 
 
En résumé :
 
Pour un nombre de lieux X, déterminer un plus court chemin qui passe par chaque lieu une et une seule fois.
 
 
J'ai donc codé un programme écrit en HTML et Javascript (sans aucune librairie extérieure) qui, par plusieurs approches, tente de répondre au problème.
 
 
- L'approche mode Recherche par Force brute (ou recherche exhaustive) utilise un algorithme testant tous les circuits possibles.
 
Chaque circuit possible est évalué, si le circuit actuel est meilleur, il est conservé et défini comme étant le meilleur circuit puis on recommence avec le circuit suivant.
 
Cet algorithme se termine lorsque tous les circuits possibles ont été testés. Il permet de définir, à coup sûr, le meilleur circuit. Mais il peut mettre très,très longtemps pour arriver à son terme.
 
Compte tenu de "l'explosion" du nombre de circuits possibles en fonction du nombre de lieux, cet algorithme ne fonctionnera dans le fichier que pour 7 lieux au maximum. 
 
 
- L'approche mode Lieu proche utilise un algorithme glouton par insertion.
 
Pour chaque lieu, un circuit est construit pas à pas en y insérant de nouveaux lieux.
 
Le circuit est composé du lieu de départ et celui qui en est le plus proche.
 
Les étapes suivantes consistent à insérer un lieu supplémentaire dans le circuit de manière optimale, c'est-à-dire qu’elle augmente au minimum la longueur totale du circuit.
 
Cet algorithme se termine lorsque tous les lieux de départ et les lieux à parcourir ont été testés.
 
Si l’insertion d'un lieu dans un circuit est optimale et rapide à calculer la solution finale n’est pas nécessairement optimale.
 
 
- L'approche mode Algorithme d'évolution génétique.
 
Les algorithmes génétiques s’inspirent de la théorie de l’évolution des espèces.
 
Comme dans la vie, les espèces peuvent se reproduire pour créer de nouveaux individus, et leur ADN peut subir des mutations au cours de leur vie. De plus, comme dans la nature, plus un individu est "fort", plus il a de chance de se reproduire.
 
Les grandes étapes de l'algorithme :
 
-1- Création au hasard de la population initiale (génération 1).
-2- Evaluation des individus de cette population (calcul des circuits, des meilleurs individus, tri de la population).
-3- Sélection des meilleurs individus et de quelques individus moins bons.
-4- Création des nouveaux individus par croisements des individus sélectionnés.
-5- Mutation de certains de ces nouveaux individus.
-6- Validation de la nouvelle population pour la génération suivante et retour à l'étape 2.
 
Cet algorithme ne se termine jamais. (Mais les résultats obtenus se stabilisent à un niveau 'acceptables').
 
Il est impossible de savoir si le circuit sélectionné est le meilleur de tous les circuits possibles.
 
 
- L'approche mode Algorithme de colonie de fourmis.
 
Les algorithmes de colonie de fourmis s’inspirent du comportement d'une colonie de fourmis.
 
Les fourmis sont capables de sélectionner le plus court chemin pour aller du nid à une source de nourriture grâce au dépôts et au suivi de pistes de marqueurs appelés phéromones.
Les phéromones sont déposées par les fourmis sur leur chemin. les fourmis ont tendance à suivre le chemin le plus marqué.
Les phéromones s'évaporent mais au fil du temps les fourmis choisiront la piste la plus courte entre le nid et la nourriture.
 
Les grandes étapes de l'algorithme :
 
-1- Création de la population initiale : Chaque fourmi est déposée sur un lieu du circuit choisi au hasard.
-2- Les fourmis parcourent le circuit en choisissant l'ordre des lieux à parcourir selon la puissance du marquage ou la distance entre les lieux.
-3- Le circuit de chaque fourmi est évalué
-4- La fourmi ayant trouvé le chemin le plus court dépose ses phéromones.
-5- Les fourmis sont repositionnées à leur point de départ et retour à l'étape 2.
 
Cet algorithme ne se termine jamais. (Mais les résultats obtenus se stabilisent rapidement à un niveau 'acceptables').
 
Il est impossible de savoir si le circuit sélectionné est le meilleur de tous les circuits possibles.
 
 
Le plus difficile pour moi dans ce projet a été de déterminer les meilleures valeurs pour les variables déterminantes pour l'algorithme d'évolution génétique et celui de la colonie de fourmis.
 
Pour l'algorithme génétique :
- Nombre initial de voyageurs
- Nombre des meilleurs voyageurs à retenir pour la génération suivante
- Probabilité pour qu'un un peu moins bon voyageur soit tout de même retenu pour la génération suivante
- Probabilité de mutation et type de la mutation 
     Renversement d'une partie de l'ADN
     Permutation de 2 gènes
     Hasard
 
Pour l'algorithme de la colonie de fourmis
- Nombre initial de fourmis
- Valeur d'une dose de phéromones et taux d'évaporation
- Valeurs minimum et maximum du marquage pour un chemin entre deux lieux
- Seuils pour le choix des chemins à emprunter
     Selon le marquage
     Selon la distance
     Hasard
 
Mes différents tests m'ont également montré que pour le problème posé l'algorithme de la colonie de fourmi semble donner les meilleurs résultats en un nombre "raisonnable" d'itérations.
 
En codant ce programme en Javascript j'ai appris comment trier un tableau, comment trouver des doublons et/ou des manquants dans un tableau, permuter des données, utiliser les index et pleins d'autres choses.
(A noter, je n'ai pas trouvé sur le net de fichier écrit en pur javascript - cad sans librairie spécifique - traitant ce problème).
 
Je vous laisse tester par vous même si vous le souhaitez.
 
Voici en pièce joint le fichier livré "en l'état".
Le fichier est limité à 50 lieux maximum ( modifiable ) car au delà de cette limite mon ordinateur ( un peu ancien ) rame sérieusement.
 
Voili, voilà.
 
Didier.
 
 

Fichier(s) joint(s)




#92348 IA et Algorithme d'apprentissage

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.

 

Fichier joint  _EvolutionGénétique.html   12,53 Ko   71 téléchargement(s)

 

_EvolutionGénétique2

 

Les individus apprennent à sauter quand il le faut.

 

Fichier joint  _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".

 

Fichier joint  _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.

 

Fichier joint  _RéseauNeuronal.html   16,36 Ko   82 téléchargement(s)

 

_FourmiDeLangton

 

Ben... Une fourmi de Langton ( et son autoroute ).

 

Fichier joint  _FourmiDeLangton.html   7,09 Ko   65 téléchargement(s)

 

 

Voili, voilà

 

Didier.




#85506 Entraînement d'un réseau de neurones artificiels grâce à un algorithme d...

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.




#85504 Entraînement d'un réseau de neurones artificiels grâce à un algorithme d...

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.




#80518 Librairie pour traiter des phrases

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)




#80515 Librairie pour traiter des phrases

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)




#80514 Librairie pour traiter des phrases

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()



#79674 Capteur HC-SR04 et raspberry

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.

(A bientôt, peut-être)



#79220 Mon moteur CC tourne trop vite

Posté par Didier sur 13 février 2017 - 07:47 dans Energie

Bonjour.

 

Merci pour ta réponse, je regarde de ce coté.

 

Didier.
(A bientôt, peut-être)



#79205 Mon moteur CC tourne trop vite

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.

 

Didier.
(A bientôt, peut-être)
 
 



#79141 Capteur HC-SR04 et raspberry

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.

(A bientôt, peut-être)
#!/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()



#79140 Je vous présente KRT1

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.

 

Didier.
(A bientôt, peut-être)



#79095 Capteur HC-SR04 et raspberry

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.

 

Didier.
(A bientôt, peut-être)



#79094 Je vous présente KRT1

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.

 

Didier.
(A bientôt, peut-être)



#79086 Je vous présente KRT1

Posté par Didier sur 11 février 2017 - 04:54 dans Robots roulants, chars à chenilles et autres machines sur roues

Bonjour à tous.
 
Je vous annonce la naissance de mon premier robot et vous présente :
 
KRT1 (Prononcez Crétin !).
 
KRT1 est capable d'avancer, reculer, tourner à droite ou à gauche et, bien sûr stopper.
 
En plus de ces instructions de déplacements KRT1 sait obéir à quelques ordres simples.
 
Pour communiquer avec KRT1 plusieurs méthodes sont possibles :
Par les touches de sa page Web associée.
Par écrit sur cette même page Web.
Par la voix (Il faut que KRT1 soit assez proche car il est un peu sourdingue).
 
KRT1 voit et peut montrer ce qu'il voit.
KRT1 écoute et parle, il peut dialoguer.
KRT1 écrit ce qu'il dit mais apparemment il est pour la réphorme de l'ortograffe.
KRT1 est mal coiffé.
KRT1 sait se promener seul sans se cogner systèmatiquement la tronche dans les murs.
KRT1 assume son nom (Il n'a pas eu le choix, je le lui est imposé).
KRT1 reconnait les couleurs rouge et jaune ainsi que les points de lumière.
KRT1 peut jouer à "Cherche la baballe !".
KRT1 n'a pas de cerveau positronique.
KRT1 aime le chocolat mais n'y a pas droit car il n'a pas de bras.
KRT1 approche de son maître pour peu que celui-ci porte un nez rouge de clown.
KRT1 aime la musique du générique de la série Star Trek.
KRT1 énerve ma femme (Vire moi ce truc), amuse ma petite fille (C'est 'ligolo' Papy) et effraie le chat (Miaou).
KRT1 n'est pas beau mais il ne faut pas le lui dire.
KRT1 et moi aimons la bonne bière (Surtout moi).
KRT1 connait les 3 lois de la robotique mais s'en cogne royalement.
KRT1 n'apprécie pas qu'on lui parle en anglais (Il est vrai qu'ils nous ont quand même brulé la Jeanne).
 
En général KRT1 est respectueux mais il peut parfois être désobéissant et/ou grossier.
 
KRT1 est encore et sera toujours en phase d'apprentissages et réglages. Je lui apprends régulièrement de
nouveaux mots avec les réponses/actions associées (Je souhaite quand même qu'un jour il se rende vraiment utile).
 
Bref, KRT1 est loin d'être parfait mais je commence à bien aimer ce p'tit con.
 
 
Ses caractéristiques physiques :
 
KRT1 pèse 985 grammes, il mesure 20 cm de haut 23 cm de long et 18 cm de large.
Son IMC est de 24,625 : il est en limite du surpoids...
 
Il est composé de :
1 chassis équipé de 2 roues motorisées alimentées par 4 piles de 1,5v et 1 roue folle-dingue.
1 Rapberry Pi 3 lui servant de cerveau (Alimenté par une batterie de recharge pour portable).
1 caméra pour Raspberry montée sur une articulation "pan-tilt et 2 servos"
1 microphone usb.
1 haut parleur branché sur Jacques.
2 capteurs d'ultra-sons.
3 leds.
1 buzzer.
Des breadboards, des résistances et autres machins/bidules électroniques, des jumpers.
Un bout de planche de récupération recoupée et percée par moi même avec mes mimines.
De la quincaillerie, des scratchs auto-collants, un peu de fil de nylon, une paille.
De la ficelle et du papier... Ah non, ça c'est pour des marionnettes.
 
 
Ses caractéristiques intellectuelles :
 
KRT1 fontionne sur un Raspberry Pi 3 avec un Linux Rasbian Pixel.
Le programme principal de KRT1 est écrit en Python.
 
Les installations complémentaires nécéssaires et suffisantes sont :
WEB.PY pour la communication.
VLC pour la diffusion du flux vidéo.
OpenCV pour la reconnaissance visuelle.
PyAudio pour la gestion du son.
Pico TTS pour parler.
Et SpeechRecognition STT pour la reconnaissance vocale (BING).
 
Fichiers créés par moi tout seul avec l'aide de multiples sites Internet.
'THE' fichier Python ( Environ 1200 lignes ).
Un fichier HTML comprenant un soupçon de JavaScript.
Un fichier CSS.
 
Et enfin, quelques fichiers musicaux pour le fun. 
 
 
Pour finir voici quelques photos de KRT1 et de son interface de communication :
 
KRT1-1.jpg
KRT1-2.jpg
KRT1-3.jpg
KRT1-4.jpg
KRT1-5.jpg
KRT1-6.jpg
 
Voili-Voilà... C'est tout pour le moment.
(Je vais tenter de me lancer dans d'autres réalisations).
 
 
Didier.
(A bientôt, peut-être)
 



#79085 Je me présente : Didier...

Posté par Didier sur 11 février 2017 - 04:47 dans Et si vous vous présentiez?

Bonjour à tous.
 
Depuis que j'ai découvert, il y a quelques semaines, ce site et son forum je lis régulièrement
les différentes échanges et trouve cela intéressant.
 
J'ai donc décidé de m'inscrire et comme il est d'usage je me présente.
 
Mon prénom : Didier.
 
Mon parcours :
Naissance.
Pleurs et biberons.
Crêche.
Scolarité.
Service national.
Début d'activité salariée (Chiffres et gestion).
Mariage.
Mon premier ordinateur : un ZX81 (1ko de mémoire !) que je possede toujours.
  (Il sera suivi d'un C64 puis de plusieurs PC tournant sous DOS puis Windows).
Printemps, été, automne, hiver, printemps, été, automne, hiver, ...
 
Tiens ! Et si j'essayais de construire des robots ?
 
J'aime bien les robots parce que :
Plus jeune j'ai vu Goldorak à la télé.
Plus tard j'ai lu du Asimov.
Et plus recemment j'ai découvert le Raspberry Pi.
 
C'est bon là comme présentation, ça va ?
 
Je vais donc de ce pas créer un nouveau message pour vous présenter ma première réalisation
plus ou moins aboutie...
 
 
Didier.
(A bientôt, peut-être)