Aller au contenu


Photo

Glenn Robot Humanoide


  • Veuillez vous connecter pour répondre
994 réponses à ce sujet

#61 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 24 juillet 2016 - 10:34

Bon je pose ce que j'ai réussi à faire, mais effectivement j'ai fais une boulette quelque part, car si je change la durée en seconde ben ça ne correpond pas.

 

PS : va falloir que je regarde ça de nouveau, sur le t=int(time.time etc etc ) car ça me donne une erreur.

je fais une pause et je me remet dessus :)

 

Suis sur que je suis pas loin. ^^
 
PS : il ne faut pas tout prendre le code en compte, certaines parti ne sont pas en fonction on va dire ...
 
Edit 15 h 30 : j'ai quand même un résultat bizarre pour des millisecondes, non ?
 
Temps t :  1469366812.5473778 - Degres :  150 - Fmap() :  105  - Delai :  1.05
Temps t :  1469366812.5473778 - Degres :  150 - Fmap() :  118  - Delai :  1.18
Temps t :  1469366812.5473778 - Degres :  150 - Fmap() :  129  - Delai :  1.29
Temps t :  1469366812.5473778 - Degres :  150 - Fmap() :  141  - Delai :  1.41
Temps t :  1469366812.5473778 - Degres :  150 - Fmap() :  152  - Delai :  1.52
 
from Adafruit_PWM_Servo_Driver import PWM
import time


pwm = PWM(0x40,  debug = False)
pwm.setPWMFreq(50)


servomin = 150  
servomax = 510  
anglemin = 0
anglemaxi = 180
accel = 0.5
decel = 0
vitesse = 0
vitessemin = 0
vitessemax = 100
degres = 0


def fdegres ():
    result = int((degres - anglemin) * (servomax - servomin) / (anglemaxi - anglemin) + servomin)
    return result


#t = int(time.time() * 1000)
t = time.time()
tsmin = 0
tsmax = 1
degmin = 0
degmax = 100
degres = 0
delai = 0


def fmap():
    result = int((delai - tsmin) * (degmax - degmin) / (tsmax - tsmin) + degmin)
    #result = int((t - degmin) * (tsmax - tsmin) / (degmax - degmin) + tsmin)
    print (result)
    return result


pwm.setPWM(0, 0, 150)
time.sleep(1)


while True :


    if delai < t:
        delai = time.time() - t
        pwm.setPWM(0, 0, fmap())
        #vitesse += infovitesse
        #degres += infovitesse
        print ("Temps : ", t, "- Degres : ",fdegres(), "- vit foc : ",fmap(), "Delai : ",delai)
        time.sleep(0.01)


    elif  delai == t:
        pwm.setPWM(0, 0, fdegres())
        break

Merci


signature_01.png -->

 

Mon Tipeee
 


#62 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 24 juillet 2016 - 02:55

Oui tu as raison :) en python, on obtient un double en secondes. Dans notre cas, il vaut mieux avoir des milli secondes.

Pour avoir des milli secondes : t= int(time.time() * 1000) et idem pout t0, hein, fois 1000  :)

Et non, à map, tu donne le temps depuis le début donc tu lui donne t-timeDebut

 

En fait y a un truc qui me trouble, tu a du lire le code je pense, si t=time.time() (et que je n'arrive pas à faire le *1000, bizarre), il sort d'ou le t0 ou plutôt t=0 et surtout pour lui mettre un *1000.

Bon je continue de chercher.

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#63 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 24 juillet 2016 - 03:33

Oublie le t=0 :)

 

Pour faire ça, 

Tu place ton servo à 0° et tu initialise une variable timeDebut = int(time.time() * 1000)

Tu boucle comme ceci : 

- La position de ton servo en degrés à l'instant est map(<temps depuis t0>, 0s, 10s, 0°, 100°)

- Tu sors de la boucle quand la position est (supérieur ou) égale à ta position d'arrivée (pour gérer le pb des pouillèmes après la virgule)

 

