Rocky Rover:Sistema de visión robótica PixyCam y Arduino 101
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
| ||||
|
Acerca de este proyecto
Rover basado en Intel Arduino 101 con PixyCam!
¡Los eventos de Hackster Live son increíbles! Intel patrocinó nuestro evento Hackster Dallas y nos envió algunos Intel Arduino 101 para construir Rovers. Gracias Intel, gracias Arduino. Aquí está el Rover que construí para el evento.
Construí este dispositivo siguiendo este tutorial de Johnathan Hottell. Creó algunos videos para construir el BLE Rover. ¡Y es fácil de seguir! Compruébalo aquí. Aquí está el video de Johnathan Hottell.
Tengo el Rover con 4 motores, así que seguí esto.
Después de construir el Rover y conectarlo con Blynk. Decidí mejorar la construcción y agregar una PixyCam. Moví el soporte de la batería al frente para poder montar una cámara panorámica / inclinable.
PixyCam
PixyCam facilita la visión robótica. Pixy es un sensor de visión rápido para la robótica de bricolaje, es fácil enseñarle a Pixy un objeto con solo presionar un botón. Es capaz de rastrear cientos de objetos simultáneamente y solo proporciona los datos que rastrea.
Decidí rastrear una calabaza naranja.
Me sorprende lo fácil que es ponerlo en marcha. Aquí está el enlace para las instrucciones para conectar PixyCam a Arduino. Haga clic aquí para obtener las instrucciones de montaje del mecanismo Pan / Tilt. Me alegro de que tenga muchas imágenes, muy fáciles de seguir. Seguí las instrucciones de configuración y compilación, cómo integrarme con Arduino. Probé sus ejemplos.
Esto es lo que descubrí sobre la API.
API PixyCam Arduino
Usar Pixy con Arduino es realmente simple. Simplemente incluye los encabezados SPI y Pixy:
#include #include
Y crea una instancia global de Pixy poniendo a este pequeño fuera de tu setup ()
y loop ()
funciones:
Pixy pixy;
El método más importante de la biblioteca Arduino es getBlocks ()
, que devuelve el número de objetos que Pixy ha detectado. Luego puede buscar en el pixy.blocks []
matriz para obtener información sobre cada objeto detectado (un miembro de la matriz para cada objeto detectado). Cada miembro de la matriz ( i
) contiene los siguientes campos:
-
pixy.blocks [i] .signature
El número de firma del objeto detectado (1-7 para firmas normales)
-
pixy.blocks [i] .x
La ubicación x del centro del objeto detectado (0 a 319)
-
pixy.blocks [i] .y
La ubicación y del centro del objeto detectado (0 a 199)
-
pixy.blocks [i] .width
El ancho del objeto detectado (1 a 320)
-
pixy.blocks [i] .height
La altura del objeto detectado (1 a 200)
-
pixy.blocks [i] .angle
El ángulo del objeto detectado objeto si el objeto detectado es un código de color.
-
pixy.blocks [i] .print ()
Una función miembro que imprime la información del objeto detectado en el puerto serie
¡Así que es sencillo hablar con Pixy con tu Arduino! Para obtener más información sobre la biblioteca y la API de Arduino, vaya aquí. Aquí está el código utilizado para el Rover. Modifiqué el código BLE original y agregué seguimiento de objetos. Durante la instalación:
void setup () {..... pixy.init (); ....}
El bucle principal se parece a esto:
void loop () {...... // lee datos pixy y obtiene bloques static int i =0; int j; bloques uint16_t; char buf [32]; int32_t panError, tiltError; bloques =pixy.getBlocks (); // si hay bloques if (blocks) {panError =X_CENTER-pixy.blocks [0] .x; tiltError =pixy.blocks [0] .y-Y_CENTER; panLoop.updatePan (panError); tiltLoop.update (tiltError); pixy.setServos (panLoop.m_pos, tiltLoop.m_pos); i ++; // el marco atascaría el Arduino si (i% 10 ==0) {int trackedBlock =0; sprintf (buf, "Detectado% d:\ n", bloques); Serial.print (buf); long maxSize =0; for (j =0; j maxSize) {trackedBlock =j; maxSize =newSize; }} int32_t followError =RCS_CENTER_POS - panLoop.m_pos; // El tamaño es el área del objeto. // Mantenemos un promedio móvil de los últimos 8. size + =pixy.blocks [trackedBlock] .width * pixy.blocks [trackedBlock] .height; tamaño - =tamaño>> 3; int forwardSpeed =restringir (400 - (tamaño / 256), -100, 400); int32_t diferencial =(followError + (followError * forwardSpeed))>> 8; int leftSpeed =restringir (forwardSpeed + diferencial, -400, 400); int rightSpeed =restringir (forwardSpeed - diferencial, -400, 400); motor1-> setSpeed (leftSpeed); // motor3 izquierdo-> setSpeed (leftSpeed); motor2-> setSpeed (rightSpeed); // motor izquierdo4-> setSpeed (rightSpeed); doble ancho =pixy.blocks [trackedBlock] .width; if (width <=5) {} else if (width <20 &&! running) {Serial.println ("running"); motor1-> ejecutar (ADELANTE); motor3-> ejecutar (ADELANTE); motor2-> ejecutar (ADELANTE); motor4-> ejecutar (ADELANTE); corriendo =verdadero; } else if (ancho> 80 &&! en ejecución) {Serial.println ("en ejecución"); motor1-> ejecutar (HACIA ATRÁS); motor3-> ejecutar (HACIA ATRÁS); motor2-> ejecutar (HACIA ATRÁS); motor4-> ejecutar (HACIA ATRÁS); corriendo =verdadero; } else if (ancho> =20 &&ancho <=80 &&funcionando) {motor1-> setSpeed (128); motor2-> setSpeed (128); motor3-> setSpeed (128); motor4-> setSpeed (128); motor2-> ejecutar (LIBERAR); motor4-> ejecutar (LIBERAR); motor1-> ejecutar (LIBERAR); motor3-> ejecutar (LIBERAR); corriendo =falso; }}}}
Para ejecutar Blynk sin que PixyCam lo controle, coloque la tapa del objetivo. Se asegurará de que PixyCam no interfiera en el control del bot. Si este proyecto hizo que te interesara programar en Arduino o usar PixyCam en tu próximo proyecto, haz clic en el botón "Respetar proyecto" y sígueme.
No dude en hacer preguntas.
Código
Rocky Rover
Proceso de manufactura
- Reloj de visión pov de Arduino
- Sistema de alarma Arduino:SERENA
- Brazo robótico Arduino impreso en 3D
- Arduino Power
- Brazo robótico controlado por Nunchuk (con Arduino)
- Intel Arduino 101 BLE Blynk Tank
- Arduino101 / tinyTILE BLE:Gafas de sol para combinar
- Persistencia de la visión
- Arduino Apple Watch
- Sistema de ventilación del sótano / espacio de acceso
- Consideraciones de diseño de iluminación para sistemas de visión de cirugía robótica