AlphaBot: Messdatenverarbeitung mit MATLAB: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 32: Zeile 32:
# Wurde auf <code>magic numbers</code> verzichtet?
# Wurde auf <code>magic numbers</code> verzichtet?
# Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten?
# Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten?
 
-->
== Vorbereitung ==
== Vorbereitung ==
Fürhren Sie als Vorbereitung den [https://www.mathworks.com/learn/tutorials/matlab-onramp.html MATLAB<sup>®</sup> Onramp Kurs] durch.
Fürhren Sie als Vorbereitung den [https://www.mathworks.com/learn/tutorials/matlab-onramp.html MATLAB<sup>®</sup> Onramp Kurs] durch.
Zeile 40: Zeile 40:


== Versuchsdurchführung ==
== Versuchsdurchführung ==
=== Aufgabe 2.1: MATLAB<sup>®</sup> als serieller Monitor ===
=== Aufgabe 2.1: Gleitendes Mittelwertfilter ===
# Nutzen Sie MATLAB<sup>®</sup>, um die Messdaten direkt (live) darzustellen.
# Planen Sie als ersten Schritt das MATLAB<sup>®</sup>-Programm als PAP.
# Greifen Sie hierzu auf die serielle Schnittstelle zu während der Arduino Daten sendet.
# Nutzen Sie das Demo <code>DemoDebug2MATLAB</code> im [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoDebugTxt2MATLAB SVN-Verzeichnis].
 
'''Nützlich MATLAB<sup>®</sup>-Befehle:''' <code>fopen, feof, fgetl, strfind, isempty, plot, xlabel, ylabel, legend</code>
 
'''Arbeitsergebnisse''' in SVN: <code>zeigeArduinoDaten.pap, zeigeArduinoDaten.m</code>
 
=== Aufgabe 2.1: Statische Messunsicherheit ===
# Lesen Sie die Messwerte des Ultraschall-Sensors auf statische Ziele im gesamten Messbereich aus (10 cm, 20 cm, 50 cm, 1 m, 2 m, 3 m, 4 m). Schreiben Sie hierzu ein Arduino-Programm <code>statische Messunsicherheit.ino</code>. Jeder Messsatz sollte >100 Messwerte umfassen.
# Nutzen Sie das Programm <code>Putty</code>, um die Daten der seriellen Schnittstelle in der ASCII-Datei <code>Ultraschallmessung.txt</code> zu speichern.
# Schreiben Sie einmalig als Header die Bezeichnung der Messwerte Zeit in ms und Strecke in cm in die Textdatei.
# Laden und visualisieren Sie die Messdaten in Ultraschallmessung.txt mit MATLAB®.
# Stellen Sie die Messdaten in einem Diagramm in cm über der Zeit dar.
# Berechnen Sie Mittelwert und Standardabweichung und stellen Sie diese dar,
# Beschriften Sie die Graphen.
 
'''Nützlich MATLAB®-Befehle:''' <code>mean, std, xline</code>
 
'''Arbeitsergebnisse''' in SVN: <code>statische Messunsicherheit.ino, Ultraschallmessung.txt, zeigeUltraschallMessung.m</code>
 
=== Aufgabe 11.3: Gleitendes Mittelwertfilter ===
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.
# Schreiben Sie die Funktion <code>GleitendesMittelwertFilter()</code>, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
# Schreiben Sie die Funktion <code>GleitendesMittelwertFilter.m</code>, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework <code>zeigeZyklischUltraschallMessung.m</code> und <code>UltraschallMessung.mat</code> Aus den Aufgaben 1.3 und 1.4.
# Visualisieren Sie Messwerte und Filterergebnis im seriellen Plotter.
# Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
# Wählen Sie k anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
# Wählen Sie k anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.


'''Arbeitsergebnisse''' in SVN: <code>testeGleitendesMittelwert.ino</code>
'''Arbeitsergebnisse''' in SVN: <code>testeGleitendesMittelwert.m</code>


'''Hinweis:'''
'''Hinweis:'''
Zeile 87: Zeile 64:
</div>
</div>


=== Aufgabe 11.4: Rekursives Tiefpassfilter ===
=== Aufgabe 2.2: Rekursives Tiefpassfilter ===
Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.
Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.
# Schreiben Sie die Funktion <code>TiefpassFilter()</code>, welches die Eingangswerte zyklisch filtert. Hier bei wird der Tiefpass berechnet.
# Schreiben Sie die Funktion <code>TiefpassFilter.m</code>, welches die Eingangswerte zyklisch filtert. Hierbei wird der Tiefpass berechnet.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework <code>zeigeZyklischUltraschallMessung.m</code> und <code>UltraschallMessung.mat</code> Aus den Aufgaben 1.3 und 1.4.
# Visualisieren Sie Messwerte und Filterergebnis im seriellen Plotter.
# Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
# Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
# Wählen Sie <math>\alpha</math> anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.
# Wählen Sie <math>\alpha</math> anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.


'''Arbeitsergebnisse''' in SVN: <code>testeTiefpassFilter.ino</code>
'''Arbeitsergebnisse''' in SVN: <code>testeTiefpassFilter.m</code>


'''Hinweis:'''
'''Hinweis:'''
Zeile 105: Zeile 82:
</div>
</div>


=== Aufgabe 11.5: Dynamische Messunsicherheit ===
=== Aufgabe 2.3: Filtervergleich ===
* Zeigen Sie das ungefilterte und das Tiefpass-gefilterte Signal in MATLAB® an. Messen Sie auf ein Ziel im gesamten Messbereich (2 cm - 4 m - 2 cm).
# Vergleichen Sie die Ergebnisse dies Tiefpasses mit denen des gleitenden Mittelwertfilters.
* Wurde das Signalrauschen geglättet?
# Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB<sup>®</sup> in einem Plot vergleichend an.  
* Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
# Beschriften Sie die Achsen und nutzen Sie eine Legende.
* Wurden die Regeln für den Umgang mit SVN eingehalten?
# Beantworten Sie die nachfolgenden Fragen
* Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten?
## Wurde das Signalrauschen geglättet?
* Wurde nachhaltig dokumentiert?
## Ist das gefilterte Signal verzögert?
* Haben die Programme einen Header?
## Welchen Einfluss haben die Filterparameter?
* Wurden der Quelltext umfangreich kommentiert?
## Wie verhalten sich die gefilterten Signal bei Ausreißern?
* Wurden die PAPs erstellt und abgelegt? Passen die PAPs 100% zum Programm?
 
 
=== Aufgabe 2.4: Nachhaltige Doku ===
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein.
* Halten Sie die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]] und die [[Medium:Programmierrichtlinien_für_Matlab.pdf|Programmierrichtlinien für MATLAB<sup>®</sup>]] ein.
* Versehen Sie jedes Programm mit einem Header ([[Header Beispiel für MATLAB]], [[Header Beispiel für C]]).
* Kommentiere Sie den Quelltext umfangreich.


