Umfrage

Wollt ihr eine LAN im Herbst veranstalten bzw. besuchen????

Ja unbedingt selber eine machen!!! - 71.4%
Auf die VulkanLAN 39 fahren! - 14.3%
Auf die Nur48Stunden LAN fahren! - 14.3%
Ne hab überhaupt keinen Bock!! - 0%

Total votes: 7
The voting for this poll has ended on: 30 Sep 2014 - 10:03

Teamspeak 3 Viewer

Login

Wer ist online

Aktuell sind 38 Gäste und keine Mitglieder online

Connect with Us

youtube channel 
facebook logo
Contact-Us-300x147

Partner

Fahrzeug - Steuerung: USB IR Transmitter

Um den Fahrzeug(en) Befehle zu schicken kann eine Übertragung via Infrarot (wie bei handelsüblichen Fernbedienungen) verwendet werden. Sender und Empfänger sind relativ einfach zu bauen und die erforderlichen Komponenten einfach und billig zu beschaffen. Außerdem hat Lukas bereits ein Auto mit Empfänger und einen Sender gebaut und verwendet.

Da ich gerade die Schnauze voll von C++ hatte, habe ich als Alternative zu seinem Serial -> Lan -> Serial -> IR Transmitter einen Prototyp für eine kompaktere und einfachere USB (CDC) -> IR Variante entworfen:



Offensichtlich noch ein Prototyp, aber Soft und Hardware sind funktionstüchtig. Die PIC Software basiert auf einem Open Source USB Stack Demo Projekt, dass unter
HOW-TO: Open Source USB stack for PIC microcontrollers
verfügbar ist.

Der Controller erscheint am PC als USB->Serial Converter. Befehle aus de PC - Software können in Linux (benötigt root Rechte) ganz einfach per

#include <fstream>
...
ofstream irtx("/dev/ttyACM0"); // ACMx Port des Transmitters
char Befehl = 1;
irtx << Befehl;
irtx.close();


gesendet werden. Windows benötig wie im Demo Projekt beschrieben ein .inf File. Anstatt von "/dev/ttyACMx" muss im Code der der richtige COM Port "COMx" verwendet werden.

Nach ersten erfolgreichen Test mit dem Lochraster - Prototypen habe ich begonnen eine Platine mit einigen zusätzlichen Ausgängen für andere Anwendungen zu entwerfen, die in Kürze bereit zur Fertigung ist.

AI Micro Car - Objekterkennung und Tracking

Für die Objekterkennungs - Software müssen wir das Rad nicht neu erfinden, denn es gibt dazu einiges frei verfügbar im Netz zu finden, was nicht heist, dass alles schon fix und fertig für unser Projekt bereitsteht. Selbst wenn es so wäre: Man hat mehr Freude mit selbst gebasteltem und lernt auch etwas dabei 
Eine gute und sehr umfangreiche Werkzeugkiste für unser Projekt ist die OpenCV (Open Computer Vision) Bibliothek.

Die Killer features sind:

  1. Enthält jede Menge Algorithmen für allerlei Aufgaben in der Bild/Video - Verarbeitung
  2. Verfügbar für alle nennenswerten Plattformen: Windows & alle richtigen Betriebssysteme die auf x enden, Android und das Zeug das mit i anfängt
  3. Schnelle, hochwertige Implementierung (wird sehr verbreitet auch im professionellen Bereich verwendet) und verwendbar mit allerlei Sprachen (C/C++, Java, Python)
  4. Jede Menge Tutorials im Web zu finden
  5. last, but not least: Open Source und kostenlos auf http://opencv.org verfügbar

Mit OpenCV lassen sich viele Aufgaben schnell erledigen, um schneller ans Eingemachte zu kommen und die Software für unsere Anwendung feintunen zu können. Der folgende Code ist beispielsweise alles was zu machen ist, um mit OpenCV auf eine beliebige WebCam zuzugreifen und den Videostream auf den Bildschirm zu bringen:
 
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
	// open any available webcam
	VideoCapture cam(-1);
	if(!cam.isOpened())
		return -1; // no webcam available
	char key = 0;
	do{
		// request new frame
		Mat frame;
		bool bNewFrame = cam.read(frame);
		if (bNewFrame) {
			// display frame if valid
			imshow("WebCamStream (press q to quit)",frame);
		}
		// wait for key input for 30ms
		key = waitKey(30);
	}while(key != 'q');
	return 0;
}
 
