Kom - Kommunikation: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
K (verbesserte Übersichtlichkeit)
(Änderung 97563 von Tim-Jannik Schonlau (Diskussion) rückgängig gemacht.)
Markierung: Rückgängigmachung
Zeile 10: Zeile 10:


== Konzept ==
== Konzept ==
{|
[[Datei:Schema_Konzept_SDE_CCF_Kommunikation.PNG|thumb|right|600px|Schema des Kommunikations-Konzepts nach Schnittstellen Dokumentation (Regelkreis mit dSPACE-Karte stark vereinfacht) ]]
|-style="vertical-align:top;"
Die [[OSE Softwareumgebung]] beinhaltet die Bild- und [[Objekterkennung mit Laserscanner]] die Lidar-Verarbeitung, sowie die Implementierung der RS232 Kommunikation. </br>
|Die [[OSE Softwareumgebung]] beinhaltet die Bild- und [[Objekterkennung mit Laserscanner]] die Lidar-Verarbeitung, sowie die Implementierung der RS232 Kommunikation. </br>
Die Kamera ist 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>
Die Kamera ist 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].
|[[Datei:Schema_Konzept_SDE_CCF_Kommunikation.PNG|thumb|right|600px|Schema des Kommunikations-Konzepts nach Schnittstellen Dokumentation (Regelkreis mit dSPACE-Karte stark vereinfacht) ]]
|}




