#1
Posté 02 juin 2017 - 02:32
#3
Posté 02 juin 2017 - 03:41
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
#4
Posté 02 juin 2017 - 03:48
ça dépend de ce que tu veux faire, si tu veux un câble juste pour la raspberry pas besoin de se ruiner et celui en lien devrai suffir, mais si tu veux qu'il puisse aussi servir pour un home ciné essai d'en prendre un à la norme 1.4 minimum et j'éviterai les câbles rétractables.
#6
Posté 02 juin 2017 - 04:08
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
#8
Posté 02 juin 2017 - 06:38
C'est vraiment très cool ! as tu des tutos particuliers à conseiller pour OpenCV qui correspondent a des applications comme celle ci ?
#10
Posté 02 juin 2017 - 08:42
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
#11
Posté 02 juin 2017 - 09:16
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
- Melmet aime ceci
#13
Posté 03 juin 2017 - 08:15
Merci beaucoup c'est bien commenté
#15
Posté 03 juin 2017 - 03:10
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++
#17
Posté 11 juin 2017 - 09:51
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
- yougo aime ceci
Répondre à ce sujet
Aussi étiqueté avec au moins un de ces mots-clés : opencv, chenilles, couleur, webcam
Projets et réalisations, robots et machines en tout genre →
Vigibot →
Thermal camera on internet controlled robotDébuté par firened, 25 oct. 2024 thermal, webcam, ffmpeg |
|
|||
Découvertes →
Contenu vidéo →
Suivi d'objetDébuté par Laurent42, 14 août 2019 opencv, tutoriel |
|
|||
Découvertes →
Présentations de produits robotique →
Robots en kits →
Char ChenillesDébuté par Oliver17, 09 juin 2018 Chenilles |
|
|||
Projets et réalisations, robots et machines en tout genre →
Robots roulants, chars à chenilles et autres machines sur roues →
Mon robot d'exploration - Explora 85 - à l'abandonDébuté par levend, 08 avril 2012 Robot dexploration et 2 de plus... |
|
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users