Manipulateur Robotique Braccio
Contrôler le Bras Braccio avec OpenCV et PySerial
Contrôle du Manipulateur Robotique Braccio
Aperçu
Introduction
Ce projet démontre comment contrôler un manipulateur robotique Braccio en utilisant le suivi des mains avec OpenCV et PySerial pour la communication avec un Arduino. Le système utilise la vision par ordinateur pour détecter les gestes des mains, qui sont traduits en commandes moteur pour le bras robotique.
La première main agit comme un sélecteur de moteur (moteurs 1-5), tandis que la deuxième main gère les moteurs 5-6 et contrôle la direction du mouvement pour le moteur sélectionné. Par exemple, j’utiliserais mon index de ma main droite pour choisir un moteur, et sur l’autre main, j’utiliserais l’index et le majeur pour soustraire 10 degrés (chaque seconde) du moteur sélectionné.
Composants Nécessaires
| Composant | Prix | Description | Lien |
|---|---|---|---|
| Bras Robotique Braccio | ~100 | Bras Robotique TinkerKit Braccio | Boutique Arduino |
| Carte Arduino | ~20 | Compatible avec le shield Braccio | Arduino Uno |
| Webcam | ~10 | Caméra USB pour le suivi des mains | |
| Bibliothèque PySerial | Gratuit | Communication série Python | pip install |
| OpenCV | Gratuit | Bibliothèque de vision par ordinateur | pip install |
| Bibliothèque Braccio | Gratuit | Bibliothèque de contrôle Braccio | cliquer |
Exemple de Configuration du Suivi des Mains
En utilisant les capacités de suivi des mains d’OpenCV, nous détectons les positions des mains et les gestes dans le flux vidéo en temps réel.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2
import mediapipe as mp
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = hands.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
...
Exemple de Communication Arduino
Le script Python envoie des données d’index de moteur et de direction via une communication série à l’Arduino contrôlant le bras Braccio.
1
2
3
4
5
6
7
8
import serial
ser = serial.Serial('COM3', 9600)
def send_command(motor_index, direction):
data = f"{motor_index},{direction}\n"
ser.write(data.encode())
...
Conclusion
Pas la manière la plus efficace et intuitive de contrôler le robot, mais c’était une expérience amusante.