Zeile 175: Zeile 172:
|}
|}
Dieses Diagramm veranschaulicht die Variablen im Datenpaket: <br>
Dieses Diagramm veranschaulicht die Variablen im Datenpaket: <br>
{|
[[Datei:Schema_Konzept_SDE_CCF_Datenpaket.png|700px|right]]
|-style="vertical-align:top;"
Am Anfang wird das Startbyte mit 10101010(BIN) = 170(DEC) gewählt. Darauf folgt das Spurpolynom mit den drei [https://de.wikipedia.org/wiki/Polynom Polynomkoeffizienten]. Da jeder Koeffizient mit einer Genauigkeit eines ''floats'', also 32bit = 8byte berechnet wird, sind es ingesamt 12Byte für das Fahrspurpolynom. Die Spurerkennung setzt sich zwei binären Werten, die dennoch mit je einem byte übertragen werden zusammen, um die Fahrspur oder Stopplinie zu erfassen. Darauf folgt wieder ein 4byte langer Parameter mit der Distanz zur Stopplinie. <br>
|Am Anfang wird das Startbyte mit 10101010(BIN) = 170(DEC) gewählt. Darauf folgt das Spurpolynom mit den drei [https://de.wikipedia.org/wiki/Polynom Polynomkoeffizienten]. Da jeder Koeffizient mit einer Genauigkeit eines ''floats'', also 32bit = 8byte berechnet wird, sind es ingesamt 12Byte für das Fahrspurpolynom. Die Spurerkennung setzt sich zwei binären Werten, die dennoch mit je einem byte übertragen werden zusammen, um die Fahrspur oder Stopplinie zu erfassen. Darauf folgt wieder ein 4byte langer Parameter mit der Distanz zur Stopplinie. <br>
Die Lidar-Objekt Anzahl wird mit einem Byte übertragen, einzelnen Eigenschaftsparameter wie Position, Größe, Geschwindigkeit werden ebenfalls mit 8byte übertragen. Lediglich die Objektnummer und der Vertrauenswert wird mit einem Byte gesendet.
Die Lidar-Objekt Anzahl wird mit einem Byte übertragen, einzelnen Eigenschaftsparameter wie Position, Größe, Geschwindigkeit werden ebenfalls mit 8byte übertragen. Lediglich die Objektnummer und der Vertrauenswert wird mit einem Byte gesendet.
So ergibt sich eine gesamte Paketlänge von 153 Byte, die beispielhaft mit 19200 baud (byte pro Sekunde) in einer Sekunde 128 mal übertragen wird.
So ergibt sich eine gesamte Paketlänge von 153 Byte, die beispielhaft mit 19200 baud (byte pro Sekunde) in einer Sekunde 128 mal übertragen wird.
|[[Datei:Schema_Konzept_SDE_CCF_Datenpaket.png|700px|right]]
|}


==Softwarearchitektur für die Kommunikation==
==Softwarearchitektur für die Kommunikation==
Zeile 198: Zeile 192:


=== Initialisierung auf der dSPACE-Karte ===
=== Initialisierung auf der dSPACE-Karte ===
{|
[[Datei:SEReinstellung.png|right]]
|-style="vertical-align:top;"
[[Datei:SERSetup.png|right|400px|thumb|RTI Block im Simulink online Modell (CCF_online → SEN - Sensoren - online → SenKam - Kamera)]]
|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.
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.
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>
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>
Im Simulink [[Starten der Online-Simulation | ''online Modell'']] werden die codierten Datenpakete in einer S-Function dekodiert. Diese können in dSPACE Control Desk visualisiert und getestet werden. Hier ist eine ausführlichere Beschreibung der [[Dekodierung RS-232 in Simulink | S-Function]] im 'online Modell' zu finden.
Im Simulink [[Starten der Online-Simulation | ''online Modell'']] werden die codierten Datenpakete in einer S-Function dekodiert. Diese können in dSPACE Control Desk visualisiert und getestet werden. Hier ist eine ausführlichere Beschreibung der [[Dekodierung RS-232 in Simulink | S-Function]] im 'online Modell' zu finden.
[[Datei:SERSetup.png|500px|thumb|RTI Block im Simulink online Modell (CCF_online → SEN - Sensoren - online → SenKam - Kamera)]]
|[[Datei:SEReinstellung.png|right|350px]]
|}


Alte Wiki-Artikel zur Kommunikationsimplementierung: <br>
Alte Wiki-Artikel zur Kommunikationsimplementierung: <br>

Version vom 30. November 2022, 15:49 Uhr

Betreuer: Prof. Dr.-Ing Ulrich Schneider
Autor: Tim Schonlau (WiSe 22/23)

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).
Mitwirkende der vergangenen Semester: Sven Posner, Jonas Hokamp, Isaac Mpidi Bita, Thomas Miska, Alexander Schirrmeister, Hendrik Steffen, Lukas Honerlage, Tim Schonlau, Changlai Bao

Aufgabenstellung 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, die sich auf dem CCF befinden.
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

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.
Die Kamera ist 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-233

Einen guten ersten Überblick des Recommended Standart 232 vermittelt die Definition im Wikipedia Artikel von RS-232.
Die Übertragung wird mit 8bit gleich 1 Byte langen Wörtern realisiert. Dazu muss das Datenpaket in kleinere Pakete aufgeteilt werden. Vor dem Datenpaket wird ein Startbit verschickt, optional ein Acknowledgement (ACK) und ein Stoppbit (Stand WiSe22/23 nicht implementiert).

Überblick Variablen

Das gesamte Datenpaket besteht aus mehreren Variablen, die der SVN: Schnittstellendokumentation zu entnehmen sind.

Signal Variablenname Sender Empfänger Datentyp KOS Bedeutung
Vx,ego V_x_ego DS1104 PC f32 (4 Byte) K Ego-Längsgeschwindigkeit des Fahrzeugs
Lenkwinkel alpha DS1104 PC f32 (4 Byte) K Lenkwinkel, a > 0 Lenkausschlag links, a < 0 Lenkausschlag rechts
8 Byte Gesamtgröße des Datenpakets von dSPACE Karte zum PC
a, b, c a, b, c PC DS1104 f32 (4 Byte) K Parameter der Fahrspur
Spurzuordnung lane_assign PC DS1104 bool (1 Byte) K 1: rechte Fahrspur / 0: linke Fahrspur
Stopplinie erkannt stop_insight PC DS1104 bool (1 Byte) K 1: Stopplinie erkannt / 0: Stopplinie nicht erkannt
Abstand Stopplinie stop_distance PC DS1104 f32 (4 Byte) K Entfernung zur Stopplinie
nObjekte n_objekte PC DS1104 uint8 (1 Byte) - Gesamtanzahl der relevanten Objekte (max. 5)
Objekt[n].Nummer number[n_objekte] PC DS1104 uint8 (1 Byte) - Objektzähler
Objekt[n].x0 x_0[n_objekte] PC DS1104 f32 (4 Byte) K x-Koordinate des Objektmittelpunktes (mitte, vorn)
Objekt[n].y0 y_0[n_objekte] PC DS1104 f32 (4 Byte) K y-Koordinate des Objektmittelpunktes (mitte, vorn)
Objekt[n].b b[n_objekte] PC DS1104 f32 (4 Byte) K Objektbreite
Objekt[n].t t[n_objekte] PC DS1104 f32 (4 Byte) K Objekttiefe
Objekt[n].a alpha[n_objekte] PC DS1104 f32 (4 Byte) K Objektausrichtung
Objekt[n].v v[n_objekte] PC DS1104 f32 (4 Byte) K Betrag des Geschwindigkeitsvektors
Objekt[n].Plausibel plausible[n_objekte] PC DS1104 uint8 (1 Byte) K Vertrauenswert für das Objekt (100: 100% vertrauenswürdig)
149 Byte Gesamtgröße des Datenpakets von PC zur dSPACE Karte

Dieses Diagramm veranschaulicht die Variablen im Datenpaket:

Am Anfang wird das Startbyte mit 10101010(BIN) = 170(DEC) gewählt. Darauf folgt das Spurpolynom mit den drei Polynomkoeffizienten. Da jeder Koeffizient mit einer Genauigkeit eines floats, also 32bit = 8byte berechnet wird, sind es ingesamt 12Byte für das Fahrspurpolynom. Die Spurerkennung setzt sich zwei binären Werten, die dennoch mit je einem byte übertragen werden zusammen, um die Fahrspur oder Stopplinie zu erfassen. Darauf folgt wieder ein 4byte langer Parameter mit der Distanz zur Stopplinie.
Die Lidar-Objekt Anzahl wird mit einem Byte übertragen, einzelnen Eigenschaftsparameter wie Position, Größe, Geschwindigkeit werden ebenfalls mit 8byte übertragen. Lediglich die Objektnummer und der Vertrauenswert wird mit einem Byte gesendet. So ergibt sich eine gesamte Paketlänge von 153 Byte, die beispielhaft mit 19200 baud (byte pro Sekunde) in einer Sekunde 128 mal übertragen wird.

Softwarearchitektur für die Kommunikation

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

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.

Die Hauptklasse der OSE Softwareumgebung "main.h" ruft die Funktion RS232_SendDataBigEndianFirst() auf, 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. Da 3 Parameter versendet werden, werden pro Übertragung 12 Byte benötigt, um die a-,b- und c-Parameter an der dSPACE-Karte zu bilden. Als erstes werden die 4 Byte des a-Parameters empfangen, dann wird des b-Parameter, anschließend der c-Parameter. 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.

Initialisierung auf der dSPACE-Karte

RTI Block im Simulink online Modell (CCF_online → SEN - Sensoren - online → SenKam - Kamera)

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. 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.

Im Simulink online Modell werden die codierten Datenpakete in einer S-Function dekodiert. 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.

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

Kommunikation und Diagnoseschnittstelle (aktueller Ansatz)

Datenverarbeitung

Für die Datenverarbeitung wird einen S-Function in Simulink erstellt. Die Funktion hat den Zweck die Daten zu interpretieren und die Spurparameter zu rekonstruieren. Hierfür werden zwei Eingänge benötigt:

  • Nutzdata
  • Statusbit

und der wesentliche Ausgängen sind:

  • a-Parameter
  • b-Parameter
  • c-Parameter.

Empfangt werden 8-Bit-Zeichen und diese müssen zusammengepfügt werden und einer 32-Bit-Zeichen als Ausgabeparameter zurückgeben. Hierfür werden zwei Zähler in der Funktion benötigt:

  • zaehler_param
  • zaehler_uebertragung

Der erste Zähler wird für die Zusammenfügung der Parameter benötig. Diese wird ein wert von 0 bis 3 einnehmen. Um ein 32-Bit-Zeichen wird erst 4 mal 8-Bit-Zeichen empfängt. Der zweite Zähler wird für die Übertragung von alle Spurparameter verwendet. Dieser nimmt den Wert von 1 bis 12 ein.

Als erstes werden immer die Daten als 8-Bit-Zeichen empfängt. Die Datenverarbeitung fängt, wenn der Start_Flag gesetzt ist. Dieser wird nur gesetzt wenn:

  1. der empfängte Byte der Start Byte (170) entspricht
  2. der Start_Flag und der Parameter Zähler null sind


Wenn der Flag gesetzt ist, fangen sowohl der Übertragungs- als auch der Parameterzähler hochzuzählen. Der Parameterzähler fasst immer 4-Datenbyte zusammen, dies ergibt einen Spurparameter. Der a-Parameter wird nach 4 Durchläufe komplett zusammengebaut, der b-Parameter nach 8 und der c-Parameter nach 12. Anschließend werden die alle Variablen der Funktion auf null zurückgesetzt.

Implementierung in Visual Studio

Für die Implementierung der Datenübertragung wurde ein ausführlicher Artikel geschrieben:

Anleitung für das ONLINE-Modell

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

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

Programmierrichtlinien

Schnittstellendokumentation

Schnittstellendokumentation

Namenskonvetion

Namenskonvention

Alte Wiki Artikel


→ zurück zum Hauptartikel: Praktikum SDE