En python, ça doit ressembler à ça. (j'ai pas vérifié les fautes de frappe et je ne suis pas un pro du python)

angle = 0
duree = 10 #s
angleDebut = 0 #°
angleFin = 100 #°
timeDebut = int(time.time() * 1000)

def map(value, fromLow, fromHigh, toLow, toHigh) :
    return int((value-fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow)

while angle < angleFin :

    timePosition = int(time.time() * 1000) - timeDebut
    # On map la position angulaire sur la durée de la course.
    angle = map(timePosition, 0, duree, angleDebut, angleFin);
    pwm.setPWM(0, 0, angle)
    time.sleep(0.001)
    


#64 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 24 juillet 2016 - 04:06

Effectivement, je ne voyais pas ça comme ça sur le map(), je pouvais chercher longtemps ^^

 

Sinon, oui je le lis bien le code, quelques fautes mais c'est normal on voit que tu fais du C++, puis y a pas des masses de fautes, nickel :)

 

Bon je test ça, merci beaucoup, comme déjà dis j'aurais pu chercher longtemps, et je te tiens au jus ;)

 

C'est tout de même frustrant de ne pas avoir les bons reflexes, gggrrrrrr

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#65 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 24 juillet 2016 - 04:32

Repport : Bon j'ai bien l'angle qui défile, mais le servo ne bouge pas, je cherche avant de poser le code ou quoi que ce soit, il faudrait que je trouve tout seul car tu m'a déjà pas mal mâcher le travail :)

 

Edit 6 mn après : j'ai trouvé, ben le truc vu que ça me prend des valeurs genre le 0 pour le départ en degrés et bien ça ne correspond pas du tout aux valeurs du servomoteur d'ou le premier map() que j'avais fais pour faire la conversion 150 - 510 , 0° - 180°, bon bon bon, en fait il faudrait que je puisse faire cohabiter la conversion et ce que tu m'as donnée en code.

 

Vais chercher comment faire ça, je reviendrai au rapport plus tard ^^

 

 

Merci :)

 

PS : va falloir que je trouve un ptit nom pour mon pseudo robot j'avais pensé à Glenn, je sais pas à voir, si vous avez des suggestions les maker's :)


signature_01.png -->

 

Mon Tipeee
 


#66 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 24 juillet 2016 - 05:10

et si tu mets 150 et 510 à la place de 0 et 100 pour angleDebut et angleFin ?



#67 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 24 juillet 2016 - 05:27

Je viens de tester, au résultat bon ok ça bouge, en revanche ça ne met pas dix secondes, et l'angle correspond maintenant aux valeurs du servo, alors ce qui serait intéressant et de pouvoir conserver une valeur en lecture entre 0 et 180 degrés.

Comme ça on pourrait récupérer la valeur en degrés pour toujours savoir ou on se trouve, mais je vais chercher et mettrai le code éventuellement (y a de grande chance d'ailleurs) :)

 

J'ai fais le truc bête et méchant, ta technique fonctionne super bien, j'ai comparé ça avec un chrono, j'ai bien dix secondes à chaque fois en changeant l'angle.

Mais dans l'idée croiser le map() pour obtenir les degrés que j'avais au début plus celui que tu m'a filé et ça devrait être bon ^^

 

Faut que j'essaye lol

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#68 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 24 juillet 2016 - 05:30

Je parie que ça met 10 ms ^^

Prends le temps de bien comprendre tout ça et tu trouveras facilement comment convertir tes 150-510 en 0 180 avec un autre appel à map()

 

Je te laisse terminer.

 

Edit

 

 

J'ai fais le truc bête et méchant,

Post la correction stp :)


Modifié par Path, 24 juillet 2016 - 05:35 .


#69 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 24 juillet 2016 - 05:39

Oups, j'avais oublié, le timedebut = int(time.time() * 1000) ne fonctionne pas, en revanche sans le int ça passe niveau résultat.

 

Le truc bête et méchant était de comparé la boucle du programme avec un chrono :)

 

