OSE Softwareumgebung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 5: Zeile 5:
= Quick Start=
= Quick Start=


* 1. Visual Studio installieren [https://www.microsoft.com/de-de/techwiese/aktionen/visual-studio-kostenlos.aspx Visual Studio Community 2019] <br>
# Visual Studio installieren [https://www.microsoft.com/de-de/techwiese/aktionen/visual-studio-kostenlos.aspx Visual Studio Community 2019] <br>
* 2. In Visual Studio mit Studentenemail-Adresse Account erstellen und kostenlos anmelden
# In Visual Studio mit Studentenemail-Adresse Account erstellen und kostenlos anmelden
* 3. C++ Erweiterung herunterladen und installieren
# C++ Erweiterung herunterladen und installieren
* 4. Open Cv in der Version 3.0.0 installieren und auf der Festplatte D entpacken. '''Wichtig: Oberordner muss opencv heißen (D:\opencv\...)'''
# Open Cv in der Version 3.0.0 installieren und auf der Festplatte D entpacken. '''Wichtig: Oberordner muss opencv heißen (D:\opencv\...)'''
* 5. Svn auschecken. Die aktuelle Software liegt unter dem Pfad:  https://svn.hshl.de/svn/MTR_SDE_Praktikum/branches/2021_09_29_OSE_RS232/ <br>
# Falls noch nicht installiert VR Magic Cam Lab installieren https://www.vrmagic-imaging.com/service/downloads/usb-platform-downloads
* 6. Videopfad in der Config.ini Datei auf den lokalen Speicherort ändern. Das Video für die Simulation befindet sich unter: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Simulation_Bildverarbeitung_und_Spurerkennung/Videos/Rundkurs.mp4 <br>
 
* 7. Kamera mit LAN und Netzteil verbinden. Bis die Kamera gestartet hat kann über eine Minute vergehen.
# Svn auschecken. Die aktuelle Software liegt unter dem Pfad:  https://svn.hshl.de/svn/MTR_SDE_Praktikum/branches/2021_09_29_OSE_RS232/ <br>
# Videopfad in der Config.ini Datei auf den lokalen Speicherort ändern. Das Video für die Simulation befindet sich unter: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Simulation_Bildverarbeitung_und_Spurerkennung/Videos/Rundkurs.mp4 <br>
# Kamera mit LAN und Netzteil verbinden. Bis die Kamera gestartet hat kann über eine Minute vergehen.


''' Wichtig: Wenn in den Projekteinstellungen nichts verändert wird und alle oben genannten Punkte korrekt durchlaufen wurde, werden alle notwendigen Bibliotheken gefunden''' <br/>
''' Wichtig: Wenn in den Projekteinstellungen nichts verändert wird und alle oben genannten Punkte korrekt durchlaufen wurde, werden alle notwendigen Bibliotheken gefunden''' <br/>

Version vom 11. November 2021, 13:25 Uhr

Autoren: Hendrik Steffen, Sven Posner
Betreuer: Prof. Schneider

Quick Start

  1. Visual Studio installieren Visual Studio Community 2019
  2. In Visual Studio mit Studentenemail-Adresse Account erstellen und kostenlos anmelden
  3. C++ Erweiterung herunterladen und installieren
  4. Open Cv in der Version 3.0.0 installieren und auf der Festplatte D entpacken. Wichtig: Oberordner muss opencv heißen (D:\opencv\...)
  5. Falls noch nicht installiert VR Magic Cam Lab installieren https://www.vrmagic-imaging.com/service/downloads/usb-platform-downloads
  1. Svn auschecken. Die aktuelle Software liegt unter dem Pfad: https://svn.hshl.de/svn/MTR_SDE_Praktikum/branches/2021_09_29_OSE_RS232/
  2. Videopfad in der Config.ini Datei auf den lokalen Speicherort ändern. Das Video für die Simulation befindet sich unter: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Simulation_Bildverarbeitung_und_Spurerkennung/Videos/Rundkurs.mp4
  3. Kamera mit LAN und Netzteil verbinden. Bis die Kamera gestartet hat kann über eine Minute vergehen.

Wichtig: Wenn in den Projekteinstellungen nichts verändert wird und alle oben genannten Punkte korrekt durchlaufen wurde, werden alle notwendigen Bibliotheken gefunden
Werden die Pfade geändert, und nur dann nach den folgenden Anleitungen vorgehen:
Einrichten von OpenCV in Visual Studio
Implementierung der Kamera in Visual Studio

Programmstruktur

Die Softwareumgebung ermöglicht es, in einer Umgebung die Simulation und das Livebild anzuzeigen und die Koeffizienten des Spurpolynoms auszugeben. Zusätzlich soll die Kalibrierung der Kamera auch möglich werden (im Aufbau). In der untenstehenden Abbildung ist die Struktur dieser Softwareumgebung dargestellt.

PAP der Programmstruktur

Zu Beginn kann zwischen der Simulation, dem Livebild oder dem Beenden des Programms ausgewählt werden. Wenn das Programm nicht beendet wurde, werden im nächsten Schritt die Variablen initialisiert. Je nach Auswahl der Bildquelle wird das Bild unterschiedlich eingelesen. Wichtig ist dass sich nur das Einlesen der Bilder unterscheidet danach verläuft die Auswertung wieder über den gleichen Code. Das ermöglicht die Optimierung der Spurerkennung in der Simulation und das Testen in der Live-Anwendung.

Struktur der Simulation

In der Simulation wird das Bild Frame für Frame ausgelesen und in ein Bild vom Datentyp Mat (openCV) konvertiert. Sobald das Video zu Ende ist, beendet sich das Programm selbstständig. Die So erzeugten Einzelbilder werden in dem gemeinsamen Programmzweig weiterverarbeitet. Die Weiterverarbeitung findet hauptsächlich in den Funktionen Bildtransformation und Spurerkennung statt. In der Bildtransformation wird das Bild entzerrt, in Schwarz/Weiß gewandelt und in die Vogelperspektive transformiert. In der Spurerkennung wird die rechte Spur durch regelmäßige Punkte erfasst und daraus das Spurpolynom berechnet.

Struktur des Live-Bildes

Bei dem Live-Bild wird die Kamera einmalig initialisiert. In diesem Schritt werden die wichtigsten Parameter eingestellt und eine Verbindung hergestellt. Nach dem erstmaligen Starten der Kamera kann es bis zu zwei Minuten dauern, bis der PC eine Verbindung mit der Kamera hergestellt hat. Erst dann kann diese Initialisierung erfolgreich ausgeführt werden.

Nach der Initialisierung wird zyklisch ein neues Bild aus dem Videopuffer gelesen in ein Alpha-RGB-Bild umgewandelt, da dies mit dem Mat-Format von openCV kompatibel ist. Am Ende eines Zyklus steht, genau wie in der Simulation ein Mat-Bild zur Verfügung. Dieses wird in der Bildtransformation und Spurerkennung weiterverarbeitet.















Simulationsumgebung

In der Simulationsumgebung wird ein vorher aufgezeichnetes Videobild genutzt, um das Kamerabild zu simulieren. Dazu wird im ersten Schritt, sobald die Simulation ausgewählt wurde, der Dateipfad des Videos eingelesen. Der Dateipfad und alle Konfigurationen sind in der Config.ini gespeichert und müssen gegebenenfalls angepasst werden. Im SVN befinden sich die Videos unter: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/Simulation_Bildverarbeitung_und_Spurerkennung/Videos/Rundkurs.mp4.

Mit der Funktion FA_InitVideo werden die Ausgabefenster der Bilder angepasst. Welche Bilder Ausgegeben werden sollen, kann ebenfalls in der Config-Datei festgelegt werden.

FL_GetFrame() liest ein neues Frame aus der Videodatei aus und speichert es in der Matrix.

Live Bild

Kamera einrichten

Bereich zum Download der Software

Um einen ersten Funktionstest der Kamera durchzuführen, wurde die Kamera über einen Ethernetkabel mit dem Laborrechner verbunden und das zugehörige Netzteil für die Stromversorgung angeschlossen. Als Netzteil wird dabei ein 5V und 4A Netzteil von Phigong verwendet.
Das VRmagic Programm zum ausgeben des Kamerabildes "CamLab" ist auf allen Laborrechnern bereits installiert.
Falls es nicht installiert sein sollte, kann das Programm von der VRmagic Homepage heruntergeladen werden:
https://www.vrmagic-imaging.com/service/downloads/usb-platform-downloads/
Der richtige Typ der Software, für den entspechenden Rechner kann unter dem Punkt "USBPlattform/Software" ausgewählt und heruntergeladen werden, siehe Bild.
Nachdem das Programm heruntergeladen wurde, muss die ZIP-Datei entpackt werden und die "Setup"-Datei ausgeführt werden. Für nähere Informationen zur Installation, ist in der ZIP-Datei eine README-Dokument enthalten.
"WICHTIG: Admin-Rechte von Nöten!!!"
Nachdem die Installation erfolgreich abgeschlossen wurde, kann das Programm "CamLab" ausgeführt werden.
Oberfläche des CamLab Programms
Nachdem das Programm geöffnet wurde kann die VRmagic Kamera mit dem CamLab kommunizieren. Die angeschlossene Kamera kann in dem Dropdown-Menü ausgewählt werden. Dies kann nach dem ersten mal anschließen etwas dauern, bis das Programm die Ethernetverbindung zur Kamera findet. Da ruhig 1-2 Minuten warten. Im Anschluss daran kann die Bildausgabe gestartet werden.

Wenn die Kamera ausgewählt wurde, öffnet sich ein erweiteretes Menü. In diesem Menü können alle möglichen Konfigurationen vorgenommen werden, die die VRmagic Kamera anbietet (Format, Timing, Sensor, Filter etc.). Mit einem Klick auf den Button "Grab" kann die Bildwiedergabe gestartet werden. Es können auch Snapshots erstellt werden, die auf dem Rechner gespeichert werden können.
Mit diesem Programm wurde ein erster Funktionstest der Kamera durchgeführt, welcher Grundlage für weitere Ansterungskonzepte mit Visual Studio ist.

Kamera in Softwareumgebung verwenden

Im Programm werden die notwendigen Schritte zum Starten der Kamera und der Bildausgabe durchlaufen. Dabei ist es ebenfalls wichtig, dass nach einem erneuten Anschließen der Kamera 1-2 Minuten gewartet werden muss, bis die Kamera tatsächlich die Ethernet Verbindung aufgebaut hat und verbunden ist. Dann stellt das Programm die Verbindung aber her und ein Live Bild der Kamera wird angezeigt, wenn Menüpunkt 2 ausgewählt wurde.
die wichtigen Schritte, die das Programm durchläuft, bis ein OpenCV Bild entsteht, dass dann für die Bildverarbeitung und Spurerkennung weiterverwendet werden kann sind die folgenden:

  • 1. Anlegen eines neues Kameradevices mithilfe von OSE_device_st = Vrm_OpenDevice();
  • 2. Belichtungszeit zuweisen mithilfe von: !VRmUsbCamSetPropertyValueF(OSE_device_st, VRM_PROPID_CAM_EXPOSURE_TIME_F, &OSE_belichtungszeit_s32)
  • 3. Erstellen eines Bildformates, indem die Bildgröße und das Farbformat eingestellt wird.
  • 4. Das erstellte Eingabebild dem neuen Format zuweisen mithilfe von VRmUsbCamNewImage(&OSE_ARGB_EingabeBild_st, OSE_ARGB_Format_st)
  • 5. In der loop werden dann Schrittweise Bilder aufgenommen mithilfe von VRmUsbCamLockNextImageEx(OSE_device_st, port, &OSE_rawQellBild_st, &OSE_bilderAufgenommen_st)
  • 6. Das aufgenommene Bild wird in ein Alpha RGB Bild gewandelt mithilfe von VRmUsbCamConvertImage(OSE_rawQellBild_st, OSE_ARGB_EingabeBild_st)
  • 7. Die Belichtungszeit wird dem aufgenommenen Bild zugewiesen mithilfe von VRmUsbCamGetPropertyValueF(OSE_device_st, VRM_PROPID_CAM_EXPOSURE_TIME_F, &OSE_belichtungszeit_s32)
  • 8. Das VRM Color Format wird erstellt, um es im nächsten Schitt für die Umwandlung zu nutzen
  • 9. Das Bild wird in ein OpenCV Bild umgewandelt mithilfe von cv::Mat OSE_srcImage_st(cvSize(OSE_ARGB_EingabeBild_st->m_image_format.m_width, OSE_ARGB_EingabeBild_st->m_image_format.m_height), toCvType(OSE_colorFormatsrc_st), (void*)OSE_ARGB_EingabeBild_st->mp_buffer, OSE_ARGB_EingabeBild_st->m_pitch);

Bildverarbeitung

Nachdem das Bild sowohl von der Kamera als auch von dem eingelesenen Video als gleiches openCV Bild im Farbschema Alpha RGB vorliegt, werden die nun erläuterten Schritte mit de Bild durchlaufen, um am Ende die drei Spurparameter a,b, und c zu erhalten.

Schritt 1: Transformation

Die Transformation des Bildes findet in der Funktion cv::Mat BTF_ImgTransf(cv::Mat img_Mat, bool ausgabe_abit[]) statt. Diese befindet sich in der Datei Bildtransformation.cpp.

In dieser Funktion werden zunächst die intrinsischen Kameraparameter eingegeben, die mithilfe der Matlab Toolbox Camera Calibrator erstellt wurden. Dazu wurde ein Schachbrettmuster genutzt, dass in verschiedenen Perspektiven vor die Kamera gehalten wurde. Wie man an diese Parameter dann kommt ist in der Matlab Hilfe hier Camera Calibration oder im Wiki Artikel Kamerakalibrierung beschrieben.

Dann erfolgt die Umwandlung des Bildes in ein Graustufenbild, was in der Funktion binarisierung(img_Mat, ausgabe_abit[2], ausgabe_abit[3]); stattfindet. Rückgabewert ist dann ein schwarz weiß Bild der Kamera in der Ursprungsgröße.


Als nächster Schritt findet die Transformation in die Vogelperspektive statt. Dazu wird das Bild zunächst vom Fischaugeneffekt durch die Funktion cv::undistort(img_Mat, KalibriertesBild_st, OSE_IntrinsicMatrix_as32, OSE_dist_s32); befreit und wird anschließend durch die Opencv Funktion cv:: warpPerspective Transformiert. Wie die Punkte zur Kalibrierung zustandekommen ist in diesem Wiki Artikel Transformation beschrieben.

Abschließend wird das Bild noch mithilfe eines Kantenerkennungsalgorithmus durch die cv::Canny(OSE_zielBild_st, OSE_filterBild_st, 100, 200, 3); Funktion in ein Kantenbild überführt, dass zurückgegeben wird.

Schrtt 2: Spurerkennung

Die Spurerkennung erfolgt durch den Funktionsaufruf Spurerkennung, diese Funktionist in der Datei SPurerkennung.cpp implementiert.

Spurerkennung(imgT, OSE_SpurparamterA_f32, OSE_SpurparamterB_f32, OSE_SpurparamterC_f32, OSE_Spurzuordnung_bit); Die Parameter sind:

  • imgT: Gefiltertes Bild in der Vogelperspektive
  • OSE_SpurparamterA_f32: Spurparameter A (Wird beschrieben)
  • OSE_SpurparamterB_f32: Spurparameter B (Wird beschrieben)
  • OSE_SpurparamterC_f32: Spurparameter C (Wird beschrieben)
  • OSE_Spurzuordnung_bit: Noch keine Funktion

Hier werden waagerechte Linien im Abstand von 40 Pixeln über das Bild gelegt und von der Mitte aus die die Schnittpunkte mit einer Kante Berechnet. Diese Punkte sollen dann die rechte Fahrbahn darstellen.

Schritt 3: Stopplinienerkennung

Stopplinienerkennung(imgT, OSE_StopplinieErkannt, OSE_StopplinienAbstand);

Daten senden

Im letzten Teil nach Einlesen und Verarbeiten der Daten werden diese über die RS 232 Schnittstelle gesendet. Dies ist aber nicht mehr Teil unserer Arbeit sondern ist im Wiki Artikel https://wiki.hshl.de/wiki/index.php/Kommunikation_zwischen_PC_und_dSpace-Karte_via_RS232 beschrieben.