AlphaBot: Messdatenverarbeitung mit MATLAB: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Datei:Lernset - Einsteiger Kit für Arduino.jpg|thumb|rigth|450px|Abb. 1: Lernset - Einsteiger Kit für Arduino]]
[[Datei:TesteFilterVergleich.jpg|thumb|rigth|450px|Abb. 1: Vergleich rauschunterdrückender Filter]]
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Modul:''' Praxismodul I<br>
'''Modul:''' Praxismodul I<br>
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
'''Aufgabenstatus:''' In Bearbeitung


== Inhalt ==
== Inhalt ==
* Einarbeitung in MATLAB<sup>®</sup>
* Einarbeitung in MATLAB<sup>®</sup>
* Statische und dynamische Messung mit dem Ultraschallsensor
* Programmierung und Anwendung eines gleitenden Mittelwertfilters
* Programmierung und Anwendung eines gleitenden Mittelwertfilters
* Programmierung und Anwendung eines rekursiven Tiefpassfilters
* Auslegung von Filterparameter
* Anwendung der Filter auf eine Ultraschallmessung
* Vergleich der Filter anhand technischer Kriterien


== Lernziele==
== Lernziele==
Nach Durchführung dieser Lektion
Nach Durchführung dieser Lektion
* können Sie Debug-Daten speichern und via MATLAB® visualisieren.
* können Sie reale Messwerte speichern und via MATLAB<sup>®</sup> zyklisch visualisieren.
* können Sie direkt MATLAB® als seriellen Monitor nutzen.
* haben Sie ein gleitendes Mittelwertfilter programmiert.
* können Sie ein Signal differenzieren und kennen die Gefahren dieser Berechnung.
* haben Sie ein rekursives rekursiven Tiefpassfilter programmiert.
* kennen Sie die Funktion und Kennwerte des Ultraschall-Sensors.
* können Sie die Filter parametrieren.
* können Sie Entfernungen mit dem Ultraschall-Sensor messen.
* haben Sie die Filter zyklisch auf Ultraschallmesswerte angewendet und das Filterverhalten analysiert.
* können Sie Software mit einem PAP planen.
* können Sie eine Funktion in MATLAB<sup>®</sup> programmieren und aufrufen.
<!--
 
== Lernzielkontrolle ==
== Lernzielkontrolle ==
# Welchen Messbereich hat Ihr Ultraschallsensor?
# Wozu werden rekursive Filter benötigt?
# Welche Auflösung (t, s) hat Ihr Sensor?
# Nennen Sie die Formel für ein gl. Mittelwertfilter.
# Welche Empfindlichkeit hat Ihr Sensor?
# Welche Parameter hat ein gl. Mittelwertfilter? Was bedeuten die Parameter?
# Welche Messunsicherheit hat Ihr Sensor bei den Entfernungen 10 cm, 20 cm, 50 cm, 1 m, 2 m, 3 m und 4 m.
# Nennen Sie die rekursive Formel für ein Tiefpassfilter.
# Was ist ein gleitendes Mittelwertfilter? Wie wird es berechnet?
# Welche Parameter hat ein Tiefpassfilter? Was bedeuten die Parameter?
# Was ist ein rekursives Tiefpassfilter? Wie wird es berechnet?
# Vergleichen Sie die zwei rekursiven Filter. Nennen Sie Vor- und Nachteile.
# Wurde der Quelltext durch Header und Kommentare aufgewertet?
# Wurde der Quelltext durch Header und Kommentare aufgewertet?
# Wurden jedes Programm mittels PAP geplant?
# Wurde auf <code>magic numbers</code> verzichtet?
# Wurde auf <code>magic numbers</code> verzichtet?
# Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten?
# Wurde die 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ühren Sie als Vorbereitung den [https://www.mathworks.com/learn/tutorials/matlab-onramp.html MATLAB<sup>®</sup> Onramp Kurs] durch.




'''Arbeitsergebnis''' in SVN: Kurszertifikat<code>
'''Arbeitsergebnis''' in SVN: MATLAB<sup>®</sup> Kurszertifikat


== Versuchsdurchführung ==
== Versuchsdurchführung ==
Zeile 48: Zeile 48:
# 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.m</code>
'''Nützliche Befehle''': <code>plot, xlabel, ylabel, legend, persistent, isempty, isnan, function</code>
 
'''Arbeitsergebnisse''' in SVN: <code>GleitendesMittelwertFilter.m, testeGleitendesMittelwertFilter.m</code>


'''Hinweis:'''
'''Hinweise:'''
* Nutzen Sie das FIFO aus Aufgabe 6.4.
* Nutzen Sie ein Array als FIFO.
* Die Formel für das gleitende Mittelwertfilter lautet: <math>\bar{x}(k)=\frac{x(1)+x(2)+\ldots+x(k)}{k}</math> für k Messwerte
* Die Formel für das gleitende Mittelwertfilter lautet: <math>\bar{x}_{GM}(k)=\frac{x(1)+x(2)+\ldots+x(k)}{k}</math> für k Messwerte
<div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible mw-collapsed">


Zeile 62: Zeile 64:


'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoGleitenderMittelwert SVN: DemoGleitenderMittelwert]  
'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoGleitenderMittelwert SVN: DemoGleitenderMittelwert]  
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S.&thinsp;11&thinsp;ff.].
</div>
</div>


Zeile 72: Zeile 76:
# 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.m</code>
'''Arbeitsergebnisse''' in SVN: <code>TiefpassFilter.m, testeTiefpassFilter.m</code>


'''Hinweis:'''
'''Hinweis:'''
* Die Formel für das Tiefpassfilter lautet: <math>\bar{x}(k)=\alpha \cdot \bar{x}(k-1)+ (1-\alpha)\cdot x(k)</math> für den aktuellen Messwert <math>x(k)</math>.
* Die Formel für das Tiefpassfilter lautet: <math>\bar{x}_{TP}(k)=\alpha \cdot \bar{x}(k-1)+ (1-\alpha)\cdot x(k)</math> für den aktuellen Messwert <math>x(k)</math>.
* <math>\alpha</math> ist hierbei ein Filterparameter <math>0<\alpha<1</math>.
* <math>\alpha</math> ist hierbei ein Filterparameter <math>0<\alpha<1</math>.
<div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible mw-collapsed">


'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]
'''Demo:''' [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoTiefpassFilter/DemoTiefpassFilter.ino SVN: DemoTiefpassFilter.ino]
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S.&thinsp;11&thinsp;ff.19].
</div>
</div>


=== Aufgabe 2.3: Filtervergleich ===
=== Aufgabe 2.3: Filtervergleich ===
# Vergleichen Sie die Ergebnisse dies Tiefpasses mit denen des gleitenden Mittelwertfilters.
# Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters.
# Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB<sup>®</sup> in einem Plot vergleichend an.  
# Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB<sup>®</sup> in einem Plot vergleichend an (vgl. Abb.1).  
# Beschriften Sie die Achsen und nutzen Sie eine Legende.
# Beschriften Sie die Achsen und nutzen Sie eine Legende.
# Beantworten Sie die nachfolgenden Fragen
## Wurde das Signalrauschen geglättet?
## Ist das gefilterte Signal verzögert?
## Welchen Einfluss haben die Filterparameter?
## Wie verhalten sich die gefilterten Signal bei Ausreißern?


'''Lernzielkontrollfragen:'''
# Wurde das Signalrauschen geglättet?
# Ist das gefilterte Signal verzögert?
# Welchen Einfluss haben die Filterparameter?
# Wie verhalten sich die gefilterten Signal bei Ausreißern?
'''Arbeitsergebnisse''' in SVN: <code>testeFilterVergleich.m</code>
<div class="mw-collapsible mw-collapsed">
Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S.&thinsp;27&thinsp;ff.].
</div>


=== Aufgabe 2.4: Nachhaltige Doku ===
=== Aufgabe 2.4: Nachhaltige Doku ===
Zeile 114: Zeile 127:


== Literatur ==
== Literatur ==
#  
# Kim, P.: Kalman-Filter für Einsteiger: mit MATLAB Beispielen. CreateSpace Independent Publishing: 2016. ISBN-13: 978-1502723789
# 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]
# Snieders, R.: ''ARDUINO lernen''. Nordhorn: 8. Auflage 2022. URL: [https://funduino.de/vorwort https://funduino.de/vorwort]
# Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt: 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212&thinsp;kb)]]
# Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt: 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212&thinsp;kb)]]




----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe23|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|9]] [[AlphaBot: Autonomes Einparken|10]] [[AlphaBot: Programmier-Challenge II SoSe23|11]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]

Aktuelle Version vom 9. April 2024, 08:49 Uhr

Abb. 1: Vergleich rauschunterdrückender Filter

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

Inhalt

  • Einarbeitung in MATLAB®
  • Programmierung und Anwendung eines gleitenden Mittelwertfilters
  • Programmierung und Anwendung eines rekursiven Tiefpassfilters
  • Auslegung von Filterparameter
  • Anwendung der Filter auf eine Ultraschallmessung
  • Vergleich der Filter anhand technischer Kriterien

Lernziele

Nach Durchführung dieser Lektion

  • können Sie reale Messwerte speichern und via MATLAB® zyklisch visualisieren.
  • haben Sie ein gleitendes Mittelwertfilter programmiert.
  • haben Sie ein rekursives rekursiven Tiefpassfilter programmiert.
  • können Sie die Filter parametrieren.
  • haben Sie die Filter zyklisch auf Ultraschallmesswerte angewendet und das Filterverhalten analysiert.
  • können Sie eine Funktion in MATLAB® programmieren und aufrufen.

Lernzielkontrolle

  1. Wozu werden rekursive Filter benötigt?
  2. Nennen Sie die Formel für ein gl. Mittelwertfilter.
  3. Welche Parameter hat ein gl. Mittelwertfilter? Was bedeuten die Parameter?
  4. Nennen Sie die rekursive Formel für ein Tiefpassfilter.
  5. Welche Parameter hat ein Tiefpassfilter? Was bedeuten die Parameter?
  6. Vergleichen Sie die zwei rekursiven Filter. Nennen Sie Vor- und Nachteile.
  7. Wurde der Quelltext durch Header und Kommentare aufgewertet?
  8. Wurde auf magic numbers verzichtet?
  9. Wurde die Programmierrichtlinie eingehalten?

Vorbereitung

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


Arbeitsergebnis in SVN: MATLAB® 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.

Nützliche Befehle: plot, xlabel, ylabel, legend, persistent, isempty, isnan, function

Arbeitsergebnisse in SVN: GleitendesMittelwertFilter.m, testeGleitendesMittelwertFilter.m

Hinweise:

  • Nutzen Sie ein Array als FIFO.
  • 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

Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 11 ff.].

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: TiefpassFilter.m, testeTiefpassFilter.m

Hinweis:

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

Demo: SVN: DemoTiefpassFilter.ino

Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 11 ff.19].

Aufgabe 2.3: Filtervergleich

  1. Vergleichen Sie die Ergebnisse des Tiefpasses mit denen des gleitenden Mittelwertfilters.
  2. Zeigen Sie das ungefilterte und die gefilterten Signal in MATLAB® in einem Plot vergleichend an (vgl. Abb.1).
  3. Beschriften Sie die Achsen und nutzen Sie eine Legende.

Lernzielkontrollfragen:

  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?

Arbeitsergebnisse in SVN: testeFilterVergleich.m

Eine ausführliche Beschreibung mit Musterlösung finden Sie in [1, S. 27 ff.].

Aufgabe 2.4: Nachhaltige Doku

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

Arbeitsergebnis in SVN: SVN Log

Tutorials

Demos

Literatur

  1. Kim, P.: Kalman-Filter für Einsteiger: mit MATLAB Beispielen. CreateSpace Independent Publishing: 2016. ISBN-13: 978-1502723789
  2. Schneider, U.: Programmierrichtlinie für für die Erstellung von Software in C. Lippstadt: 1. Auflage 2022. PDF-Dokument (212 kb)



→ Termine 1 2 3 4 5 6 7 8 9 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2