J'ai pas encore remis le map () que j'avais fais en degrés ^^


signature_01.png -->

 

Mon Tipeee
 


#70 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 24 juillet 2016 - 07:33

Bon, je sais pas si c'est ce qu'il y a de mieux, mais ça fonctionne :)

 
from Adafruit_PWM_Servo_Driver import PWM
import time

pwm = PWM(0x40,  debug = False)
pwm.setPWMFreq(50)

servomin = 150  
servomax = 510  
anglemin = 0
anglemax = 180

timedebut = time.time()
angle = 0
duree = 5
angledebut = 0
anglefin = 180
degres = 0

def fdegres ():
    result = int((degres - anglemin) * (servomax - servomin) / (anglemax - anglemin) + servomin)
    return result

def fmap (value,  fromlow,  fromhigh,  tolow,  tohigh):
    result = int((value - fromlow) * (tohigh - tolow) / (fromhigh - fromlow) + tolow)
    return result

while True :

    if angle < anglefin and degres < anglefin:
        timeposition = time.time() - timedebut
        angle =  fmap(timeposition,  0,  duree,  angledebut,  anglefin)
        degres = angle
        pwm.setPWM(0, 0, fdegres())
        print ("Degres : ", degres," - Angle : ",angle," - fdegres : ",  fdegres())
        time.sleep(0.01)

    elif  angle >= anglefin:
        angle = 0
        degres = 0
        pwm.setPWM(0, 0, fdegres())
        print ("Degres : ", degres," - Angle : ",angle," - fdegres : ",  fdegres())
        break
print ("Merci Path :) ")

Merci

 

Edit : après avoir posté le code je me dis que j'aurais peut être pu me servir de la fonction map() pour degrés plutôt que d'en créer une nouvelle....

...je testerai ça plus tard.


signature_01.png -->

 

Mon Tipeee
 


#71 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 24 juillet 2016 - 08:32

Print ("de rien")
:)

#72 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 25 juillet 2016 - 12:52

Plop les maker's, bon un ptit retour, si ça va trop vite, ça passe au dessus de ce code :

 

En revanche si ça tourne lentement, le code s'active à la fin correctement ^^

Je vais bien trouver, je voulais juste faire un suivi de tout ça en espérant que ça puisse aider d'autres personnes ;)

elif angle >= anglefin and degres >= anglefin :
  time.sleep(2)
  angle = 0
  degres = angle
  pwm.setPWM(0,0,fdegres())
  break

Merci


signature_01.png -->

 

Mon Tipeee
 


#73 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 03 août 2016 - 05:10

Coucou les Maker's, bon j'ai pas trop pu bosser ces derniers jours sur le bidule ^^, mais j'ai tout de même quelque chose en tête qui me trotte et j'aurais voulu avoir vos avis.

 

Pensez vous qu'il soit préférable de séparer les membres du robot par groupe genre :

 

- Groupe colonne vertébrale avec tout les servos qui vont bien.

- Groupe bras gauche
- Groupe bras droit
- Groupe tête

 

etc etc

 