'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>, <code>USTiefpassFilter.ino</code>, <code>Ergebnisbewertung.pdf</code>
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>


== Tutorials ==
== Tutorials ==
Zeile 130: Zeile 114:


== Literatur ==
== Literatur ==
#
# Brühlmann, T.: ''Arduino Praxiseinstieg''. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=125816&query_desc=kw%2Cwrdl%3A%20arduino HSHL-Bib], [https://learning.oreilly.com/library/view/arduino-praxiseinstieg/9783747500569/ O'Reilly-URL]
# Brühlmann, T.: ''Arduino Praxiseinstieg''. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=125816&query_desc=kw%2Cwrdl%3A%20arduino HSHL-Bib], [https://learning.oreilly.com/library/view/arduino-praxiseinstieg/9783747500569/ O'Reilly-URL]
# Brühlmann, T.: ''Sensoren im Einsatz mit Arduino''. Frechen: mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=130719&query_desc=kw%2Cwrdl%3A%20Br%C3%BChlmann HSHL-Bib], [https://learning.oreilly.com/library/view/sensoren-im-einsatz/9783958451520/?ar O'Reilly]
# Brühlmann, T.: ''Sensoren im Einsatz mit Arduino''. Frechen: mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=130719&query_desc=kw%2Cwrdl%3A%20Br%C3%BChlmann HSHL-Bib], [https://learning.oreilly.com/library/view/sensoren-im-einsatz/9783958451520/?ar O'Reilly]

Version vom 20. März 2023, 12:56 Uhr

Abb. 1: Lernset - Einsteiger Kit für Arduino

Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester
Aufgabenstatus: In Bearbeitung

Inhalt

  • Einarbeitung in MATLAB®
  • Statische und dynamische Messung mit dem Ultraschallsensor
  • Programmierung und Anwendung eines gleitenden Mittelwertfilters

Lernziele

