- Robot Maker
- → Contenu de la.couenne
Contenu de la.couenne
Il y a 22 élément(s) pour la.couenne (recherche limitée depuis 03-avril 13)
Par type de contenu
Voir pour ce membre
#84003 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 25 mai 2017 - 10:51 dans Programmation
Voici en attendant une petite vidéo vite faite de mon robot, et je mettrais + d'info sur sa conception dès que j'arrive à faire qque chose de concert.
Avec OpenCV je parviens à suivre le regard, suivre une couleur, et reconnaître un visage (mais créer un décalage de 5 à 6 sec), le tout en python.
Mon but serait de repérer le regard, et récupéré la couleur du t-shirt afin que le robot suivie la personne... Tout un programme
A tout bientôt!
#83982 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 25 mai 2017 - 08:17 dans Programmation
Hello,
Comme j'avais dit que je reviendrais donner des nouvelles, me revoilà
Donc j'ai viré mes 2 servo à rotation continue puisque je n'arrive à rien, j'ai fait un pont en H avec une puce L293D et 2 moteurs 6v.
Forcément je perds en précision, mais je crois que ça va quand même pas trop mal..
Je reprends donc mon code OpenCV, mon but est de repéré les yeux, afin de récupérer l'histogramme des couleurs d'un rectangle situé sous la tête (la couleur du t-shirt) afin de bêtement suivre cette couleur -> donc suivre la personne..
Si mon projet est concluant, je referai un post pour le présenter
Merci à tous pour votre aide en tout cas!
et bon bidouillage
#84017 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 26 mai 2017 - 01:04 dans Programmation
Re,
le temps de latence c'est juste quand je fais la reconnaissance des visages, faudrait que je diminue la taille de l'image pour gagner du temps de traitement je pense, mais j'ai décidé de juste repérer les yeux, de cette façon ça prend moins d'une sec
Avec ma détection de couleur, je n'ai pas eu le temps de tester le suivi horizontal avec les 2 moteurs à chenilles, je ferai ça ces jours et reviendrai ici..
J'ai hâte que tu t'y mette Oliver17 à l'OpenCV, car vu comme tu as poussé tes recherches sur les servo, tu vas réaliser des trucs monstres
A++
#84042 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 26 mai 2017 - 09:32 dans Programmation
Je la mets en n/b puis la redimensionne de cette manière:
#84088 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 27 mai 2017 - 08:52 dans Programmation
Re,
C'est un Raspberry 3, mais ces jours prochains je vais essayer encore qques tests, et je reviendrai avec des questions + précises dans un nouveau post
Bon w-end et à très vite!
#83571 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 14 mai 2017 - 01:38 dans Programmation
Merci pour vos réponses rapides!
Je ne pensais vraiment pas être bloqué sur un truc aussi basique :/
Pour répondre à vos questions, j'utilise le PCA9685 de Adafruit:
https://cdn-shop.ada...x728/815-06.jpg
Mike118 Non il ne ralenti pas avant de changer de sens, alors qu'il devrait à mon avis aussi. Et il n'accélère pas non plus.. (Si j'augmente le time.sleep il ne se passe rien, le script est juste + long à executer)
Oui Arobasseb, j'ai souvent vu sur internet que 1,5ms l'arrête, et que le sens de rotation dépend des largeurs d'impulsions entre 1ms et 2ms, mais il me semble que c'est ce que je fais en écrivant pwm.set_pwm(2, 0, 1500) il est censé arrêter le servo, non?
(le 1000 et 400 était des valeurs au hasard, je voulais tester s'il y avait au moins un changement de vitesse)
J'ai refais mon code sans la boucle, ce sera + simple à comprendre:
#!/usr/bin/python import Adafruit_PCA9685 # Le module PCA9685 pour le ctrl des servo import time pwm = Adafruit_PCA9685.PCA9685() pwm.set_pwm_freq(60) # La frequence des impulsions pwm.set_pwm(2, 0, 2000) # moteur tourne time.sleep(1) pwm.set_pwm(2, 0, 710) # 710 -> le moteur s inverse time.sleep(1) pwm.set_pwm(2, 0, 2000) # ne fait rien?! (ne se rinverse pas) time.sleep(1) pwm.set_pwm(2, 0, 1500) # 1500 -> le moteur ne s arrete pas?!
Alors si je met 2000 il tourne, vers 710 (donc bien moins que 1000) il s'inverse, ce qui est curieux c'est que si je remet 2000 il ne se ré-inverse pas!
et si je mets 1500 il ne s'arrête pas...
Oliver17 c'est une très bonne idée de se baser sur le temps, mais mon problème c'est que mon servo ne s'arrête pas, je ferai comme ça dès que j'arrive à l'arrêter
Bonne fin de week-end à tous!
#83614 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 15 mai 2017 - 09:31 dans Programmation
Merci beaucoup pour toutes ces réponses
Suite à ton post arobasseb, j'ai cherché dans ce sens et trouvé des exemples qui utilisent l'instruction pwm.set_duty_cycle() mais ça me génère une erreur, je vais creuser ça cette fin de semaine!
Ce qui m’énerve c'est que j'ai 2 servo normal pour les axes horizontal et vertical de la tête qui fonctionnent nickel, et ces 2 servo continu ne marchent pas alors que ca doit être + ou - le même principe
Sinon Bobox merci pour ton explication, c'est bien ça mais comme tu dis ça n'explique pas pourquoi le servo ne se ré-inverse pas quand je renvoie la 1ère commande lol
Bref merci encore à tous, je vais creuser encore et je reviens dès que j'ai trouvé.. et sinon je vire mes 2 servo et je mets des moteur DC avec un pont en H, mais dans ce cas je vais perdre en précision par rapport à un servomoteur....
La suite dans qques jours !
#83546 Comment arrêter un servo à rotation continue?
Posté par la.couenne sur 13 mai 2017 - 10:55 dans Programmation
Re Bonjour à tous!
Mon projet actuel est un petit chien qui suit une personne partout à l'aide d'OpenCV.
J'utilise deux servomoteurs à rotation continue, je programme en Python, et je ne parviens ni à varier leur vitesse, ni à les arrêter!
Je suis sûr que cette information figure quelque part dans ce forum, mais j'ai beau chercher je ne trouve rien, ni sur Google étonnamment
# donc on fait une boucle de 1000 à 400 pour trouver où le servo veut bien s'arreter.. i = 1000 while 1: i = (i - 1) pwm.set_pwm(2, 0, i) print(i) time.sleep(0.2) if i < 400: break print("fin")
Si quelqu'un a une idée je suis preneur, ça fait toute la soirée que je tourne en rond :kez_11:
Merci d'avance!
#80058 Comment faire marcher le module laser d'Adafruit?
Posté par la.couenne sur 07 mars 2017 - 09:46 dans Programmation
Bonjour à tous,
Voici une photo de mon projet de robot:
J'ai changé son capteur ultrason pour 2 capteurs Laser VL53L0X de chez Adafruit
Source: https://www.adafruit.com/product/3317
#80080 Comment faire marcher le module laser d'Adafruit?
Posté par la.couenne sur 08 mars 2017 - 01:54 dans Programmation
Ahah j'ai trop honte...
Comme tu me l'as suggéré, le Bus I2C n'était pas activé!! (Je croyais en fait qu'il l'était par défaut, et qu'on pouvait l'enlever si on voulait..)
Merci pour toutes vos réponses! et aussi pour le temps très court! Ca fait plaisir de voir autant de passionnés
Je vous tiendrai informés des avancées de mon système de navigation au laser
#84264 Mon projet: CubDog
Posté par la.couenne sur 02 juin 2017 - 02:32 dans Robots roulants, chars à chenilles et autres machines sur roues
#84266 Mon projet: CubDog
Posté par la.couenne sur 02 juin 2017 - 03:41 dans Robots roulants, chars à chenilles et autres machines sur roues
J'ai une question, qu'est-ce que vous utilisez vous comme câble HDMI?
Voici le mieux que j'ai trouvé, mais super long :
https://shop.mediama...le/idp70pio0tpn
#84619 Mon projet: CubDog
Posté par la.couenne sur 11 juin 2017 - 09:51 dans Robots roulants, chars à chenilles et autres machines sur roues
Re tous
Alors j'ai bien reçue ma fiche à monter soit-même, mais sans pince à sertir c'est juste impossible
Les connecteurs sont tellement proches, j'ai toujours eu 2 voir même 3 fils qui se touchent...
Du coup j'ai pris un fils HDMI qui se roule, j'ai enlevé l'enrouleur, et mis le tout comme ça:
C'est un fils plat, donc il est très souple et facile à installer..
Voilou pour les dernières infos
#84324 Mon projet: CubDog
Posté par la.couenne sur 03 juin 2017 - 03:10 dans Robots roulants, chars à chenilles et autres machines sur roues
Cool Melmet, j'ai commandé une prise HDMI à monter soit-même, je n'ai pas pris la pince à sertir à 300 balles, on verra ce que ça donne sans
Sinon Path j'avais oublié de répondre à ta question sur où trouver les Makeblock, ici y a les revendeurs officiels:
http://www.makeblock.com/distributors
A++
#84269 Mon projet: CubDog
Posté par la.couenne sur 02 juin 2017 - 04:08 dans Robots roulants, chars à chenilles et autres machines sur roues
Mais je ne trouve aucun câble de moins de 30cm, moi perso j'ai toujours pris des rétractables, je retire le boitier, de cette façon j'ai un cable plat et facilement pliable, par contre dans ce robot j'ai tellement peu de place qu'il va me falloir trouver une autre solution
#84279 Mon projet: CubDog
Posté par la.couenne sur 02 juin 2017 - 09:16 dans Robots roulants, chars à chenilles et autres machines sur roues
Donc pour faire tourner la tête j'utilise le module PCA9685 , que je branche de cette façon:
Pour installer OpenCV sur le raspberry, dans la console taper:
sudo apt-get install python-opencv
sudo apt-get install libopencv-dev
Et maintenant pour la détection du visage en Python avec OpenCV:
#!/usr/bin/python # suivi du regard import Adafruit_PCA9685 # Le module PCA9685 pour le ctrl des servo import cv2 # OpenCV pour le ttt des img #import numpy as np import time pwm = Adafruit_PCA9685.PCA9685() # Initialiser en utilisant l adresse I2C par defaut (0x40) pwm.set_pwm_freq(60) # Set frequency to 60hz, good for servos # Ebat max des servo: servo_max_droit = 250 servo_max_gauche = 550 servo_max_haut = 500 servo_max_bas = 900 # on recentre les 2 servo: pwm.set_pwm(0, 0, 400) # pour horizontal: (num_du_servo_0, 0, impulsions) pwm.set_pwm(1, 0, 600) # pour vertical: (num_du_servo_1, 0, impulsions) servo_actuel_horizontal = 400 # on modifiera cette variable pour deplacer la tete servo_actuel_vertical = 600 time.sleep(1) # Chemin du fichier .xml qui contient des modeles de visages (classifier) face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') capture = cv2.VideoCapture(0) # flux de la webcam (utiliser VideoCapture(1) pour faire plusieurs flux) while 1: ret, img = capture.read() # on recupere une image du flux video #image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # on la met en nuances de gris pour gagner du temps de traitement image = img # tester si c est vraiment utile de ne pas la laisser en couleur... newsize = (int(image.shape[1]/1.5), int(image.shape[0]/1.5)) # nouvelle taille: essayer entre 1.5 et 2 image = cv2.resize(image, newsize) # fonction qui redimensionne pour gagner en temps de calcul # la fonction detectMultiScale retourne les positions de visages detecter avec les modeles contenu dans le .xml faces = face_cascade.detectMultiScale(image, 1.4, 3) # voir internet pour les differents parametres for (x,y,w,h) in faces: # on recupere les coordonnees de la tronche detectee cv2.rectangle(image,(x,y),(x+w,y+h),(255,7,8),2) # on dessine un rectangle print("X: " + str(x)) print("Y: " + str(y)) print("H: " + str(h) + " donc la distance") print("") # deplacements horizontaux de la tete: if x < 120: servo_actuel_horizontal = (servo_actuel_horizontal + 3) if servo_actuel_horizontal > servo_max_gauche: servo_actuel_horizontal = servo_max_gauche if x > 170: servo_actuel_horizontal = (servo_actuel_horizontal - 3) if servo_actuel_horizontal < servo_max_droit: servo_actuel_horizontal = servo_max_droit pwm.set_pwm(0, 0, servo_actuel_horizontal) # pour horizontal print("Nouvelle position du servo horizontal: " + str(servo_actuel_horizontal)) # deplacements verticaux de la tete: print("Pr ctrl servo_actuel_vertical: " + str(servo_actuel_vertical)) if y > 95: servo_actuel_vertical = (servo_actuel_vertical + 2) if servo_actuel_vertical > servo_max_bas: servo_actuel_vertical = servo_max_bas if y < 55: servo_actuel_vertical = (servo_actuel_vertical - 2) if servo_actuel_vertical < servo_max_haut: servo_actuel_vertical = servo_max_haut pwm.set_pwm(1, 0, servo_actuel_vertical) # pour vertical print("Nouvelle position du servo vertical: " + str(servo_actuel_vertical)) cv2.imshow('Image capturee',image) # on affiche l image pour ctrl k = cv2.waitKey(30) & 0xff if k == 27: # si ESC on sort de la boucle break capture.release() cv2.destroyAllWindows()
Pour le suivi des couleurs (ici bleue):
#!/usr/bin/env python # Suivi par la tete de la couleur bleue import Adafruit_PCA9685 # Le module PCA9685 pour le ctrl des servo import time import cv2 # OpenCV pour le ttt des img import numpy as np pwm = Adafruit_PCA9685.PCA9685() # Initialiser en utilisant l adresse I2C par defaut (0x40) pwm.set_pwm_freq(60) # Set frequency to 60hz, good for servos # Ebat max des servo: servo_max_droit = 250 servo_max_gauche = 550 servo_max_haut = 500 servo_max_bas = 900 # on recentre les 2 servo: pwm.set_pwm(0, 0, 400) # pour horizontal: (num_du_servo_0, 0, impulsions) pwm.set_pwm(1, 0, 600) # pour vertical: (num_du_servo_1, 0, impulsions) servo_actuel_horizontal = 400 # on modifiera cette variable pour deplacer la tete servo_actuel_vertical = 600 time.sleep(1) # on extrait la position X et Y de la couleur bleue capture = cv2.VideoCapture(0) # flux de la webcam (utiliser VideoCapture(1) pour faire plusieurs flux) while 1: ret, image = capture.read() # on recupere une image du flux video newsize = (int(image.shape[1]/1.5), int(image.shape[0]/1.5)) # nouvelle taille: essayer entre 1.5 et 2 image = cv2.resize(image, newsize) # fonction qui redimensionne pour gagner en temps de calcul hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # on converti l image en HSV dans $hsv # on definit des seuils de couleurs bleues en HSV bleu_bas = np.array([110,50,50]) bleu_haut = np.array([130,255,255]) bleu = cv2.inRange(hsv, bleu_bas, bleu_haut) # on filtre que le bleu dans l image $hsv que l on met dans $bleu cv2.imshow('Ctrl vision de la couleur',bleu) # on affiche l image pour ctrl # on trouve le contour de la couleur contour = cv2.findContours(bleu.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] # et on calcule un cercle autour de ce contour centre = max(contour, key=cv2.contourArea) ((x, y), radius) = cv2.minEnclosingCircle(centre) if radius > 10: # seuil minimum avant de dessiner le cercle cv2.circle(image, (int(x), int(y)), int(radius), (0, 255, 255), 2) # cercle jaune cv2.circle(image, (int(x), int(y)), int((radius / radius) + 1), (255, 255, 255), 2) # point blanc print("Distance: " + str(radius)) print("X: " + str(x)) print("Y: " + str(y)) print("") x = int(x) y = int(y) # deplacements horizontaux de la tete: if x < 150: servo_actuel_horizontal = (servo_actuel_horizontal + 3) if servo_actuel_horizontal > servo_max_gauche: servo_actuel_horizontal = servo_max_gauche if x > 300: servo_actuel_horizontal = (servo_actuel_horizontal - 3) if servo_actuel_horizontal < servo_max_droit: servo_actuel_horizontal = servo_max_droit pwm.set_pwm(0, 0, servo_actuel_horizontal) # pour horizontal print("Nouvelle position du servo horizontal: " + str(servo_actuel_horizontal)) # deplacements verticaux de la tete: print("Pr ctrl servo_actuel_vertical: " + str(servo_actuel_vertical)) if y > 190: servo_actuel_vertical = (servo_actuel_vertical + 2) if servo_actuel_vertical > servo_max_bas: servo_actuel_vertical = servo_max_bas if y < 80: servo_actuel_vertical = (servo_actuel_vertical - 2) if servo_actuel_vertical < servo_max_haut: servo_actuel_vertical = servo_max_haut pwm.set_pwm(1, 0, servo_actuel_vertical) # pour vertical print("Nouvelle position du servo vertical: " + str(servo_actuel_vertical)) cv2.imshow('image',image) k = cv2.waitKey(30) & 0xff if k == 27: # si ESC on sort de la boucle break capture.release() cv2.destroyAllWindows()
Voilà, j'ai essayé de commenter un maximum le code, maintenant je le redis je débute donc il n'est pas très joli mon code, faut pas hésiter à le critiquer :-)
Pour les moteurs, pour l'instant j'ai fait un pont en H avec des piles AA, mais ça ne marche pas trop, ça me fait des big a'coup, faut que j'y travaille encore.. Je mets quand même le schéma:
Sources:
http://docs.opencv.org/3.1.0/df/d9d/tutorial_py_colorspaces.html
#84278 Mon projet: CubDog
Posté par la.couenne sur 02 juin 2017 - 08:42 dans Robots roulants, chars à chenilles et autres machines sur roues
Re tous,
Oui Path c'est du Makeblock, en fait c'est un "chassi" que j'avais fait il y a longtemps, avec un capteur ultrason. J'avais suivi un tuto, que je viens de rechercher durant presque 20min pour toi! :-D ici: http://openlab.makeblock.com/topic/56e231e9b56dce362b00749c
Le problème avec Makeblock c'est le prix!! mais je pense que c'est un investissement qui vaut la peine, car c'est une super qualité et on peut toujours le réutiliser / adapter pour faire tellement de choses
Tu m'intéresses là Oliver17 car j'avais pensé tenter de fabriquer un câble HDMI moi-même, mais ça me semble chô! Car y a combien de fils? 20 non? t'en a déjà fait un toi? Comment tu t'y es pris?
J'avais aussi pensé à un tout petit écran, mais j'aime bien l'idée qu'il remplisse tout le dos du robot, il va servir au retour d'images de la cam, afin de voir s'il détecte correctement les visages ou objets (disons pour l'instant couleurs des objets lol)
Sinon Yougo, je peux partager mes scripts OpenCV sans problème, mais je pense qu'il faudra quelqu'un qui connaisse mieux que moi son fonctionnement car je tatonne grave donc il doit y avoir plein d'erreurs
je vais les mettre dans plusieurs autres post ci-dessous, ce sera + simple
#83984 nombreux problèmes dans la réalisation d'un gros robot
Posté par la.couenne sur 25 mai 2017 - 08:54 dans Robots roulants, chars à chenilles et autres machines sur roues
Comment est-ce que je devrais utiliser des circuits imprimés pour alimenter une dizaine de servo ? la couche de cuivre ne peut pas être assez épaisse pour supporter plusieurs ampères, si?
Hello,
Pourquoi t'embêter avec des circuits imprimés pour commander les servo?
tu peux utiliser des module tout fait, exemple celui d'adafuit: https://www.adafruit.com/product/815
De cette façon tu peux commander 15 servo facilement (sauf ceux à rotation continue que je n'ai jamais été capable de faire tourner )
#80057 Bonjour à tous !
Posté par la.couenne sur 07 mars 2017 - 09:24 dans Et si vous vous présentiez?
Merci pour votre accueil
#80083 Bonjour à tous !
Posté par la.couenne sur 08 mars 2017 - 02:55 dans Et si vous vous présentiez?
Bienvenu
J'aime beaucoup tes réalisations N'hésite pas à en parler d'avantage je suis sûr que pas mal de personnes du coin seraient intéressé ! =)
Merci,
J'avais fait un tuto pour la borne d'arcade: http://ouiaremakers.com/posts/tutoriel-diy-borne-d-arcade
Sinon pour mon petit game boy je suis sur le développement d'un p'tit jeu de combat à l'épée en pygame, mais ça fait qques semaines qu'il est à l'arrêt car je suis avec mon robot, on a jamais assez de temps hein!
Mais c'est volontiers que je peux poster mon jeu, mais ça n'est pas vraiment en lien avec le sujet du site
#80334 Bonjour à tous !
Posté par la.couenne sur 14 mars 2017 - 11:36 dans Et si vous vous présentiez?
Mais si il y a pas que les humains qui ont le droit de jouer aux jeux vidéo !
héhé ok tu l'as voulu, je poste mon début de jeu
Mais je préviens, ma façon de coder n'est pas terrible mdr, c'est d'ailleurs ce qui a freiné le développement du jeu, en effet ça fait longtemps que je veux apprendre à utiliser les Objets en python, jusqu'à maintenant j'en avais pas trop l'intérêt mais maintenant que mon jeu commence à se complexifier ça devient très dur à modifier des parties de mon code..
Donc le but de mon jeu en qques mots: il se jouera à 2 sur mon arcade, en coopération. Le but sera de défendre un trésor, les méchants chercheront à prendre le coffre pour l'emporter hors de l'écran. Bref rien d'extraordinaire non plus
Pour l'instant les méchants suivent un chemin prédéfini, si la distance avec le joueur est assez faible ils le voient et se dirige vers lui.
Le combat n'est pas trop géré pour l'instant (pour tuer un ennemi faut lui mettre un coup d'épéé, mais lui fait baisser votre vie dès qu'il se superpose au joueur..)
Les combats resteront assez basique: avec la possibilité de se défendre (touche D pour lever l'épée devant le personnage) ou assigner un coup (touche espace).
L'image de fond est pour l'instant une img du jeu Zelda, mais sera appelée à être modifier dans un avenir, j'espère pas trop lointain (sinon c'est que j'aurai laissé tomber le développement du jeu lol)
Voici le lien: http://www.adatte.ch/img/jeu.zip
N'hésitez pas à critiquer
A++ et bonne journée à tous!
#80044 Bonjour à tous !
Posté par la.couenne sur 07 mars 2017 - 03:24 dans Et si vous vous présentiez?
Bonjour à tous!
Alors moi j'ai découvert ce forum en cherchant sur le net une réponse à l'une de mes (nombreuses) questions. Et avant de la poser, je vais déjà me présenter un peu
J'ai 38 ans, j'aime surtout faire mes projets à base de cartes Raspberry Pi, que je trouve simplement fascinantes.. Actuellement je suis sur un projet de Robot fait avec des pièces Makeblock :
Sinon mes derniers projets en date, tournent autour des jeux développés avec Pygame:
Voilà, à tout bientôt sur le forum
Bonne journée à tous!
Pascal
- Robot Maker
- → Contenu de la.couenne
- Privacy Policy