Je dis ça, comme des capteurs vont interagir avec tout ces servos, il va bien falloir effectuer les mouvements par ordre de priorité, genre (ouais j'aime bien dire genre :) ) je prend l'exemple tout simple avec les capteurs de son, je claque des doigts du coté droit du robot, la tête va effectuer une rotation et si besoin, la colonne aussi se mettra en mouvements...
...un peu comme nous lorsque nous interagissons avec notre environnement.

 

En gros, claque à droite (non pas une claque, ttsss), le groupe tête entre en fonction, suivi de la colone si besoin, et par la suite, (je dis ça comme ça) la caméra ce met en fonction des quelle visualise quelque chose de différent dans sont environnement ou alors des quelle reconnait quelque chose de connu ... (bon j'y suis pas encore, vu à la vitesse ou je vais).

 

J'espère être clair, car dans ma ptite tête, je visualise bien les choses, mais de la à les expliquer clairement c'est différent. :)
C'est que je suis perdu, je ne sais plus par quoi attaquer, sois je continue sur les servomoteurs sois je commence avec les capteurs et l’interaction qu'ils auront avec les servos, si vous avez des suggestions, je suis preneur.

 

Edit 18:37 : une autre question me vient à l'esprit, vu que les micro sont sensible LM393, le bruit des servomoteurs risquent de contrarier les micros, et donc ne plus savoir ou donner de la tête, non ?

 

Merci


Modifié par Oliver17, 03 août 2016 - 05:38 .

signature_01.png -->

 

Mon Tipeee
 


#74 N1oN4o

N1oN4o

    Membre

  • Membres
  • 45 messages
  • Gender:Male

Posté 04 août 2016 - 08:12

Je sais pas s'il y a une "meilleure" façon de faire mais personnelement je ferai la liste des "évenements" possibles avec à chaque fois les actions spécifiques à chaque évenement .

Le plus compliqué, pour moi, c'est de gérer les cas délicats , exemple : 2 évenements "simultanés" avec chacun une action contraire genre avance/recule ou bien qu'est ce qui se passe si ton robot perçoit un bruit à gauche et un autre à droite en même temps ...Faut donner des priorités, j'imagine mais il faut les trouver :D !

#75 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 04 août 2016 - 08:53

Oui N1oN4o (t'a pas choisi le pseudo le plus facile à écrire lol ), la liste des événements je l'ai en tête, et suis bien d'accord avec les multi événements, j'ai bien pensé aussi au priorité :)

 

Mais dans la théorie c'est good, c'est dans la pratique que ça va être plus hard lol

 

Bon vais voir avec le micro lm393 j'ai trouvé peu d'infos en python, vais me démerder avec ce que j'ai :)
Mais ça me chagrine un peu, pour les bruits de servomoteur qui risquent fortement d'interférer avec les micros, vais bien voir.

 

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#76 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 966 messages
  • Gender:Male
  • Location:Anglet

Posté 04 août 2016 - 09:04

Oui ton micro risque d'être perturbé mais rien ne t'empêche "d'écouter " que quand le robot est à l'arrêt, naturellement c'est ce que nous humain faisons quand on cherche à " tendre l'oreille " en générale nous arrêtons ce que nous faisons =).


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#77 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 04 août 2016 - 09:24

Oui ton micro risque d'être perturbé mais rien ne t'empêche "d'écouter " que quand le robot est à l'arrêt, naturellement c'est ce que nous humain faisons quand on cherche à " tendre l'oreille " en générale nous arrêtons ce que nous faisons =).

 

C'est pas faux, va falloir que je me penche sur le sujet, ensuite le sonar sr04, ensuite voir l'infrarouge (pour les distances aussi si je dis pas de bêtises, ou autre ?), ensuite la cam (mais voir aussi avec Ashira et son projet :) ), ensuite plein de trucs j'ai un écran aussi, bref, j'en ai pour des plombs lol :)

 

Ou voir de vrai micro pour la reconnaissance vocal et remplacer le lm393..

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#78 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 04 août 2016 - 12:50

Heeeyyyyyy j'en ai une autre, je serais partant pour mais j'aimerais vos avis les maker's, voili voilou, la programmation parallele avec threading, je pense que c'est incontournable pour exécuter quasiment plusieurs taches en même temps (micro, caméra, ultrason etc etc), qu'en pensez vous. ?

 

Edit 15 : 20 : bon, je sais suis chiant, mais je test le LM393, je l'ai branché direct sur la PI, j'ai une sorte de retour via un programme qui apparemment sert pour un capteur de lumière, mais utilisante le LM393, donc je sais pas vraiment ce que ça fais. 
Le truc qui me travail, c'est qu'en cherchant sur le net des infos sur le LM, je tombe sur pas mal de chose mais avec Arduino, et sur l'arduino ils le branchent tous sur une sortie analogique, perso je croyais que le LM était numérique (0 ou 1 en information), quelqu'un à une idée sur le sujet, pour l'instant de la façon que c'est branché ça crame pas.

 