Nach Durchführung dieser Lektion

  • können Sie Debug-Daten speichern und via MATLAB® visualisieren.
  • können Sie direkt MATLAB® als seriellen Monitor nutzen.
  • können Sie ein Signal differenzieren und kennen die Gefahren dieser Berechnung.
  • kennen Sie die Funktion und Kennwerte des Ultraschall-Sensors.
  • können Sie Entfernungen mit dem Ultraschall-Sensor messen.
  • können Sie Software mit einem PAP planen.

Vorbereitung

Fürhren Sie als Vorbereitung den MATLAB® Onramp Kurs durch.


Arbeitsergebnis in SVN: Kurszertifikat

Versuchsdurchführung

Aufgabe 2.1: Gleitendes Mittelwertfilter

Ein gleitendes Mittlwertfilter bildet einen Mittelwert über k Messwerte mittels FIFO.

  1. Schreiben Sie die Funktion GleitendesMittelwertFilter.m, welches die Eingangswerte zyklisch filtert. Hier bei wird der Mittelwert über die letzten k Messwerte gebildet.
  2. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework zeigeZyklischUltraschallMessung.m und UltraschallMessung.mat Aus den Aufgaben 1.3 und 1.4.
  3. Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
  4. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
  5. Wählen Sie k anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.

Arbeitsergebnisse in SVN: testeGleitendesMittelwert.m

Hinweis:

  • Nutzen Sie das FIFO aus Aufgabe 6.4.
  • Die Formel für das gleitende Mittelwertfilter lautet: für k Messwerte

Eine Einführung zu rekursiven Filtern finden Sie in folgendem Video.

  • Gleitendes Mittelwertfilter: 19 m 52 s
  • Tiefpassfilter: 29 m


Demo: SVN: DemoGleitenderMittelwert

Aufgabe 2.2: Rekursives Tiefpassfilter

Ein rekursives Filter kann Messwerte in Echtzeit während der Laufzeit filtern. Nutzen Sie ein Tiefpassfilter, um die Messwerte zu filtern.

  1. Schreiben Sie die Funktion TiefpassFilter.m, welches die Eingangswerte zyklisch filtert. Hierbei wird der Tiefpass berechnet.
  2. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit statischen Zielen mit Ihrem Framework zeigeZyklischUltraschallMessung.m und UltraschallMessung.mat Aus den Aufgaben 1.3 und 1.4.
  3. Visualisieren Sie Messwerte und Filterergebnis in einem Plot mit Achsenbeschriftung und Legende.
  4. Testen Sie Ihre Funktion mit Ultraschallmesswerten mit dynamischen Zielen.
  5. Wählen Sie anhand der Messwerte und diskutieren Sie Ihre Wahl mit Prof. Schneider.

Arbeitsergebnisse in SVN: testeTiefpassFilter.m

Hinweis:

  • Die Formel für das Tiefpassfilter lautet: für den aktuellen Messwert .
  • ist hierbei ein Filterparameter .

Aufgabe 2.3: Filtervergleich

  1. Vergleichen Sie die Ergebnisse dies Tiefpasses mit denen des gleitenden Mittelwertfilters.
  2. Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB® in einem Plot vergleichend an.
  3. Beschriften Sie die Achsen und nutzen Sie eine Legende.
  4. Beantworten Sie die nachfolgenden Fragen
    1. Wurde das Signalrauschen geglättet?
    2. Ist das gefilterte Signal verzögert?
    3. Welchen Einfluss haben die Filterparameter?
    4. Wie verhalten sich die gefilterten Signal bei Ausreißern?


Aufgabe 2.4: Nachhaltige Doku

Sichern Sie alle Ergebnisse mit beschreibendem Text (message) in SVN.

Arbeitsergebnis in SVN: SVN Log

Tutorials

Demos

Literatur

  1. Brühlmann, T.: Arduino Praxiseinstieg. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: HSHL-Bib, O'Reilly-URL
  2. Brühlmann, T.: Sensoren im Einsatz mit Arduino. Frechen: mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: HSHL-Bib, O'Reilly
  3. Snieders, R.: ARDUINO lernen. Nordhorn: 8. Auflage 2022. URL: https://funduino.de/vorwort
  4. Schneider, U.: Programmierrichtlinie für für die Erstellung von Software in C. Lippstadt: 1. Auflage 2022. PDF-Dokument (212 kb)



→ zurück zum Hauptartikel: Informatik Praktikum 2