Fahrzeugkommunikation via RS232: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(40 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 6: Zeile 6:


'''Autor:''' [[Benutzer:Isaac Mpidi-Bita|Isaac Mpidi Bita]] 20:21, 16. Nov. 2019 (UTC)
'''Autor:''' [[Benutzer:Isaac Mpidi-Bita|Isaac Mpidi Bita]] 20:21, 16. Nov. 2019 (UTC)
* Bitte Rechtschreibfehler korrigieren.
 
'''Bearbeitet: '''[[Benutzer:Lukas Honerlage|Lukas Honerlage]]
 


= Einleitung =
= Einleitung =
Zeile 46: Zeile 48:


=== Kommunikationsfunktionen in C/C++-Datei ===
=== Kommunikationsfunktionen in C/C++-Datei ===
<gallery class="left" widths="500" heights="300">
<gallery class="left" widths="600" heights="600">
Datei:rs232_H.png
Datei:rs232_H.png


Zeile 55: Zeile 57:


== Datenübertragung vom PC ==
== Datenübertragung vom PC ==
Für die Datenübertragung wurde eine separate Artikel geschrieben:
* '''[[Übertragen des Spurpolynoms]]'''
* '''[[Datenübertragung zwischen PC und dSPACE Karte]]'''


== Empfang und Verarbeitung der Daten auf der dSPACE-Karte ==
== Empfang und Verarbeitung der Daten auf der dSPACE-Karte ==
Zeile 65: Zeile 71:
Datei:ControllDeskUmgebungRXModell.png
Datei:ControllDeskUmgebungRXModell.png
</gallery>
</gallery>
=== Konzeptvorstellung ===


=== Datenempfang ===
=== Datenempfang ===
Zeile 76: Zeile 80:


Der Status geht auf kurz auf Low-Pegel, wenn Daten empfangen werden soll. Damit Daten nicht verloren geht wird dieser Ausgang mit einem Flankendetektor verbunden. Um die Flanken abzufangen wird das Signal parallele mit einer diskretisierten Verzögerung geschaltet. Diese wird mittels einer Unit Delay von Simulink realisiert. Da die Pegeländerung zu schnell ist, wird des weiteren eine Zustandsmaschine bzw. Stateflow-Machine aufgebaut. Dieser hat zum Zweck der Low-Pegel 10 ms lang zu halten für die Weiterverarbeitung.
Der Status geht auf kurz auf Low-Pegel, wenn Daten empfangen werden soll. Damit Daten nicht verloren geht wird dieser Ausgang mit einem Flankendetektor verbunden. Um die Flanken abzufangen wird das Signal parallele mit einer diskretisierten Verzögerung geschaltet. Diese wird mittels einer Unit Delay von Simulink realisiert. Da die Pegeländerung zu schnell ist, wird des weiteren eine Zustandsmaschine bzw. Stateflow-Machine aufgebaut. Dieser hat zum Zweck der Low-Pegel 10 ms lang zu halten für die Weiterverarbeitung.
[[Datei:StateMachine.png|600px]]


=== Datenverarbeitung ===
=== Datenverarbeitung ===
Zeile 97: Zeile 103:


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.
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.
[[Datei:RS-232-Testumgebung.png|600px|right]]


= Testing =
= Testing =
[[Datei:RS-232-Testumgebung.png|800px|right]]
== Testumgebung ==
Für die Kommunikation wurden umfangreiche Tests durchgeführt. Dabei wurde eine Testumgebung aufgebaut mit zwei unterschiedlichen Workstations. Eine WOrkstation wird mit der Kamera des Fahrzeugs verbunden. Das Fahrzeug wird auf der Teststrecke aufgestellt und nimmt ständig Bilder auf. Dieser wird mit einer Workstation 1 via Ethernet verbunden. Auf der Workstation 1 läuft den C/C++-Code und verarbeitet die Kameradaten. Sobald das Spurpolynom ermittels wurde, werden die Koeffizienten des Polynoms an der dSPACE-Karte verschickt. Auf der dSPACE-Karte wurde das Receive-Modell geflasht.  
Für die Kommunikation wurden umfangreiche Tests durchgeführt. Dabei wurde eine Testumgebung aufgebaut mit zwei unterschiedlichen Workstations. Eine WOrkstation wird mit der Kamera des Fahrzeugs verbunden. Das Fahrzeug wird auf der Teststrecke aufgestellt und nimmt ständig Bilder auf. Dieser wird mit einer Workstation 1 via Ethernet verbunden. Auf der Workstation 1 läuft den C/C++-Code und verarbeitet die Kameradaten. Sobald das Spurpolynom ermittels wurde, werden die Koeffizienten des Polynoms an der dSPACE-Karte verschickt. Auf der dSPACE-Karte wurde das Receive-Modell geflasht.  
== Unittstest-Ergebnis ==


Die Visualisierung der Daten, die auf der dSPACE-Karte empfangen übertagen worden sind, erfolgt auf einer zweiten Workstation. Auf dieser läuft ControlDesk, das die Diagnoseschnittstelle ermöglicht. Unten sehen Sie die Darstellung der Ergebnisse. Links ist die Anzeige der Worstation 1 mit der ermittelten Spurparameter. Rechts ist die Anzeige der Diagnoseschnittstelle.       
Die Visualisierung der Daten, die auf der dSPACE-Karte empfangen übertagen worden sind, erfolgt auf einer zweiten Workstation. Auf dieser läuft ControlDesk, das die Diagnoseschnittstelle ermöglicht. Unten sehen Sie die Darstellung der Ergebnisse. Links ist die Anzeige der Worstation 1 mit der ermittelten Spurparameter. Rechts ist die Anzeige der Diagnoseschnittstelle.       
[[Datei:RS-232-Ergebnis.png|1000px]]


Ein Unittest wurden dementsprechend durchgeführt und liegt unter [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Testdokumente/Unittests/ ..\Testdokumente\Unittests]. Dies enthält folgendes:


{| class="wikitable"
! style="font-weight: bold;" | Testfall Nr.
! style="font-weight: bold;" | Aktion
! style="font-weight: bold;" | Eingänge a,b und c
! style="font-weight: bold;" | Reaktion
! style="font-weight: bold;" | Testergebnis
! style="font-weight: bold;" | Testperson
! style="font-weight: bold;" | Datum
|-
| 1
| Sende Daten über RS232
| zufällige Koeffizienten, ermittelt aus der Spur.
| Empfang von Daten: Statusbit wechselt auf 0.
| Bestanden
| [[Benutzer:Yanick-Christian Tchenko|Yanick Christian Tchenko]]
| 03.01.2020
|-
| 2
| Startbyte wird als gesamtes Polynom gesendet.
| 2.86331e9, 2.86331e9, 2.86331e9 (entspricht Startbyte als float)
| 2.86331e9, 2.86331e9, 2.86331e9
| Bestanden
| [[Benutzer:Yanick-Christian Tchenko|Yanick Christian Tchenko]]
| 03.01.2020
|-[http://www.example.com Link-Text]
| 3
| Stoppbyte wird als gesamtes Polynom gesendet.
| 1.79662e8, 1.79662e8, 1.79662e8 (entspricht Stoppbyte als float)
| 1.79662e8, 1.79662e8, 1.79662e8
| Bestanden
| [[Benutzer:Yanick-Christian Tchenko|Yanick Christian Tchenko]]
| 03.01.2020
|-
| 5
| Senden von Nullen
| 0, 0, 0
| 0, 0, 0
| Bestanden
| [[Benutzer:Yanick-Christian Tchenko|Yanick Christian Tchenko]]
| 03.01.2020
|-
|}


[[Datei:RS-232-Ergebnis.png|800px]]
= Zusammenfassung und Ausblick =
Die Kommunikation ist somit erfolgreich. Es könnte die Spurparameter überträgt werden und zur Verfügung gestellt werden. Auf Wunsch des Projektleiters wurde eine Integration auf dem Online-Modell und schließlich auf dem Fahrzeug von mir durchgeführt. Die Integration wurde erfolgreich durchgeführt und wurden aus zeitlichen Grunde nicht mittels Integrations- und Systemtest validiert. Diese befindet sich aus diesem Grund noch im AEP-Branche. Diese Version kann gemergt, sobald diese validiert ist. Für die Nachfolgesemester soll die Validierung gemacht werden. Dieser Arbeit stellt die ersten Entwicklungsschritt für die Fahrzeugkommunikation. Noch zu tun wäre ebenfalls die Einbindung weiteren Kameradaten und auf den Datenfluss achten.


= Zusammenfassung und Ausblick =
----
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]]
 