Mais si c'est bien de l'analogique, j'aurai une meilleur précision du retour on est d'accord, et il me faut une sorte de convertisseur (que j'ai déjà) numérique en analogique.

https://www.adafruit.com/product/1085ça version copie.

 

J'ai un peu peur de faire cramer la PI, et le datasheet, ben suis pas doué en décryptage de ces fichiers, pourtant c'est pas faute de les lires.

 

Vais tester, une tite prière svp ^^

 

Merci


Modifié par Oliver17, 04 août 2016 - 02:27 .

signature_01.png -->

 

Mon Tipeee
 


#79 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 04 août 2016 - 05:55

Journal de bord du capitaine Kirk (à non c'est pas ça :) ), bon j'ai réussi à mettre en place le convertisseur et en python 3, car il ne fonctionné que en 2 (coup de bol d'avoir trouvé la manip).

Je m'attaque maintenant au branchement du micro sur le convertisseur, on croise les doigts pour que ça crame pas, j'ai tout de même un doute sur l'utilité d'une résistance ...

Après réflexions, le micro est branché sur la sortie 5V, et le convertisseur sur le 3.3V, sachant que pour le convertisseur je suis sur l'option "1 = +/- 4.096V", encore un mystère :)

 

En tout cas, et après test, le micro fonctionne en direct sur la carte, ce qui me donne j'ai l'impression du 0 ou 1.
Et ça fonctionne via le convertisseur ou la j'ai beaucoup plus de valeur afficher avec un programme de test.

 

En tout cas, ce que je trouve intéressant (et voir selon vos réponses) c'est que si je peux le laisser via l'analogique, je pourrais faire varier la vitesse des servomoteurs via la valeur du son/bruit obtenu, genre : un son fort va faire bouger rapidement les servo, un son plus léger les fera bouger plus lentement etc etc

 

Récapitulation pour le dernier test : LM393 branché sur un convertisseur analogique ADS1115.

 

Bon je sais, j'ai posté plusieurs chose à la fois, mais qu'en pensez vous svp, un avis, vais je droit dans le mur et faire une grosse connerie à tout cramer ???

 

Merci :)


signature_01.png -->

 

Mon Tipeee
 


#80 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 966 messages
  • Gender:Male
  • Location:Anglet

Posté 05 août 2016 - 05:42

J'ai rien compris à ton problème x) En fait je crois que j'ai relu deux fois tes messages et je me suis perdu. 

Déjà, quand tu parles d'un composant tu peux mettre en lien une datasheet ou au minima un lien qui pointe vers le produit histoire de suivre un peu ? Pour moi un LM293 c'est un dual comparateur ...  ( EDIT : Rajout du M resé dans le clavier car un L293 est bien un dual driver de moteur CC) 

Ensuite peux tu : commencer par bien présenter 

1) Ce que tu as  ( composant avec datasheet, ordinateur monocartes utilisé, ensemble de l'architecture, langage etc... )

2) Ce que tu veux faire  ( equivalent d'un mini cahier des charges en quelques phrase simple , " quoi, pour qui , sur quoi, dans quel but "

3) Ce que tu as déjà essayé  ( schémas ou autre + code )

4) Le résultat que tu as  ( photo , log de résultat autre ? )

5) Le problème éventuel rencontré  ( Explication simple du décalage entre le résultat obtenu et le résultat escompté, suggestion d'explication possible si tu as des idées ) 

6) Ce que tu comptes essayer   ( si tu as des idées ) 

7) Une liste claire de questions ... 

Ainsi je pense que perso je ne serais plus perdu et pourrais sans doute répondre à quelques questions =) 
Et à moins que ça soit juste moi qui ai plus les yeux en face des trous à cause de l'absence de sommeil, je pense que ça sera aussi plus claire pour tout les autres qui pourront du coup peut être essayer de t'aider =) 

 

à très bientôt ! =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 





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

0 members, 0 guests, 0 anonymous users