Rocky Rover:Sistema de Visão Robótica PixyCam e Arduino 101
Componentes e suprimentos
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
![]() |
| |||
![]() |
|
Sobre este projeto
Rover baseado em Intel Arduino 101 com PixyCam!
Os eventos do Hackster Live são fantásticos! A Intel patrocinou nosso evento Hackster Dallas e nos enviou um Intel Arduino 101 para construir Rovers. Obrigado Intel, obrigado Arduino. Aqui está o Rover que construí para o evento.
Construí este dispositivo seguindo este tutorial de Johnathan Hottell. Ele criou alguns vídeos para construir o BLE Rover. E é fácil seguir! Confira aqui. Aqui está o vídeo de Johnathan Hottell.
Eu tenho o Rover com 4 motores, então segui isso.
Depois de construir o Rover e conectá-lo a Blynk. Decidi melhorar a construção e adicionar uma PixyCam. Mudei o suporte da bateria para a frente para poder montar uma câmera panorâmica / inclinada.
PixyCam
PixyCam torna a visão robótica mais fácil. Pixy é um sensor de visão rápida para robótica DIY, é fácil ensinar a Pixy um objeto apenas pressionando um botão. É capaz de rastrear centenas de objetos simultaneamente e fornece apenas os dados que está rastreando.

Decidi rastrear uma Orange Pumpkin.

Estou surpreso como é fácil fazer isso funcionar. Aqui está o link para as instruções para conectar PixyCam ao Arduino. Clique aqui para obter as instruções de montagem do mecanismo de Pan / Tilt. Fico feliz que tenha muitas fotos, muito fáceis de acompanhar. Segui as instruções de configuração e construção, como integrar com o Arduino. Testei seus exemplos.

Aqui está o que descobri sobre a API.
API PixyCam Arduino
Usar Pixy com Arduino é muito simples. Você simplesmente inclui os cabeçalhos SPI e Pixy:
#include #include
E faça uma instância global do Pixy colocando esse pequeno sujeito fora de sua
configuração ()
e loop ()
funções: Pixy pixy;
O método mais importante na biblioteca Arduino é
getBlocks ()
, que retorna o número de objetos que Pixy detectou. Você pode então olhar em pixy.blocks []
array para obter informações sobre cada objeto detectado (um membro do array para cada objeto detectado). Cada membro do array ( i
) contém os seguintes campos:-
pixy.blocks [i] .signature
O número da assinatura do objeto detectado (1-7 para assinaturas normais)
-
pixy.blocks [i] .x
A localização x do centro do objeto detectado (0 a 319)
-
pixy.blocks [i] .y
A localização y do centro do objeto detectado (0 a 199)
-
pixy.blocks [i] .width
A largura do objeto detectado (1 a 320)
-
pixy.blocks [i] .height
A altura do objeto detectado (1 a 200)
-
pixy.blocks [i] .angle
O ângulo do objeto detectado, se o objeto detectado for um código de cor.
-
pixy.blocks [i] .print ()
Uma função membro que imprime as informações do objeto detectado na porta serial
Portanto, é simples falar com Pixy com seu Arduino! Para obter mais informações sobre a biblioteca e API do Arduino, clique aqui. Aqui está o código usado para o Rover. Modifiquei o código BLE original e adicionei o rastreamento de objetos. Durante a configuração:
void setup () {..... pixy.init (); ....}
O loop principal é semelhante a este:
void loop () {...... // lê dados pixy e obtém blocos static int i =0; int j; blocos uint16_t; char buf [32]; int32_t panError, tiltError; blocos =pixy.getBlocks (); // se houver blocos 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 ++; // o quadro atrapalharia o Arduino if (i% 10 ==0) {int trackedBlock =0; sprintf (buf, "% d detectado:\ n", blocos); Serial.print (buf); long maxSize =0; para (j =0; j maxSize) {trackedBlock =j; maxSize =newSize; }} int32_t followError =RCS_CENTER_POS - panLoop.m_pos; // Tamanho é a área do objeto. // Mantemos uma média dos últimos 8. size + =pixy.blocks [trackedBlock] .width * pixy.blocks [trackedBlock] .height; tamanho - =tamanho>> 3; int forwardSpeed =constrain (400 - (tamanho / 256), -100, 400); int32_t diferencial =(followError + (followError * forwardSpeed))>> 8; int leftSpeed =constrain (forwardSpeed + diferencial, -400, 400); int rightSpeed =restrição (forwardSpeed - diferencial, -400, 400); motor1-> setSpeed (leftSpeed); // motor esquerdo3-> setSpeed (leftSpeed); motor2-> setSpeed (rightSpeed); // motor esquerdo4-> setSpeed (rightSpeed); largura dupla =pixy.blocks [trackedBlock] .width; if (largura <=5) {} else if (largura <20 &&! executando) {Serial.println ("executando"); motor1-> funcionar (AVANÇAR); motor3-> funcionar (AVANÇAR); motor2-> funcionar (AVANÇAR); motor4-> funcionar (AVANÇAR); executando =verdadeiro; } else if (largura> 80 &&! running) {Serial.println ("running"); motor1-> funcionar (PARA TRÁS); motor3-> funcionar (PARA TRÁS); motor2-> funcionar (PARA TRÁS); motor4-> funcionar (PARA TRÁS); executando =verdadeiro; } else if (width> =20 &&width <=80 &&running) {motor1-> setSpeed (128); motor2-> definirSpeed (128); motor3-> definirSpeed (128); motor4-> definirSpeed (128); motor2-> funcionar (RELEASE); motor4-> funcionar (RELEASE); motor1-> funcionar (RELEASE); motor3-> funcionar (RELEASE); executando =falso; }}}}
Para executar o Blynk sem o controle da PixyCam, coloque a tampa da lente. Isso fará com que PixyCam não interfira no controle do bot. Se este projeto despertou seu interesse em programar em Arduino ou em usar PixyCam em seu próximo projeto, clique no botão "Respeitar Projeto" e siga-me.
Sinta-se livre para perguntar.
Código
Rocky Rover
Processo de manufatura
- Relógio de visão pov do Arduino
- Sistema de alarme Arduino:SERENA
- Arduino 3D-Printed Robotic Arm
- Arduino Power
- Braço robótico controlado por Nunchuk (com Arduino)
- Intel Arduino 101 BLE Blynk Tank
- Arduino101 / tinyTILE BLE:Óculos de sol que combinam
- Persistência da visão
- Arduino Apple Watch
- Considerações de design de iluminação para sistemas de visão de cirurgia robótica