→ zurück zum Kommunikationsseite: [[Kom - Kommunikation]]

Aktuelle Version vom 21. November 2022, 16:13 Uhr

→ zurück zum Hauptartikel: Praktikum SDE

→ zurück zum Kommunikationsseite: Kom - Kommunikation

Betreuer: Prof. Dr.-Ing Ulrich Schneider

Autor: Isaac Mpidi Bita 20:21, 16. Nov. 2019 (UTC)

Bearbeitet: Lukas Honerlage


Einleitung

Dieser Artikel befasst sich mit dem Fahrzeugskommunikation mittels RS232-Bus. Das Carolo-Cup-Fahrzeug soll wird über den RS232-Bus die Parameter des Spurpolynom an die dSPACE-Karte senden. Der Spurpolynom wird von der Kamera ermittelt und daraus werden A-,B- und C-Parameter des aktuellen Spur ermittelt (Siehe Bildentzerrung und KOS-Transformation). In dieser Artikel geht es hauptsächlich, um die Datenübertragung. via RS232-Bus.

Anforderungen

Ausgangslage und Konzept

Für die Umsetzung der Anforderung wird das System in drei wesentliche Komponenten unterteilt. Dieser sind:

  • Kamera
  • PC
  • dSPACE

Die Kamera kommuniziert mit dem PC über Ethernet-Bus. Der PC wiederum kommuniziert mit der dSPACE Karte. Im PC läuft einen C/C++-Code mit eines Bildverarbeitungsalgorithmus, der als Ausgang die a-, b-, c-Parameter der erkannten Fahrspur. Diese werden an der dSPACE-Karte zur Weiterverarbeitung über RS232-Bus übertragt.