Grundlegende Schritte zur Umsetzung von Objekterkennung und Tracking mit OpenCV:
  1. Bild Von Webcam holen (das ist hinzubekommen, siehe letzten Post)
  2. Hintergrund herausfiltern: Binares Schwellwertbild generieren(Schwellwerte anpassen bis Objekt(e) weis und Hintergrund schwarz)
  3. Konturen erkennen
  4. Gefundenen Konturen nach Größe, Form filtern
  5. Position und Orientierung der passenden Konturen ermitteln
  6. Unterscheidung und Zuordnung von gefundenen Objekten (welches Auto ist wo?)

AI Micro Car - Mechanischer Aufbau

Der grundlegende mechanische Aufbau sieht vor, dass die Kamera und der Sender über der Strecke zentral über der Strecke auf einer fixen Höhe moniert sind. Die Kamera soll den gesamten Bereich der Strecke überblicken können, um den Streckenverlauf analysieren und die Position der Fahrzeuge verfolgen zu können.
Der Überbau soll neben der Webcam und dem Sender auch optional eine Streckenbeleuchtung tragen können, da Kamera und Objekterkennungssoftware eine ausreichende Beleuchtung benötigen. Im Optimalfall sind damit Intensität und Lichtfarbe der Beleuchtung genau festgelegt, was die Objekterkennung erleichtert und ihre Zuverlässigkeit verbessert.
Die Höhe des Aufbaus relativ zur Größe des erfassbaren Bereich wird durch den Öffnungswinkel bzw.

das Sichtfeld der Kamera bestimmt. Leider ist diese Information für gängige Consumer Webcams vermutlich kaum zu finden, aber man kann es mit einfachsten Mitteln selbst grob vermessen.

Ich es für eine Logitech C270 HD (720p) Webcam grob die vertikalen und horizontalen Öffnungswinkel ermittelt:

HV_Sichtkegel.jpg




Daraus kann man die Geometrie für den Aufbau ableiten, da die Längenverhältnisse auch für größere Distanzen gelten: um einen Streckenbereich von 1,5m * 0,75m zu überblicken muss die Kamera auf über 1,6m Höhe angebracht sein. Eine 2x2cm große Markierung ist im Bild nur etwa 15x15 Pixel groß, ob so eine robuste Objekterkennung und Verfolgung (Tracking) möglich ist, ist eher fraglich.
Um den Aufbau etwas handlicher zu machen und die Objekterkennung zu erleichtern sollte entweder ein kleinerer Streckenbereich gewählt werden oder eine hochauflösendere Kamera (z.B.: 1080p) mit weiterem Öffnungswinkel.

AI Micro Car - Die Idee

Die Grundidee vom AMC (AI Micro Car) ist es ein Modellauto im Maßstab 1:87 mittels einer Webcam und eines PCs zu erfassen und es dann anschließend zu steuern. Der schwierige Part des Projektes ist die Erfassung des Modellautos sowie die Positionsbestimmung und Berechnung für die weiteren Schritte. Somit liegt der Hauptfokus in der Programmierung der PC Software und Datenanalyse, natürlich wird auch ein bisschen auf die Hardware eingegangen. Mit dem Projekt soll "Know How" im Bereich Objekterkennung aufgebaut werden, welches in weiteren Projekten dann eingesetzt werden kann. In den nächsten Blogeinträgen werden die einzelnen Komponenten des Projektes näher erklärt. Die derzeitige Zielsetzung ist das Steuern des Modellautos in einem ovalen Streckenkurs. 

 

Projektteam:

Projektleitung: Lukas, bittenbybytes

Software: bittenbybytes
Hardware: bittenbybytes, Lukas
Mechanik: Lukas

 

© Collision Course Alle Rechte vorbehalten.  Impressum
 Email: Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!