Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Rocky Rover: Sistema de Visión Robótica con PixyCam y Arduino 101

Componentes y materiales

Aplicaciones y servicios online

Sobre el proyecto

Rover basado en Intel Arduino 101 con PixyCam

Los eventos Hackster Live son geniales. Intel patrocinó nuestro evento en Dallas y nos envió placas Arduino 101 para construir rovers. Siguiendo el tutorial de Johnathan Hottell (vídeos incluidos), construí la base del rover con 4 motores y lo conecté a Blynk. Luego decidí mejorarlo añadiendo una PixyCam, moviendo el portapilas al frente para montar la cámara en un mecanismo pan/tilt.

PixyCam

PixyCam simplifica la visión robótica: es un sensor de visión rápido para robótica DIY, se enseña un objeto pulsando un botón, rastrea cientos de objetos y solo entrega datos de los que sigue.

Rocky Rover: Sistema de Visión Robótica con PixyCam y Arduino 101

Elegí rastrear una calabaza naranja.

Rocky Rover: Sistema de Visión Robótica con PixyCam y Arduino 101

La integración con Arduino es sencilla. Sigue las instrucciones de conexión y el montaje del pan/tilt.

API de PixyCam para Arduino

Incluye las cabeceras SPI y Pixy:

#include <SPI.h>
#include <Pixy.h>

Crea una instancia global:

Pixy pixy;

El método clave es getBlocks(), que devuelve el número de objetos detectados. Cada objeto en pixy.blocks[] contiene:

Código principal del rover (modificado del original BLE con seguimiento de objetos):

void setup() {
  .....
  pixy.init();
  ....
}

void loop() {
  ......
  static int i = 0;
  int j;
  uint16_t blocks;
  char buf[32];
  int32_t panError, tiltError;
  blocks = pixy.getBlocks();
  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++;
    if (i % 10 == 0) {
      int trackedBlock = 0;
      sprintf(buf, "Detected %d:\n", blocks);
      Serial.print(buf);
      long maxSize = 0;
      for (j = 0; j < blocks; j++) {
        sprintf(buf, " block %d: ", j);
        Serial.print(buf);
        pixy.blocks[j].print();
        long newSize = pixy.blocks[j].height * pixy.blocks[j].width;
        if (newSize > maxSize) {
          trackedBlock = j;
          maxSize = newSize;
        }
      }
      int32_t followError = RCS_CENTER_POS - panLoop.m_pos;
      size += pixy.blocks[trackedBlock].width * pixy.blocks[trackedBlock].height;
      size -= size >> 3;
      int forwardSpeed = constrain(400 - (size / 256), -100, 400);
      int32_t differential = (followError + (followError * forwardSpeed)) >> 8;
      int leftSpeed = constrain(forwardSpeed + differential, -400, 400);
      int rightSpeed = constrain(forwardSpeed - differential, -400, 400);
      motor1->setSpeed(leftSpeed);
      motor3->setSpeed(leftSpeed);
      motor2->setSpeed(rightSpeed);
      motor4->setSpeed(rightSpeed);
      double width = pixy.blocks[trackedBlock].width;
      if (width <= 5) { }
      else if (width < 20 && !running) {
        Serial.println("running");
        motor1->run(FORWARD); motor3->run(FORWARD);
        motor2->run(FORWARD); motor4->run(FORWARD);
        running = true;
      }
      else if (width > 80 && !running) {
        Serial.println("running");
        motor1->run(BACKWARD); motor3->run(BACKWARD);
        motor2->run(BACKWARD); motor4->run(BACKWARD);
        running = true;
      }
      else if (width >= 20 && width <= 80 && running) {
        motor1->setSpeed(128); motor2->setSpeed(128);
        motor3->setSpeed(128); motor4->setSpeed(128);
        motor2->run(RELEASE); motor4->run(RELEASE);
        motor1->run(RELEASE); motor3->run(RELEASE);
        running = false;
      }
    }
  }
}

Para usar Blynk sin interferencia de PixyCam, tapa la lente. Si te interesa programar Arduino o usar PixyCam, dale a "Respect Project" y sígueme. Preguntas bienvenidas.

Código

Rocky Rover

Código completo disponible en el repositorio del proyecto.

Proceso de manufactura

  1. Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
  2. SERENA: Sistema de Alarma Personalizado Arduino Mega 2560 con Pantalla TFT LCD Táctil
  3. Construye un Brazo Robótico Impreso en 3D Controlado por Arduino – Guía Paso a Paso
  4. Soluciones de Alimentación Optimizadas para Proyectos Arduino
  5. Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
  6. Arduino 101 BLE + Blynk: Robot Tanque Controlado por Bluetooth DIY
  7. Crea gafas inteligentes de match-making con Arduino 101 y tinyTILE BLE
  8. Construir una pantalla de persistencia de visión portátil con Arduino UNO y ATtiny85
  9. Smartwatch Arduino DIY: Construye tu Propio Reloj Estilo Apple Watch
  10. Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino
  11. Optimizando diseño de iluminación para sistemas de visión en cirugía robótica