In diesem Artikel wird davon ausgegangen,dass:

  • das Bild bereit verarbeitet wurden und die Spurparameter versandbereit sind
  • ein bereits existierenden RS232-Bibliothek aus der dSPACE-Karte und auf der C/C++-Code vorhanden sind

Vom PC werden jede Parameter in 4 Byte aufgesplittet. Da 3 Parameter versendet werden, wird 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 betrachten ist, dass die Daten im PC als Little-Endian und auf der dSPACE-Karte als Big-Endian gespeichert wird.

RS232-Bus Initialisierung

Initialisierung auf der dSPACE-Karte

dSPACE GmbH stellt eine Simulink-Bibliothek für die serielle Schnittstelle zur Verfügung. Beispiele zur Anwendung von dieser sind in der Kommunikationsordner in ..\Teams\Kom\Demos\DEMO dSPACE Kommunikation vorhanden. Die serielle Kommunikation wird mittels des sogenannten DS1104SER_SETUP initialisiert werden. Dieser muss auch auf der Simulink-Modell enthalten sein. Beim Doppelklick auf dem Block kommt die relevanten Einstellungen des Busses und können dementsprechend eingestellt werden. Für die Fahrzeugskommunikation wird 115200 als Baudrate genommen werden. Die Kommunikation erfolgt erstmal ohne Handshake.

Kommunikationsfunktionen in C/C++-Datei

Programmierung

Datenübertragung vom PC

Für die Datenübertragung wurde eine separate Artikel geschrieben:

Empfang und Verarbeitung der Daten auf der dSPACE-Karte

PAP des Kameraprogramms mit KOS-Transformatin
PAP des Kameraprogramms mit KOS-Transformatin


Für den Datenempfang wurde einen Simulink-Modell erstellt. Dies liegt unter ..\Teams\Kom\dSPACE_RX_Test (Aktueller Kommunikationsansatzt). Desweiteren wurden einen ControlDesk-Umgebung für den Kommunikationsansatz erstellt und liegt unter ..\Teams\Kom\dSPACE_RX_Test (Aktueller Kommunikationsansatzt)\ControlDesk_Experiment\Rx_Tester.

Datenempfang

