Kom - Kommunikation: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(95 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Aufgabenstellung und Ziele =
= Einleitung =
Dieser Artikel wurde im Wintersemester 2022/23 komplett überarbeitet. Über eine genauere Beschreibung der Kommunikation hinaus wurde eine ausführliche Erklärung der Implementierung ergänzt und neu formuliert (für weitere Informationen siehe [https://wiki.hshl.de/wiki/index.php?title=Kom_-_Kommunikation&action=history  Versionshistorie]). <br>


== Kommunikation Kamera + Laserscanner zur DS-1104 gemäß Schnittstellendokumentation ==
== Anforderungen und Ziele ==
incl. ausführlichem Testing
Das Modul Kommunikation realisiert den Datenaustausch der einzelnen Module des Carolo Cup Fahrzeugs (CCF). Das Ziel ist es, mithilfe von C++ Code (Visual Studio 2019) die Variablen aus der [[OSE - Objekt - und Spurerkennung|Objekt- und Spurerkennung]] (z.B. Spurpolynom  <math>Y(X)=aX^2+bX+c</math>) von PC zur x86 PCI-Erweiterungskarte zu übertragen. Der PC berechnet dabei die zu Fahrspur und die PCI-Karte DS1104 überträgt die Signale als Echtzeitmicrocontroller an die Aktoren und bildet mit verschiedenen Sensoren z.B. zur Geschwindigkeitsregelung einen Regelkreis. <br>
== Framework ==
Das wird realisiert indem eine serielle  RS-232 Schnittstelle zum Microcontroller, in diesem Fall der Entwicklerkarte DS1104 von dSPCACE, implementiert wird. </br>
=== Lidar ===
Die weitere Verarbeitung der Daten findet in den anderen Modulen statt, die in Simulink (2019b) implementiert und auf der dSPACE-Karte ausgeführt werden. Die Spurparameter werden z.B. in [[BSF - Bahn- und Spurführung]] verarbeitet, um den Lenkwinkel aus der aktuellen Position und dem Spurpolynom zu regeln.
Die Lidar-Daten müssen segmentiert und zu Objekten verarbeitet werden. Bitte bereite hierfür ein Framework (Hülse) vor, das die Beispieldaten gemäß Schnittstellendokument weiterleitet. Ich fülle mit den Studierenden diese Schnittstelle anschließend mit Inhalt. Bitte übergib mir die Schnittstelle mit einer angemessenen Dokumentation.
</div>


=== Fusion Kamera-Lidar ===
== Konzept ==
Framework für die Fusion Kamera - Lidar auf den PC übertragen. Im zweiten Schritt müssen Kameraobjekte mit Videoobjekten fusioniert werden. Auch hierfür benötige ich ein Framework (Hülse, Funktionsrumpf), das ich dann fülle. Per Default werden die Kameraspur und die Laserscannerobjekte übergeben.
[[Datei:Schema_Konzept_SDE_CCF_Kommunikation.PNG|thumb|right|600px|Abb. 1: Schema des Kommunikations-Konzepts nach Schnittstellen Dokumentation (Regelkreis mit dSPACE-Karte stark vereinfacht) ]]
Die [[OSE Softwareumgebung]] beinhaltet die Bild- und [[Objekterkennung mit Laserscanner]] die Lidar-Verarbeitung, sowie die Implementierung der RS232 Kommunikation. </br>
Wie in Abbildung 1 zu sehen, ist die Kamera mit Ethernet an die x86-CPU verbunden, diese wiederum ist über einen [https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/configuration-of-com-ports COM Port] über das RS-232 Protokoll mit dem dSPACE CP1104 Connector Panel verbunden. Die x86-CPU führt die "OSE_Draufsicht_Spurpolynom_RS232.exe" (C/C++ Code) aus, die einen Bildverarbeitungsalgorithmus auf das Kamerabild anwendet, um die a-, b-, c-Parameter der Fahrspur zu ermitteln. Die dSPACE Karte wird über MATLAB/Simulink programmiert und empfängt das RS-232 Protokoll über ein [https://de.wikipedia.org/wiki/D-Sub D-Sub Kabel].</br>


= Anweisung für das ONLINE-Modell =


# Nutzen sie bitte MATLAB 2013a
# Achten Sie bitte auf der Solver des Blocks --> '''Fixed Step nicht auf auto'''
# Lesen Sie die Wiki-Artikeln durch
#* [https://wiki.hshl.de/wiki/index.php/Starten_der_Online-Simulation Starten der Online-Simulation]
#* [https://wiki.hshl.de/wiki/index.php/Updaten_von_Bibliotheken Updates von Bibliotheken]
#* [https://wiki.hshl.de/wiki/index.php/%C3%84ndern_von_Bibliotheken Ändern Bibliotheken]
#* [https://wiki.hshl.de/wiki/index.php/Signal_hinzuf%C3%BCgen Signal Hinzufügen]
#* [https://wiki.hshl.de/wiki/index.php/Software_Versionsverwaltung_mit_SVN Softwareverwaltung mit SVN]
# Notieren Sie Fehlermeldungen und Warnings
# Warnings sind sofort zu beseitigen beim Erstellen einer neuen Bibliothek!


== [[Tutorial - Bussysteme in Matlab| Tutorial - Bussysteme in Matlab]] ==
Die [[OSE Softwareumgebung]] erkennt aus den Lidar-Daten Objekte, die in Modulen [[AEP - Autonomes Einparken]], [[BSF - Bahn- und Spurführung]] und [[AuF - Antrieb und Fernbedienung]] benötigt werden. Mit diesen Daten kann das CCF Hindernissen auf der Teststrecke reagieren und ausweichen.
'''Autor: '''[[Benutzer:John Kneib|John Kneib]]


= Verbindung zum Fahrzeug =
=Serielle Schnittstelle: RS-232=
=== [[UltraVNC| VNC-Verbindung ]] ===
Einen guten ersten Überblick des Recommended Standart 232 vermittelt die Definition im [https://de.wikipedia.org/wiki/RS-232?wprov=sfla1#Definition Wikipedia Artikel von RS-232]. <br>
Die Übertragung wird mit 8bit, also einem ''Byte'' langen Wörtern realisiert. Das heißt, dass der COM Port der x86-CPU 8 Bits in den Puffer der dSPACE Karte schreibt. Diese liest pro Zyklusschritt 8bit aus dem Puffer. Um auf diese Weise alle Bytes zu übertragen, müssen die Daten in der gleichen Reihenfolge ausgegeben und wieder eingelesen werden. <br>
Ein [https://de.wikipedia.org/wiki/ACK_(Signal) Acknowledgement (ACK)], [https://de.wikipedia.org/wiki/Datenflusssteuerung Handshake], Stoppbyte und ein Parity-Byte würden die Kommunikation noch zuverlässiger machen, sind Stand Sprint2 im WiSe22/23 nicht implementiert. Auch die bidirektionale Kommunikation mit RS232 von dSPACE Karte zum PC ist nicht implementiert!


=== [[Von Simulink zu ControlDesk|Von Simulink zu ControlDesk]] ===
== Überblick Variablen ==
Die zu übertragenden Daten bestehen aus mehreren Variablen, die der [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Lastenheft/Schnittstellendokumentation_Anlage_Lastenheft.docx SVN: Schnittstellendokumentation] zu entnehmen sind.


=== Aufbau einer virtuellen Kommunikationsumgebung  ===
* [https://www.youtube.com/watch?v=6IxuKuK6iBY '''Erstellung eines virtuelle Port''']
* [https://www.youtube.com/watch?v=5aZh9beVAvI '''Serielle Visualisierung mit HTerm''']
= Kommunikationsarchitektur =
==Hardwarearchitektur für die Kommunikation==
Benötig werden vier Hauptbauteile:
* die dSPACE Karte
* die VRmDC-12 Kamera
* der Hokuyo URG-04LX-UG Laserscanner
* der PC (Pineview D525 NM10 mini-ITX Motherboard)
Die Verbindung zwischen den Bauteilen wird gemäß Schnittstellen Dokumentation hergestellt und sieht folgendermaßen aus:
[[Datei:Kommunikations_des_Fahrzeuges.png|600px]]
Die Kamera und der Laserscanner werden am PC verbunden. Die Kamera via Ethernet und der Laserscanner via USB. Die Beide Bausteine werden mit Hilfe C/C++-Quellcode angesprochen. Die Projekt-Solution holt die Informationen beider Sensoren und verarbeitet diese. Die verarbeiteten Daten werden an die dSPACE-Karte über die RS232-Schnittstelle übermittelt.
==Softwarearchitektur für die Kommunikation==
Der C/C++-Quellcode für den LiDAR und die Kamera befindet sich im SVN-Ordner [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Software/OSE_Fusion_Software_Final OSE Fusion Software Final]. Da die Kommmunikation sich mit der Datenfusion LiDAR-Kamera beschäftigt, ist es wichtig in welcher Datei des Projektes sich die notwendigen Informationen befinden. Die Software wirkt auf dem ersten Blick unübersichtlich.
Die für die Kommunikation relevanten Dateien wurden in folgendem Diagramm abgebildet.
[[Datei:Allgemeine_SH_Kommunikation.png|800px|]]
= Fehlermeldung MSVCP140D bei ComTest.exe =
= LiDAR =
=== [[Objekterkennung mit Laserscanner|Objekterkennung mit LiDAR Hokuyo URG-04LX]] ===
'''Autor:''' [[Benutzer:Michael_Deitel|Michael Deitel]] [[Benutzer:Manuel_Gross|Manuel Groß]]
'''Bearbeitet von:''' [[Benutzer:Benedikt Wulowitsch|Benedikt Wulowitsch]], [[Benutzer:John Kneib|John Kneib]]
=== [[Objekterkennung mit LiDAR|Inbetriebnahme und Objekterkennung des LiDAR Hokuyo URG-04LX in MATLAB]]===
'''Autor:''' [[Yu Peng]]
=== [[Objekterkennung mit RP Lidar A1M8| Inbetriebnahme und Objekterkennung des RP Lidar A1M8 in MATLAB]] ===
'''Autor:'''[[Benutzer:Thomas Miska|Thomas Miska]]
=== [[Kommunikation Hokuyo LiDAR| Kommunikation Hokuyo LiDAR via USB]] ===
'''Autor:'''[[Benutzer:Isaac Mpidi-Bita|Isaac Mpidi Bita]]
= Kamera =
=== [[Zentralperspektive "Umrechnung von Bild- zu Weltkoordinaten"| Umrechnung von Bildkoordinaten ins Weltkoordinatensystem]] ===
=== [[Spurerkennung | Spurerkennung (Vorheriger Ansatz)]] ===
'''Autor:''' [[Benutzer:Konstantin Wotschel |Konstantin Wotschel]]
===[[Objekterkennung mit Kamera|Objekterkennung mit Kamera VR-Magic]] ===
'''Autor:''' [[Benutzer:Christian Hauke|Christian Hauke]] 7. Feb. 2014 (CET)
===[[Bildentzerrung und KOS-Transformation|Bildentzerrung und KOS-Transformation mit OpenCV (aktueller Ansatz)]]===
'''Autor:''' [[Benutzer:Luca_Di-Lillo|Luca Di Lillo]], [[Benutzer:Tim-Leonard_Bexten|Tim Bexten]] in SS2019
= Fahrzeugkommunikation =
== Überblick ==
====dSpace zu PC====
{| class="wikitable"
{| class="wikitable"
|-
|+ style = "text-align: left"|Tabelle 1: Daten von DS1104 zu PC
! scope="col"| Signalname
! scope="col"| Signalname
! scope="col"| Datentyp
! scope="col"| Datentyp
Zeile 108: Zeile 43:
|}
|}


====PC zu dSpace====
 
{| class="wikitable"
{| class="wikitable"
|-
|+ style = "text-align: left"|Tabelle 2: Daten von PC zu DS1104
! scope="col"| Signalname
! scope="col"| Signalname
! scope="col"| Datentyp
! scope="col"| Datentyp
! scope="col"| Beschreibung
! scope="col"| Beschreibung
|-
|-
! scope="row"| a
! scope="row"| SpurA
| float32 (4 Byte)
| float32 (4 Byte)
| Fahrspurparameter
| Fahrspurparameter
|-
|-
! scope="row"| b
! scope="row"| SpurB
| float32 (4 Byte)
| float32 (4 Byte)
| Fahrspurparameter
| Fahrspurparameter
|-
|-
! scope="row"| c
! scope="row"| SpurC
| float32 (4 Byte)
| float32 (4 Byte)
| Fahrspurparameter
| Fahrspurparameter
|-
|-
! scope="row"| lane_asign
! scope="row"| Spurzuordnung
| bool (1 Byte)
| bool (1 Byte)
| Spurzuordnung: 1 = rechte Fahrspur, 0 = linke Fahrspur
| Spurzuordnung: 1 = rechte Fahrspur, 0 = linke Fahrspur
|-
|-
! scope="row"| stop_insight
! scope="row"| Stopplinie_erkannt
| bool (1 Byte)
| bool (1 Byte)
| 1 = Stopplinie erkannt, 0 = keine Stopplinie erkannt
| 1 = Stopplinie erkannt, 0 = keine Stopplinie erkannt
|-
|-
! scope="row"| stop_distance
! scope="row"| Stopplinienabstand
| float32 (4 Byte)
| float32 (4 Byte)
| Entfernung zur Stopplinie
| Entfernung zur Stopplinie
|-
|-
! scope="row"| n_objekte
! scope="row"| n_Objekte
| uint8 (1 Byte)
| uint8 (1 Byte)
| Anzahl relevanter Objekte (maximal 5)
| Anzahl relevanter Objekte (maximal 5)
|-
|-
! scope="row"| number[n_objekte]
! scope="row"| Objekt_Nummer
| uint8 (1 Byte)
| uint8 (1 Byte)
| Objektzähler
| Objektzähler
|-
|-
! scope="row"| x_0[n_objekte]
! scope="row"| ObjektX
| float32 (4 Byte)
| float32 (4 Byte)
| x-Koordinate des Objektmittelpunktes (mitte, vorn)
| x-Koordinate des Objektmittelpunktes (mitte, vorn)
|-
|-
! scope="row"| y_0[n_objekte]
! scope="row"| ObjektY
| float32 (4 Byte)
| float32 (4 Byte)
| y-Koordinate des Objektmittelpunktes (mitte, vorn)
| y-Koordinate des Objektmittelpunktes (mitte, vorn)
|-
|-
! scope="row"| b[n_objekte]
! scope="row"| Objektbreite
| float32 (4 Byte)
| float32 (4 Byte)
| Objektbreite
| Objektbreite
|-
|-
! scope="row"| t[n_objekte]
! scope="row"| Objekttiefe
| float32 (4 Byte)
| float32 (4 Byte)
| Objekttiefe
| Objekttiefe
|-
|-
! scope="row"| alpha[n_objekte]
! scope="row"| Objektausrichtung
| float32 (4 Byte)
| float32 (4 Byte)
| Objektausrichtung
| Objektausrichtung
|-
|-
! scope="row"| v[n_objekte]
! scope="row"| Objektgeschwindigkeit
| float32 (4 Byte)
| float32 (4 Byte)
| Betrag des Geschwindigkeitsvektors
| Betrag des Geschwindigkeitsvektors
|-
|-
! scope="row"| plausible[n_objekte]
! scope="row"| Objekt_Plausibel
| uint8 (1 Byte)
| uint8 (1 Byte)
| Vertrauenswert für das Objekt in Prozent ( 0 = minimale Vertrauen, 100 = maximale Vertrauen)
| Vertrauenswert für das Objekt in Prozent ( 0 = minimale Vertrauen, 100 = maximale Vertrauen)
Zeile 179: Zeile 114:
|}
|}


== Dokumentation ==
-----


=== [[Fahrzeugkommunikation via RS232| Kommunikation und Diagnoseschnittstelle]] (aktueller Ansatz)===
Dieses Diagramm veranschaulicht die zu sendenden Daten von PC zur dSPACE Karte:
[[Datei:Schema_Konzept_SDE_CCF_Datenpaket.png|thumb|900px|right|Abb. 2: Schema_Konzept_SDE_CCF_Datenpaket]]
In Abbildung 2 ist zu sehen, das zuerst das Startbyte übertragen wird, dieses wird auf 10101010(BIN) = 170(DEC) festgelegt. Darauf folgt das Spurpolynom mit den drei [https://de.wikipedia.org/wiki/Polynom Polynomkoeffizienten]. Da jeder Koeffizient mit einer Genauigkeit eines ''floats'', also 32bit = 4byte berechnet wird, sind es ingesamt 12Byte für das Fahrspurpolynom. Die Stopplinienerkennung setzt sich zwei binären Variablen zusammen, die dennoch mit je einem Byte übertragen werden. Die Stoppliniendistanz wird ebenfalls mit 4byte übertragen.<br>
Die Anzahl der Lidar-Objekte wird mit einem Byte übertragen, die Eigenschaftsparameter wie Größe, Position, Geschwindigkeit werden ebenfalls jeweils mit 4Byte übertragen, die Objektnummer und der Vertrauenswert wird mit einem Byte gesendet.
So ergibt sich eine Datenmange von über 150 Byte, die beispielhaft mit 115200 baud (byte pro Sekunde) in einer Sekunde ~720 mal übertragen wird. Die byte-genaue Größe der zu übertragenen Daten weicht von dieser Darstellung ab, da ''Struct'' Datenstrukturen in C++ immer an eine vierte Speicheraddresse gespeichert werden. Das ''Struct'' mit den 3 Spurparametern, Spurzuordnung und Stopplinie_erkannt, sowie dem Stopplinienabstand besitzt deswegen eine Variable ''filler1'', die als Platzhalter den Zugriff auf diesen ''leeren'' Speicherplatz ermöglicht. Dies kann mit [https://learn.microsoft.com/en-us/cpp/preprocessor/pack?view=msvc-170 ''pack pragma''] umgangen werden, ist aber für diese Implementation nicht zwingend erforderlich!


=== [[Kommunikation zwischen PC und dSpace-Karte via RS232|Kommunikation zwischen PC und dSpace-Karte]] (vorheriger Ansatz)===
==Softwarearchitektur für die Kommunikation==
Die für die [[OSE Softwareumgebung]] relevanten Dateien werden im folgendem Diagramm abgebildet.
 
{|
|[[Datei:Allgemeine_SH_Kommunikation.png|thumb|900px|left|Abb. 3: Allgemeine_SH_Kommunikation]]
[[Datei:Projektmappe Visual Studio OSE Draufsicht Spurpolynom RS232.png|thumb|300px|right|Abb. 4: Projektmappe Visual Studio OSE Draufsicht Spurpolynom RS232]] </div>
|}
 
===Beschreibung der Implementierung===
Die [[OSE Softwareumgebung]] umfasst drei Themenbereiche:
#Die Linienerkennung, mit der die Fahrspur berechnet oder die Stopplinie identifiziert wird.
#Zweitens die Objekterkennung die aus LIDAR Daten berechnet werden (Noch nicht vollständig im Diagramm! | Stand Sprint1 WS22/23).
#Die Implementierung einer RS-232 Kommunikation mit der rs-232.c-Bibliothek von [https://www.teuniz.net/RS-232/index.html Teunis van Beelen]. <br>
 
Zu Beginn werden in der Hauptklasse der [[OSE Softwareumgebung]] "main.h" die Objekt- und Spurerkennung durchgeführt. So werden alle für das Fahrzeug relevanten Informationen generiert Die gesammelten Daten (Spurparameter, Stopplinie, LiDAR-Objekte, etc.) werden im Anschluss in einem ''Struct'' zusammengeführt. Mit diesem ''Struct'' wird die Funktion '''RS232_SendDataBigEndianFirst''' aufgerufen, die mit der Funktion '''RS232_SendByte()''' aus "RS232Comm.h" das Datenpaket an die dSPACE-Karte schickt.<br>
Vom PC wird jeder Parameter in 4 Byte aufgesplittet. Es werden, inklusive 5 LiDAR Objekte, insgesamt 47 Parameter nacheinander versendet. Als erstes werden die 4 Byte des a-Parameters empfangen, dann wird der b-Parameter, anschließend der c-Parameter und so weiter. Die Daten werden in der gleichen Reihenfolge empfangen, wie sie auch versendet wurden. Um sicher zu stellen, dass der a-Parameter immer als erstes bearbeitet wird, wird einen START_BYTE von PC zu der dSPACE-Karte gesendet. Dieser wird bewusst als 10101010(BIN) = 170(DEC) gewählt. Wichtig zu beachten ist, dass die Daten im PC als [https://de.wikipedia.org/wiki/Byte-Reihenfolge#Little-Endian-Format Little-Endian] und auf der dSPACE-Karte als [https://de.wikipedia.org/wiki/Byte-Reihenfolge#Big-Endian-Format Big-Endian] gespeichert sind.
 
[[Datei:PAP_Ablauf_Kommunikation.png|500px|right|thumb|Abb. 6: Ablauf der Kommunikation auf Senderseite]]
[[Datei:BitReihenfolge.png|1000px|center|thumb|Abb. 5: BitReihenfolge]]
<br><br>
 
=== Konfiguration der dSPACE-Karte ===
Mit der [https://www.dspace.com/en/inc/home/products/sw/impsw/real-time-interface.cfm RTI Toolbox von dSPACE] wird eine Simulink-Bibliothek für die serielle Schnittstelle bereitgestellt. Hierfür sollte das MATLAB®/Simulink [[Starten der Online-Simulation | ''online Modell'']] des CCF gestartet werden. Nachdem die [https://svn.hshl.de/usvn/project/MTR_SDE_Praktikum/show/trunk/Software/CaroloCupFahrzeug/CCF_online.slx CCF_online.slx] in Simulink geöffnet wurde, kann mit '''Strg + L''' die verlinkte Bibliothek ''CCF_online → SEN - Sensoren - online → SenKam - Kamera'' geöffnet werden. Empfehlenswert ist ein Blick in die Dokumentation/Hilfe von dSPACE, die über das Kontextmenü geöffnet werden kann.
Die serielle Kommunikation wird mittels des sogenannten '''DS1104SER_SETUP''' -Blocks in Simulink initialisiert, mit einem Doppelklick auf den Block können die Einstellungen des Busses konfiguriert werden: Für die Fahrzeugskommunikation muss auf beiden Seiten eine gleiche Baudrate bestimmt werden. <br>
[[Datei:SEReinstellung.png|400px|right|thumb|Abb. 7: SEReinstellung]]
[[Datei:SERSetup.png|right|700px|thumb|Abb. 8: RTI Block im Simulink online Modell (CCF_online → SEN - Sensoren - online → SenKam - Kamera)]]
<br><br><br><br><br>
 
-----
Im Simulink [[Starten der Online-Simulation | ''online Modell'']] werden die gesendeten Bytes mithilfe einer S-Function aufgeschlüsselt. Diese können in dSPACE Control Desk visualisiert und getestet werden. <br>
Hier ist eine ausführlichere Beschreibung der S-Function im ''online Modell'' zu finden:
=== [[Dekodierung RS-232 in Simulink]] ===
 
-----
Alte Wiki-Artikel zur Kommunikationsimplementierung: <br>
[[Übertragen des Spurpolynoms]]
[[Kommunikation zwischen PC und dSpace-Karte via RS232|Kommunikation zwischen PC und dSpace-Karte]] (vorheriger Ansatz)
 
===[[Fahrzeugkommunikation via RS232| Kommunikation und Diagnoseschnittstelle]] (aktueller Ansatz)===
 
-----
=== Implementierung in Visual Studio ===
Die Umsetzung in Visual Studio orientiert sich am oben beschrieben Ablauf.<br>
Für die konkrete Implementierung der Datenübertragung wurden die folgenden beiden ausführlichen Artikel verfasst:
 
* '''[[Übertragen des Spurpolynoms]]'''
* '''[[Datenübertragung zwischen PC und dSPACE Karte]]'''
(Diese beiden Artikel müssen noch zu einem zusammengefasst werden)
 
= Anleitung für das ONLINE-Modell =
[[Datei:KOM_ComTest_Fehlermeldung_MSVCP140D.png|500px|right|thumb|Abb. 9: Beim ersten Start fehlen bestimmte Windows Bibliotheken. Das Kompilieren der Datei "ComTest.vcxproj" mit Visual Studio (2019) löst das Problem.]]
# Nutzen sie bitte MATLAB 2019b
# Achten Sie bitte auf der Solver des Blocks --> '''Fixed Step nicht auf auto'''
# Lesen Sie die Wiki-Artikeln durch
#* [https://wiki.hshl.de/wiki/index.php/Starten_der_Online-Simulation Starten der Online-Simulation]
#* [https://wiki.hshl.de/wiki/index.php/Updaten_von_Bibliotheken Updates von Bibliotheken]
#* [https://wiki.hshl.de/wiki/index.php/%C3%84ndern_von_Bibliotheken Ändern Bibliotheken]
#* [https://wiki.hshl.de/wiki/index.php/Signal_hinzuf%C3%BCgen Signal Hinzufügen]
#* [https://wiki.hshl.de/wiki/index.php/Software_Versionsverwaltung_mit_SVN Softwareverwaltung mit SVN]
# Notieren Sie Fehlermeldungen und Warnings
# Warnings sind sofort zu beseitigen beim Erstellen einer neuen Bibliothek!
<br><br><br><br>


= Test der Kommunikation =
= Tests der Kommunikation =
[[Kom - Kommunikation: Test der Kommunikation zw. PC und DS1104]]


= Wichtige Dokumenten in SVN =


==Testdokumentation==
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 5: Links zur Testdokumentation
! style="font-weight: bold;" | Datum
! style="font-weight: bold;width: 600px;" | Link
|-
| style="text-align:right;" | Februar 2019
| [[Kommunikation zwischen PC und dSpace-Karte via RS232]]
|-
| style="text-align:right;" | Januar 2020
| [[Übertragen des Spurpolynoms#Komponententest|Übertragen des Spurpolynoms]]
|-
| style="text-align:right;" | Januar 2022
| [[Kommunikation RS232 zwischen PC und DS1104]]
|-
| style="text-align:right;" | Juli 2022
| [[Kom - Kommunikation: Test der Kommunikation zw. PC und DS1104]]
|-
| style="text-align:right;" | Dezember 2022
| [[Test der RS232-Kommunikation (Abschlusstest WiSe 22/23)]]
|-
| style="text-align:right;" | WiSe 23/24
| [[KOM:_RS232-Kommunikation_DS1104-Karte_mit_PC]]
|}


= Programmierrichtlinien =
; Schnittstellendokumentation
; Schnittstellendokumentation
Im SVN ist der aktuelle Stand der Schnittstelle zwischen dSPACE-1104-Karte und PC dokumentiert.
→ [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Teams/Kom/Dokumentation/Schnittstelle%20Dokumentation/Schnittstellendokumentation.docx Schnittstellendokumentation]
 
→ [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Lastenheft/Schnittstellendokumentation_2018.docx SVN: Schnittstellendokumentation]


; Namenskonvetion
; Namenskonvetion
Im SVN sind Programmierrichtlinien bezüglich Namenskonvention unter: [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Lastenheft/Namenskonventionen.pdf Programmierrichtlinien: Namenskonvention] gespeichert.
[https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Anforderungsmanagement/Lastenheft/Namenskonventionen.pdf Namenskonvention]


= Alte Wiki Artikel =
* [[Tutorial - Bussysteme in Matlab| Tutorial - Bussysteme in Matlab]] '''Autor: '''[[Benutzer:John Kneib|John Kneib]]
* Verbindung zum Fahrzeug
**[[UltraVNC| VNC-Verbindung ]]
** [[Von Simulink zu ControlDesk|Von Simulink zu ControlDesk]]
*Aufbau einer virtuellen Kommunikationsumgebung
** [https://www.youtube.com/watch?v=6IxuKuK6iBY '''Erstellung eines virtuelle Port''']
** [https://www.youtube.com/watch?v=5aZh9beVAvI '''Serielle Visualisierung mit HTerm''']
*LiDAR
**[[Objekterkennung mit Laserscanner|Objekterkennung mit LiDAR Hokuyo URG-04LX]] '''Autor:''' [[Benutzer:Michael_Deitel|Michael Deitel]] [[Benutzer:Manuel_Gross|Manuel Groß]] '''Bearbeitet von:''' [[Benutzer:Benedikt Wulowitsch|Benedikt Wulowitsch]], [[Benutzer:John Kneib|John Kneib]]
**[[Objekterkennung mit LiDAR|Inbetriebnahme und Objekterkennung des LiDAR Hokuyo URG-04LX in MATLAB]] '''Autor:''' [[Yu Peng]]
**[[Objekterkennung mit RP Lidar A1M8| Inbetriebnahme und Objekterkennung des RP Lidar A1M8 in MATLAB]] '''Autor:'''[[Benutzer:Thomas Miska|Thomas Miska]]
**[[Kommunikation Hokuyo LiDAR| Kommunikation Hokuyo LiDAR via USB]] '''Autor:'''[[Benutzer:Isaac Mpidi-Bita|Isaac Mpidi Bita]]
*Kamera
**[[Zentralperspektive "Umrechnung von Bild- zu Weltkoordinaten"| Umrechnung von Bildkoordinaten ins Weltkoordinatensystem]]
**[[Spurerkennung | Spurerkennung (Vorheriger Ansatz)]] '''Autor:''' [[Benutzer:Konstantin Wotschel |Konstantin Wotschel]]
**[[Objekterkennung mit Kamera|Objekterkennung mit Kamera VR-Magic]] '''Autor:''' [[Benutzer:Christian Hauke|Christian Hauke]] 7. Feb. 2014 (CET)
**[[Bildentzerrung und KOS-Transformation|Bildentzerrung und KOS-Transformation mit OpenCV (aktueller Ansatz)]] '''Autor:''' [[Benutzer:Luca_Di-Lillo|Luca Di Lillo]], [[Benutzer:Tim-Leonard_Bexten|Tim Bexten]] in SS2019
----
----
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]

Aktuelle Version vom 21. Januar 2024, 22:43 Uhr

Einleitung

Dieser Artikel wurde im Wintersemester 2022/23 komplett überarbeitet. Über eine genauere Beschreibung der Kommunikation hinaus wurde eine ausführliche Erklärung der Implementierung ergänzt und neu formuliert (für weitere Informationen siehe Versionshistorie).

Anforderungen und Ziele

Das Modul Kommunikation realisiert den Datenaustausch der einzelnen Module des Carolo Cup Fahrzeugs (CCF). Das Ziel ist es, mithilfe von C++ Code (Visual Studio 2019) die Variablen aus der Objekt- und Spurerkennung (z.B. Spurpolynom ) von PC zur x86 PCI-Erweiterungskarte zu übertragen. Der PC berechnet dabei die zu Fahrspur und die PCI-Karte DS1104 überträgt die Signale als Echtzeitmicrocontroller an die Aktoren und bildet mit verschiedenen Sensoren z.B. zur Geschwindigkeitsregelung einen Regelkreis.
Das wird realisiert indem eine serielle RS-232 Schnittstelle zum Microcontroller, in diesem Fall der Entwicklerkarte DS1104 von dSPCACE, implementiert wird.
Die weitere Verarbeitung der Daten findet in den anderen Modulen statt, die in Simulink (2019b) implementiert und auf der dSPACE-Karte ausgeführt werden. Die Spurparameter werden z.B. in BSF - Bahn- und Spurführung verarbeitet, um den Lenkwinkel aus der aktuellen Position und dem Spurpolynom zu regeln.

Konzept

Abb. 1: Schema des Kommunikations-Konzepts nach Schnittstellen Dokumentation (Regelkreis mit dSPACE-Karte stark vereinfacht)

Die OSE Softwareumgebung beinhaltet die Bild- und Objekterkennung mit Laserscanner die Lidar-Verarbeitung, sowie die Implementierung der RS232 Kommunikation.
Wie in Abbildung 1 zu sehen, ist die Kamera mit Ethernet an die x86-CPU verbunden, diese wiederum ist über einen COM Port über das RS-232 Protokoll mit dem dSPACE CP1104 Connector Panel verbunden. Die x86-CPU führt die "OSE_Draufsicht_Spurpolynom_RS232.exe" (C/C++ Code) aus, die einen Bildverarbeitungsalgorithmus auf das Kamerabild anwendet, um die a-, b-, c-Parameter der Fahrspur zu ermitteln. Die dSPACE Karte wird über MATLAB/Simulink programmiert und empfängt das RS-232 Protokoll über ein D-Sub Kabel.


Die OSE Softwareumgebung erkennt aus den Lidar-Daten Objekte, die in Modulen AEP - Autonomes Einparken, BSF - Bahn- und Spurführung und AuF - Antrieb und Fernbedienung benötigt werden. Mit diesen Daten kann das CCF Hindernissen auf der Teststrecke reagieren und ausweichen.

Serielle Schnittstelle: RS-232

Einen guten ersten Überblick des Recommended Standart 232 vermittelt die Definition im Wikipedia Artikel von RS-232.
Die Übertragung wird mit 8bit, also einem Byte langen Wörtern realisiert. Das heißt, dass der COM Port der x86-CPU 8 Bits in den Puffer der dSPACE Karte schreibt. Diese liest pro Zyklusschritt 8bit aus dem Puffer. Um auf diese Weise alle Bytes zu übertragen, müssen die Daten in der gleichen Reihenfolge ausgegeben und wieder eingelesen werden.
Ein Acknowledgement (ACK), Handshake, Stoppbyte und ein Parity-Byte würden die Kommunikation noch zuverlässiger machen, sind Stand Sprint2 im WiSe22/23 nicht implementiert. Auch die bidirektionale Kommunikation mit RS232 von dSPACE Karte zum PC ist nicht implementiert!

Überblick Variablen

Die zu übertragenden Daten bestehen aus mehreren Variablen, die der SVN: Schnittstellendokumentation zu entnehmen sind.

Tabelle 1: Daten von DS1104 zu PC
Signalname Datentyp Beschreibung
V_x_ego float32 (4 Byte) Ego-Längsgeschwindigkeit des Fahrzeugs
alpha float32 (4 Byte) Lenkwinkel: α > 0 Lenkausschlag links, α < 0 Lenkausschlag rechts
Gesamtgröße des Datenpakets 8 Byte


Tabelle 2: Daten von PC zu DS1104
Signalname Datentyp Beschreibung
SpurA float32 (4 Byte) Fahrspurparameter
SpurB float32 (4 Byte) Fahrspurparameter
SpurC float32 (4 Byte) Fahrspurparameter
Spurzuordnung bool (1 Byte) Spurzuordnung: 1 = rechte Fahrspur, 0 = linke Fahrspur
Stopplinie_erkannt bool (1 Byte) 1 = Stopplinie erkannt, 0 = keine Stopplinie erkannt
Stopplinienabstand float32 (4 Byte) Entfernung zur Stopplinie
n_Objekte uint8 (1 Byte) Anzahl relevanter Objekte (maximal 5)
Objekt_Nummer uint8 (1 Byte) Objektzähler
ObjektX float32 (4 Byte) x-Koordinate des Objektmittelpunktes (mitte, vorn)
ObjektY float32 (4 Byte) y-Koordinate des Objektmittelpunktes (mitte, vorn)
Objektbreite float32 (4 Byte) Objektbreite
Objekttiefe float32 (4 Byte) Objekttiefe
Objektausrichtung float32 (4 Byte) Objektausrichtung
Objektgeschwindigkeit float32 (4 Byte) Betrag des Geschwindigkeitsvektors
Objekt_Plausibel uint8 (1 Byte) Vertrauenswert für das Objekt in Prozent ( 0 = minimale Vertrauen, 100 = maximale Vertrauen)
Gesamtgröße des Datenpakets 149 Byte

Dieses Diagramm veranschaulicht die zu sendenden Daten von PC zur dSPACE Karte:

Abb. 2: Schema_Konzept_SDE_CCF_Datenpaket

In Abbildung 2 ist zu sehen, das zuerst das Startbyte übertragen wird, dieses wird auf 10101010(BIN) = 170(DEC) festgelegt. Darauf folgt das Spurpolynom mit den drei Polynomkoeffizienten. Da jeder Koeffizient mit einer Genauigkeit eines floats, also 32bit = 4byte berechnet wird, sind es ingesamt 12Byte für das Fahrspurpolynom. Die Stopplinienerkennung setzt sich zwei binären Variablen zusammen, die dennoch mit je einem Byte übertragen werden. Die Stoppliniendistanz wird ebenfalls mit 4byte übertragen.
Die Anzahl der Lidar-Objekte wird mit einem Byte übertragen, die Eigenschaftsparameter wie Größe, Position, Geschwindigkeit werden ebenfalls jeweils mit 4Byte übertragen, die Objektnummer und der Vertrauenswert wird mit einem Byte gesendet. So ergibt sich eine Datenmange von über 150 Byte, die beispielhaft mit 115200 baud (byte pro Sekunde) in einer Sekunde ~720 mal übertragen wird. Die byte-genaue Größe der zu übertragenen Daten weicht von dieser Darstellung ab, da Struct Datenstrukturen in C++ immer an eine vierte Speicheraddresse gespeichert werden. Das Struct mit den 3 Spurparametern, Spurzuordnung und Stopplinie_erkannt, sowie dem Stopplinienabstand besitzt deswegen eine Variable filler1, die als Platzhalter den Zugriff auf diesen leeren Speicherplatz ermöglicht. Dies kann mit pack pragma umgangen werden, ist aber für diese Implementation nicht zwingend erforderlich!

Softwarearchitektur für die Kommunikation

Die für die OSE Softwareumgebung relevanten Dateien werden im folgendem Diagramm abgebildet.

Abb. 3: Allgemeine_SH_Kommunikation
Abb. 4: Projektmappe Visual Studio OSE Draufsicht Spurpolynom RS232

Beschreibung der Implementierung

Die OSE Softwareumgebung umfasst drei Themenbereiche:

  1. Die Linienerkennung, mit der die Fahrspur berechnet oder die Stopplinie identifiziert wird.
  2. Zweitens die Objekterkennung die aus LIDAR Daten berechnet werden (Noch nicht vollständig im Diagramm! | Stand Sprint1 WS22/23).
  3. Die Implementierung einer RS-232 Kommunikation mit der rs-232.c-Bibliothek von Teunis van Beelen.

Zu Beginn werden in der Hauptklasse der OSE Softwareumgebung "main.h" die Objekt- und Spurerkennung durchgeführt. So werden alle für das Fahrzeug relevanten Informationen generiert Die gesammelten Daten (Spurparameter, Stopplinie, LiDAR-Objekte, etc.) werden im Anschluss in einem Struct zusammengeführt. Mit diesem Struct wird die Funktion RS232_SendDataBigEndianFirst aufgerufen, die mit der Funktion RS232_SendByte() aus "RS232Comm.h" das Datenpaket an die dSPACE-Karte schickt.
Vom PC wird jeder Parameter in 4 Byte aufgesplittet. Es werden, inklusive 5 LiDAR Objekte, insgesamt 47 Parameter nacheinander versendet. Als erstes werden die 4 Byte des a-Parameters empfangen, dann wird der b-Parameter, anschließend der c-Parameter und so weiter. Die Daten werden in der gleichen Reihenfolge empfangen, wie sie auch versendet wurden. Um sicher zu stellen, dass der a-Parameter immer als erstes bearbeitet wird, wird einen START_BYTE von PC zu der dSPACE-Karte gesendet. Dieser wird bewusst als 10101010(BIN) = 170(DEC) gewählt. Wichtig zu beachten ist, dass die Daten im PC als Little-Endian und auf der dSPACE-Karte als Big-Endian gespeichert sind.

Abb. 6: Ablauf der Kommunikation auf Senderseite
Abb. 5: BitReihenfolge



Konfiguration der dSPACE-Karte

Mit der RTI Toolbox von dSPACE wird eine Simulink-Bibliothek für die serielle Schnittstelle bereitgestellt. Hierfür sollte das MATLAB®/Simulink online Modell des CCF gestartet werden. Nachdem die CCF_online.slx in Simulink geöffnet wurde, kann mit Strg + L die verlinkte Bibliothek CCF_online → SEN - Sensoren - online → SenKam - Kamera geöffnet werden. Empfehlenswert ist ein Blick in die Dokumentation/Hilfe von dSPACE, die über das Kontextmenü geöffnet werden kann. Die serielle Kommunikation wird mittels des sogenannten DS1104SER_SETUP -Blocks in Simulink initialisiert, mit einem Doppelklick auf den Block können die Einstellungen des Busses konfiguriert werden: Für die Fahrzeugskommunikation muss auf beiden Seiten eine gleiche Baudrate bestimmt werden.

Abb. 7: SEReinstellung
Abb. 8: RTI Block im Simulink online Modell (CCF_online → SEN - Sensoren - online → SenKam - Kamera)







Im Simulink online Modell werden die gesendeten Bytes mithilfe einer S-Function aufgeschlüsselt. Diese können in dSPACE Control Desk visualisiert und getestet werden.
Hier ist eine ausführlichere Beschreibung der S-Function im online Modell zu finden:

Dekodierung RS-232 in Simulink


Alte Wiki-Artikel zur Kommunikationsimplementierung:
Übertragen des Spurpolynoms Kommunikation zwischen PC und dSpace-Karte (vorheriger Ansatz)

Kommunikation und Diagnoseschnittstelle (aktueller Ansatz)


Implementierung in Visual Studio

Die Umsetzung in Visual Studio orientiert sich am oben beschrieben Ablauf.
Für die konkrete Implementierung der Datenübertragung wurden die folgenden beiden ausführlichen Artikel verfasst:

(Diese beiden Artikel müssen noch zu einem zusammengefasst werden)

Anleitung für das ONLINE-Modell

Abb. 9: Beim ersten Start fehlen bestimmte Windows Bibliotheken. Das Kompilieren der Datei "ComTest.vcxproj" mit Visual Studio (2019) löst das Problem.
  1. Nutzen sie bitte MATLAB 2019b
  2. Achten Sie bitte auf der Solver des Blocks --> Fixed Step nicht auf auto
  3. Lesen Sie die Wiki-Artikeln durch
  4. Notieren Sie Fehlermeldungen und Warnings
  5. Warnings sind sofort zu beseitigen beim Erstellen einer neuen Bibliothek!





Tests der Kommunikation

Testdokumentation

Tabelle 5: Links zur Testdokumentation
Datum Link
Februar 2019 Kommunikation zwischen PC und dSpace-Karte via RS232
Januar 2020 Übertragen des Spurpolynoms
Januar 2022 Kommunikation RS232 zwischen PC und DS1104
Juli 2022 Kom - Kommunikation: Test der Kommunikation zw. PC und DS1104
Dezember 2022 Test der RS232-Kommunikation (Abschlusstest WiSe 22/23)
WiSe 23/24 KOM:_RS232-Kommunikation_DS1104-Karte_mit_PC

Programmierrichtlinien

Schnittstellendokumentation

Schnittstellendokumentation

Namenskonvetion

Namenskonvention

Alte Wiki Artikel


→ zurück zum Hauptartikel: Praktikum SDE