Rocky Rover:Robotic Vision System PixyCam &Arduino 101
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Apps und Onlinedienste
| ||||
|
Über dieses Projekt
Intel Arduino 101-basierter Rover mit PixyCam!
Hackster Live-Events sind großartig! Intel hat unser Hackster Dallas Event gesponsert und uns einige Intel Arduino 101 geschickt, um Rover zu bauen. Danke Intel, danke Arduino. Hier ist der Rover, den ich für das Event gebaut habe.
Ich habe dieses Gerät nach diesem Tutorial von Johnathan Hottell gebaut. Er hat einige Videos erstellt, um den BLE Rover zu bauen. Und es ist einfach zu folgen! Schau es dir hier an. Hier ist das Video von Johnathan Hottell.
Ich habe den Rover mit 4 Motoren, also habe ich mich daran gehalten.
Nach dem Bau des Rovers und der Verbindung mit Blynk. Ich beschloss, den Build zu verbessern und eine PixyCam hinzuzufügen. Ich habe den Batteriehalter nach vorne verschoben, damit ich eine Schwenk-/Neigekamera montieren kann.
PixyCam
PixyCam macht Robotersehen leicht gemacht. Pixy ist ein schneller Vision-Sensor für DIY-Robotik, es ist einfach, Pixy ein Objekt einfach per Knopfdruck beizubringen. Es kann Hunderte von Objekten gleichzeitig verfolgen und liefert nur die Daten, die es verfolgt.
Ich beschloss, einen orangefarbenen Kürbis zu verfolgen.
Ich bin überrascht, wie einfach es ist, es in Gang zu bringen. Hier ist der Link für die Anweisungen zum Verbinden von PixyCam mit Arduino. Klicken Sie hier für die Montageanleitung für den Schwenk-/Neigemechanismus. Ich bin froh, dass es viele Bilder hat, sehr einfach zu folgen. Ich habe die Setup- und Build-Anweisungen befolgt, wie man mit Arduino integriert. Ich habe ihre Beispiele getestet.
Folgendes habe ich über die API herausgefunden.
PixyCam Arduino-API
Die Verwendung von Pixy mit Arduino ist wirklich einfach. Sie fügen einfach die SPI- und Pixy-Header ein:
#include #include
Und machen Sie eine globale Instanz von Pixy, indem Sie diesen kleinen Kerl außerhalb Ihres setup()
platzieren und loop()
Funktionen:
Pixie-Pixie;
Die wichtigste Methode in der Arduino-Bibliothek ist getBlocks()
, die die Anzahl der von Pixy erkannten Objekte zurückgibt. Sie können dann in den pixy.blocks[]
. nachsehen Array für Informationen über jedes erkannte Objekt (ein Array-Mitglied für jedes erkannte Objekt.) Jedes Array-Mitglied (i
) enthält die folgenden Felder:
pixy.blocks[i].signature
Die Signaturnummer des erkannten Objekts (1-7 für normale Signaturen)
pixy.blocks[i].x
Die x-Position des Zentrums des erkannten Objekts (0 bis 319)
pixy.blocks[i].y
Die y-Position des Zentrums des erkannten Objekts (0 bis 199)
pixy.blocks[i].width
Die Breite des erkannten Objekts (1 bis 320)
pixy.blocks[i].height
Die Höhe des erkannten Objekts (1 bis 200)
pixy.blocks[i].angle
Der Winkel des erkannten Objekts, wenn das erkannte Objekt ein Farbcode ist.
pixy.blocks[i].print()
Eine Memberfunktion, die die erkannten Objektinformationen an den seriellen Port ausgibt
Es ist also ganz einfach, mit Ihrem Arduino mit Pixy zu sprechen! Weitere Informationen zur Arduino-Bibliothek und API finden Sie hier. Hier ist der Code, der für den Rover verwendet wird. Ich habe den ursprünglichen BLE-Code modifiziert und die Objektverfolgung hinzugefügt. Während der Einrichtung:
void setup() { ..... pixy.init(); ....}
Die Hauptschleife sieht in etwa so aus:
void loop() { ...... // Pixy-Daten lesen und Blöcke abrufen static int i =0; int j; uint16_t Blöcke; char-buf[32]; int32_t panError, TiltError; Blöcke =pixy.getBlocks(); //wenn es Blöcke gibt 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++; // Frame würde das Arduino blockieren if (i%10==0) { Int trackedBlock =0; sprintf(buf, "Erkannt %d:\n", Blöcke); Serial.print (buf); lange maxSize =0; for (j=0; j maxSize) {trackedBlock =j; maxSize =newSize; } } int32_t followError =RCS_CENTER_POS - panLoop.m_pos; // Größe ist die Fläche des Objekts. // Wir behalten einen laufenden Durchschnitt der letzten 8. size +=pixy.blocks[trackedBlock].width * pixy.blocks[trackedBlock].height; Größe -=Größe>> 3; int forwardSpeed =Constraint(400 - (Größe/256), -100, 400); int32_t differentiell =(followError + (followError * forwardSpeed))>>8; int leftSpeed =Constraint(forwardSpeed + differentiell, -400, 400); int rightSpeed =Constraint(forwardSpeed - differentiell, -400, 400); motor1->setSpeed (leftSpeed); // linker Motor3-> setSpeed (leftSpeed); motor2-> setSpeed (rightSpeed); // linker Motor4-> setSpeed (rightSpeed); doppelte Breite =pixy.blocks[trackedBlock].width; if (Breite <=5) {} else if (Breite <20 &&!running) {Serial.println("running"); motor1->laufen (vorwärts); motor3->laufen (vorwärts); motor2->laufen (vorwärts); motor4> laufen (vorwärts); läuft =wahr; aufrechtzuerhalten. Sonst if (Breite> 80 &&!running) {Serial.println("running"); motor1->laufen (RÜCKWÄRTS); motor3->laufen (RÜCKWÄRTS); motor2-> laufen (RÜCKWÄRTS); motor4> laufen (RÜCKWÄRTS); läuft =wahr; aufrechtzuerhalten. Sonst if (Breite>=20 &&Breite <=80 &&läuft) { Motor1->setSpeed (128); motor2->setSpeed (128); motor3->setSpeed (128); motor4->setSpeed (128); motor2->laufen (FREIGABE); motor4> laufen (FREIGABE); motor1->laufen (FREIGABE); motor3->laufen (FREIGABE); läuft =falsch; } } } }
Um den Blynk ohne Steuerung durch die PixyCam zu betreiben, setzen Sie den Objektivdeckel auf. Es stellt sicher, dass PixyCam die Steuerung des Bots nicht stört. Wenn dieses Projekt Ihr Interesse geweckt hat, in Arduino zu programmieren oder PixyCam in Ihrem nächsten Projekt zu verwenden, klicken Sie bitte auf die Schaltfläche "Projekt respektieren" und folgen Sie mir.
Fühlen Sie sich frei, Fragen zu stellen.
Code
Rocky Rover
Herstellungsprozess
- Arduino-Pov-Vision-Uhr
- Arduino-Alarmsystem:SERENA
- Arduino 3D-gedruckter Roboterarm
- Arduino-Power
- Nunchuk-gesteuerter Roboterarm (mit Arduino)
- Intel Arduino 101 BLE Blynk Tank
- Arduino101 / tinyTILE BLE:Match-Making-Sonnenbrille
- Beharrlichkeit der Vision
- Arduino Apple Watch
- Überlegungen zum Beleuchtungsdesign für robotergestützte Chirurgie-Sichtsysteme