Für den Empfang der Daten auf der dSPACE-Seite wird ein Simulink-Modell erstellt. Diese hat den Zweck die Daten zu empfangen und zu interpretieren. Für den Empfang wird die DS1104SER_RX Block der RTI-Bibliothek verwendet. Dieser liefert drei Ausgänge:

  • Data
  • Status
  • NumRx

Der Status geht auf kurz auf Low-Pegel, wenn Daten empfangen werden soll. Damit Daten nicht verloren geht wird dieser Ausgang mit einem Flankendetektor verbunden. Um die Flanken abzufangen wird das Signal parallele mit einer diskretisierten Verzögerung geschaltet. Diese wird mittels einer Unit Delay von Simulink realisiert. Da die Pegeländerung zu schnell ist, wird des weiteren eine Zustandsmaschine bzw. Stateflow-Machine aufgebaut. Dieser hat zum Zweck der Low-Pegel 10 ms lang zu halten für die Weiterverarbeitung.

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.

Testing

Testumgebung

Für die Kommunikation wurden umfangreiche Tests durchgeführt. Dabei wurde eine Testumgebung aufgebaut mit zwei unterschiedlichen Workstations. Eine WOrkstation wird mit der Kamera des Fahrzeugs verbunden. Das Fahrzeug wird auf der Teststrecke aufgestellt und nimmt ständig Bilder auf. Dieser wird mit einer Workstation 1 via Ethernet verbunden. Auf der Workstation 1 läuft den C/C++-Code und verarbeitet die Kameradaten. Sobald das Spurpolynom ermittels wurde, werden die Koeffizienten des Polynoms an der dSPACE-Karte verschickt. Auf der dSPACE-Karte wurde das Receive-Modell geflasht.

Unittstest-Ergebnis

Die Visualisierung der Daten, die auf der dSPACE-Karte empfangen übertagen worden sind, erfolgt auf einer zweiten Workstation. Auf dieser läuft ControlDesk, das die Diagnoseschnittstelle ermöglicht. Unten sehen Sie die Darstellung der Ergebnisse. Links ist die Anzeige der Worstation 1 mit der ermittelten Spurparameter. Rechts ist die Anzeige der Diagnoseschnittstelle.

Ein Unittest wurden dementsprechend durchgeführt und liegt unter ..\Testdokumente\Unittests. Dies enthält folgendes:

Testfall Nr. Aktion Eingänge a,b und c Reaktion Testergebnis Testperson Datum
1 Sende Daten über RS232 zufällige Koeffizienten, ermittelt aus der Spur. Empfang von Daten: Statusbit wechselt auf 0. Bestanden Yanick Christian Tchenko 03.01.2020
2 Startbyte wird als gesamtes Polynom gesendet. 2.86331e9, 2.86331e9, 2.86331e9 (entspricht Startbyte als float) 2.86331e9, 2.86331e9, 2.86331e9 Bestanden Yanick Christian Tchenko 03.01.2020
3 Stoppbyte wird als gesamtes Polynom gesendet. 1.79662e8, 1.79662e8, 1.79662e8 (entspricht Stoppbyte als float) 1.79662e8, 1.79662e8, 1.79662e8 Bestanden Yanick Christian Tchenko 03.01.2020
5 Senden von Nullen 0, 0, 0 0, 0, 0 Bestanden Yanick Christian Tchenko 03.01.2020

Zusammenfassung und Ausblick

Die Kommunikation ist somit erfolgreich. Es könnte die Spurparameter überträgt werden und zur Verfügung gestellt werden. Auf Wunsch des Projektleiters wurde eine Integration auf dem Online-Modell und schließlich auf dem Fahrzeug von mir durchgeführt. Die Integration wurde erfolgreich durchgeführt und wurden aus zeitlichen Grunde nicht mittels Integrations- und Systemtest validiert. Diese befindet sich aus diesem Grund noch im AEP-Branche. Diese Version kann gemergt, sobald diese validiert ist. Für die Nachfolgesemester soll die Validierung gemacht werden. Dieser Arbeit stellt die ersten Entwicklungsschritt für die Fahrzeugkommunikation. Noch zu tun wäre ebenfalls die Einbindung weiteren Kameradaten und auf den Datenfluss achten.


→ zurück zum Hauptartikel: Praktikum SDE

→ zurück zum Kommunikationsseite: Kom - Kommunikation