Malender Roboter mit Arduino: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(40 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Autoren:'''  Stefan Arndt<br/>
[[Datei:Optimized_malroboter.gif|441px|mini|Abbildung 1: Arduino Engineering Kit - Malender Roboter - Simulation in 24-facher Geschwindigkeit (Laufzeit: 9min) - Mehr zu den Anzeigelementen im Kapitel [[Malender_Roboter_mit_Arduino#Simulationsanzeige|Simulationsanzeige]] ]]
'''Autoren:'''  [[Benutzer:Stefan_Arndt| Stefan Arndt]]<br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]<br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]<br/>
'''Art:''' PA<br>
'''Art:''' PA<br>
'''Projektlaufzeit:'''  
'''Projektlaufzeit:'''  
[[Datei:DR.jpg|mini|400px|Abb. 1: Arduino Engineering Kit - Malender Roboter]]




Zeile 14: Zeile 14:


== Verwendete Software ==
== Verwendete Software ==
# MATLAB und Simulink R2021a (exportierte Modelle für R2019a liegen dem Projekt bei)
# MATLAB und Simulink R2021a (exportierte Modelle für R2020b liegen dem Projekt bei)
# Add-on: [https://de.mathworks.com/matlabcentral/fileexchange/66569-arduino_engineering_kit_project_files Arduino_Engineering_Kit_Project_Files]
# Add-on: MATLAB Support Package for Arduino Hardware
# Add-on: Simulink Support Package for Arduino Hardware


== Aufgabenstellung ==
== Aufgabenstellung ==
Zeile 26: Zeile 29:
# Dokumentation nach wissenschaftlichem Stand
# Dokumentation nach wissenschaftlichem Stand
# Funktionsnachweis als YouTube-Video
# Funktionsnachweis als YouTube-Video
== Anforderung ==
* Wissenschaftliche Vorgehensweise (Projektplan, etc.)
* Wöchentliche Fortschrittsberichte (informativ)
* Projektvorstellung im Wiki
* Machen Sie ein tolles Videos, welches die Funktion visualisiert.


=== Bewertung des Bausatzes ===
=== Bewertung des Bausatzes ===
Der Hardwareaufbau konnte mithilfe des Anleitungsvideos innherlab von vier Stunden aufgebaut werden. In den Versuchen zeigte sich die Hardware als etwas anfällig. Die Konstruktion, die für die Befestigung der Stifte notwendig ist, fiel öfters auseinander und musste neu fixiert werden. Hier können die Elemente mit z.B. Heißkleber fixiert werden. Die Monofilament Trageschnur des Roboters ist im Umgang aufgrund ihrer Steifigkeit schwer. Diese wurde durch eine geflochtene Angelschnur ersetzt.


=== Identifikation der Regelstrecke ===
=== Identifikation der Regelstrecke ===
[[Datei:Regelkreis-1.png|none|500px|thumb|Bild 1: Regelstrecke des Gleichstrommotors]]
[[Datei:Regelkreis-1.png|none|500px|thumb|Abbildung 2: Regelstrecke des Gleichstrommotors]]
In Abbildung 1 ist der Regelkreis für einen Gleichstrommotor des Malroboters dargestellt. Die Regelgröße ist die Geschwindigkeit des Motors. Die Geschwindigkeit wird über den Inkrementalgeber diskret gemessen. Die berechnete Regeldifferenz wird von einem PI-Regler verarbeitet, der als Stellgröße den PWM-Tastgrad an die Steuerung des Gleichstrommotors (Regelstrecke) übergibt. Die Steuerung auf dem "Arduino Motor Shield" steuert die notwendige H-Brücke an, um den Motor mit dem gewünschten Tastgrad anzutreiben.
In Abbildung 2 ist der Regelkreis für einen Gleichstrommotor des Malroboters dargestellt. Die Regelgröße ist die Geschwindigkeit des Motors. Die Geschwindigkeit wird über den Inkrementalgeber diskret gemessen. Die berechnete Regeldifferenz wird von einem PI-Regler verarbeitet, der als Stellgröße den PWM-Tastgrad an die Steuerung des Gleichstrommotors (Regelstrecke) übergibt. Die Steuerung auf dem "Arduino Motor Shield" steuert die notwendige H-Brücke an, um den Motor mit dem gewünschten Tastgrad anzutreiben.
[[Datei:Motor_kennlinie.png|none|500px|thumb|Bild 2: Motorkennlinie]]
[[Datei:Motor_kennlinie.png|none|500px|thumb|Abbildung 3: Motorkennlinie]]
Um das System zu analysieren, wird die Geschwindigkeit gemessen. Als Eingabe dient dabei der Tastgrad in Schritten von 5%. Nachdem ein Tastgrad eingestellt wurde, werden 2 Sekunden gewartet und die Geschwindigkeit gemessen. Diese Messung wurde fünf mal wiederholt und der Durchschnitt gebildet. Abbildung 2 zeigt die resultierende Kennlinie. Diese Motorkennlinie wurde im unbelasteten Zustand gemessen.
Um das System zu analysieren, wird die Geschwindigkeit gemessen. Als Eingabe dient dabei der Tastgrad in Schritten von 5%. Nachdem ein Tastgrad eingestellt wurde, werden 2 Sekunden gewartet und die Geschwindigkeit gemessen. Diese Messung wurde fünf mal wiederholt und der Durchschnitt gebildet. Abbildung 3 zeigt die resultierende Kennlinie. Diese Motorkennlinie wurde im unbelasteten Zustand gemessen.


=== Aufbau des Systems ===
=== Aufbau des Systems ===
[[Datei:Malroboter_pdf-1.png|none|500px|thumb|Bild 3: Darstellung des Malroboters]]
[[Datei:Malroboter_pdf-1.png|none|500px|thumb|Abbildung 4: Darstellung des Malroboters]]
[[Datei:Aufbau-malroboter.jpg|none|200px|thumb|Bild 4: Aufbau der Hardware am Whiteboard]]
[[Datei:Aufbau-malroboter.jpg|none|200px|thumb|Abbildung 5: Aufbau der Hardware am Whiteboard]]  
Die Komponenten sind in der Abbildung 3 dargstellt. Ein Aufbau der Hardware mit Whiteboard findet sich im Bild 4 vor.
Die Komponenten sind in der Abb. 4 dargstellt. Ein Aufbau der Hardware mit Whiteboard findet sich im Abb. 5 vor. Der Aufbau wurde mithilfe des [https://player.vimeo.com/video/385223137 Anleitungsvideos] erstellt.
Die Basis dieses Projekts bildet das Arduino-Board "MKR1000". Mit dem dazugehörigen "Arduino Motor Shield", lassen sich die zwei Gleichstrommotoren ansteuern. Diese besitzen einen integrierten Inkrementalgeber mit einer Auflösungen von <math>1204,44 \frac{Inkremente}{Umdrehung}</math>. Die Versorgungsenergie liefert ein Lithium-Polymer-Akkumulator mit einer Ladungsträgerkapazität von 800\,mAh. Der Malroboter ist zudem mit zwei Whiteboard-Stiften und einem Servomotor ausgestattet, mithilfe dessen der Roboter einen roten oder schwarzen Stift an die Whiteboard-Oberfläche drückt. Die Grundkonstruktion besteht aus 3D-gedruckten Bauteilen, die durch Schraubverbindungen ein festes Konstrukt ergeben. Die Schnur wird um die Welle des Elektromotors gewickelt und an der Grundkonstruktion festgebunden, so dass sich eine Schlaufe bildet. Die beiden Schlaufen werden um zwei starre Rollen gelegt, die am Whiteboard befestigt sind. Durch das Ansteuern der Motoren zieht oder senkt sicht der Roboter in eine Richtung. Mit seinen zwei Freiheitsgraden kann er somit jeden Punkt in einer vorgegeben Fläche ansteuern.
Die Basis dieses Projekts bildet das Arduino-Board "MKR1000". Mit dem dazugehörigen "Arduino Motor Shield", lassen sich die zwei Gleichstrommotoren ansteuern. Diese besitzen einen integrierten Inkrementalgeber mit einer Auflösungen von <math>1204,44 \frac{Inkremente}{Umdrehung}</math>. Die Versorgungsenergie liefert ein Lithium-Polymer-Akkumulator mit einer Ladungsträgerkapazität von 800\,mAh. Der Malroboter ist zudem mit zwei Whiteboard-Stiften und einem Servomotor ausgestattet, mithilfe dessen der Roboter einen roten oder schwarzen Stift an die Whiteboard-Oberfläche drückt. Die Grundkonstruktion besteht aus 3D-gedruckten Bauteilen, die durch Schraubverbindungen ein festes Konstrukt ergeben. Die Schnur wird um die Welle des Elektromotors gewickelt und an der Grundkonstruktion festgebunden, so dass sich eine Schlaufe bildet. Die beiden Schlaufen werden um zwei starre Rollen gelegt, die am Whiteboard befestigt sind. Durch das Ansteuern der Motoren zieht oder senkt sicht der Roboter in eine Richtung. Mit seinen zwei Freiheitsgraden kann er somit jeden Punkt in einer vorgegeben Fläche ansteuern.


Zeile 52: Zeile 63:
|-
|-
| PI
| PI
| In dem Projekt wurde ein PI-Regler verwendet. Dieser kompensiert durch sein Integrator die bleibende Regelabweichung. Als Paremater wurden <math>K_P = 8</math> und <math>K_I = 16</math> verwendet. Dar unsere Stellgröße begrenzt ist, tritt der Wind-Up-Effekt auf. Dieser wird durch die Clamping-Methode verhindert.
| In dem Projekt wurde ein PI-Regler verwendet. Dieser kompensiert durch sein Integrator die bleibende Regelabweichung. Als Parameter wurden <math>K_P = 8</math> und <math>K_I = 16</math> verwendet. Dar unsere Stellgröße begrenzt ist, tritt der Wind-Up-Effekt auf. Dieser wird durch die Clamping-Methode verhindert.
|-
|-
| PID
| PID
Zeile 68: Zeile 79:


==== Simulationsanzeige ====
==== Simulationsanzeige ====
[[Datei:Fig whiteboard c-1.png|none|200px|thumb|Bild 5: Anzeige der Simulation]]
Die Simulationsanzeige in Abbildung 1 zeigt den Malroboter während der Zeichnung des HSHL-Logos. Das blaue Rechteck definiert unseren zulässigen Malbereich. Das Quadrat in der unteren-linken Ecke, zeigt den Status der gewählten Stiftfarbe an. Es sind die in Tabelle 2 aufgeführten vier Farben in der Anzeige möglich. Dabei wird die Farbe hellblau zum Anfang angezeigt um den uninitaialisierten Zustand des Roboters zu signalisieren.
 
Die Simulationsanzeige in Abbildung 3 zeigt den Malroboter nach seiner Ausführung der Zeichnung des HSHL-Logos. Das blaue Rechteck definiert unseren zulässigen Malbereich. Das Quadrat in der unteren-linken Ecke, zeigt den Status der gewählten Stiftfarbe an. Hier sind vier Farben möglich:
{| class="mw-datatable"
{| class="mw-datatable"
! style="font-weight: bold;" | Farbe
! style="font-weight: bold;" | Farbe
! style="font-weight: bold;" | Bedeutung
! style="font-weight: bold;" | Bedeutung
! style="font-weight: bold;" | servoPos-Variable im Stateflow
! style="font-weight: bold;" | servoPos-Variable im Stateflow
|+ style = "text-align: left"|Tabelle 1: Bewertung verschiedener Regleransätze
|+ style = "text-align: left"|Tabelle 2: Anzeige Stiftzustand (unten-links)
|-
|-
| Weiß
| Weiß
Zeile 94: Zeile 103:
|-
|-
|}
|}
[[Datei:Simu-anzeige.png|none|600px|thumb|Abbildung 7: Modul Simulationsanzeige in Simulink]]
Die Abb. 7 zeigt das Modul der Simulationsanzeige. Die "gemessenen" Inkremente der Motoren werden in in xy-Positionen umgerechnet. Der Roboter wird auf jene Position gesetzt. Die Funktion sim_plotLine kümmert sich um das einzeichnen der Punkte und die Linienverbindung zwischen den Punkten. Außerdem zeichnet diese Funktion die Anzeige Stiftzustand (unten-links).
Die Funktion sind Wrapper für die jeweiligen Funktionen mit "fn"-Präfix und binden diese extrinsisch ein. Dies ist notwendig um die Grafikelemente zu nutzen.
==== Parametrierung ====
==== Parametrierung ====
In der folgenden Tabelle 2 sind die wichtigsten Parameter für die Ausführung des Modells erklärt.
In der folgenden Tabelle 3 sind die wichtigsten Parameter für die Ausführung des Modells erklärt.
Einige Parameter gehen aus den Aufgaben der [https://aek.arduino.cc/ AEK-Seite] hervor und werden mithilfe dieser berechnet. Die Bennung wurde in dem Fall zum größten Teil beibehalten.
Einige Parameter gehen aus den Aufgaben der [https://aek.arduino.cc/ AEK-Seite] hervor und werden mithilfe dieser berechnet. Die Bennung wurde in dem Fall zum größten Teil beibehalten.
{| class="mw-datatable"
{| class="mw-datatable"
Zeile 102: Zeile 117:
! style="font-weight: bold;" | Einheit
! style="font-weight: bold;" | Einheit
! style="font-weight: bold;" | Wert
! style="font-weight: bold;" | Wert
|+ style = "text-align: left"|Tabelle 1: Bewertung verschiedener Regleransätze
|+ style = "text-align: left"|Tabelle 3: Parameterliste des Modells aus der start.m Datei
|-
| par_Base
| Aus Aufgabe. Abstand der beiden starren Rollen.
| Meter
| 0.42
|-
| par_counts_end
| Endposition des Roboters nach der Zeichnung
| [Inkrement Inkrement]
| [-12410, -3497]
|-
|-
| Ts
| par_counts_list
| Zeitschritt des Modells. Sollte kleiner sein als die Hälfte der kleinsten Zeitkonstante des Systems.
| Punkteliste der Zeichnung. Liste als Vektor [Inkrement_Links Inkrement_Rechts]. Wird aus dem Bild berechnet
| Sekunden
| [Inkrement Inkrement]
| 0,05
| -
|-
|-
| L_i
| par_counts_list_slices
| Aus Aufgabe. Seillänge von der Motorspule bis zur starren Rolle. Als Vektor: [Länge_links Länge_rechts]
| Liste aus Abständen des Anfangs eines Segments zum nächsten Segment in der Punkteliste. Liste aus Indizies. Wird aus dem Bild berechnet.
| [Meter Meter]
| Index
| Je Ausführung anders
| -
|-
|-
| par_L_arm
| par_discrete_tf
| Aus Aufgabe. Abstand von der Motorspule bis zum Malpunkt.
| Diskrete Trasnferfunktion berechnet aus der kontinuierlichen Transferfunktion H.
| Meter
| Transferfunktion
| 0.075
| aus <math>H(s) = \frac{1}{0,1\cdot s + 1}</math>
|-
|-
| par_Kp
| par_Kp
Zeile 129: Zeile 154:
| 16
| 16
|-
|-
| par_thresh_stable
| par_L_arm
| Das Ist-Inkrement wird mit einer Abweichung von par_thresh_stable als erfüllt/stabil betrachtet.
| Aus Aufgabe. Abstand von der Motorspule bis zum Malpunkt.
| Inkrement
| Meter
| 5
| 0.075
|-
| par_MarkerLeft, par_MarkerIdle oder par_MarkerRight
| Aus Aufgabe. Servo-Position für die Stifthalterung.
| Stellungswinkel in Grad
| Je Roboter anders
|-
| par_pwm_allowed_range
| Zulässiger Bereich des Tastgrads. Als Vektor [min max]
| Tastgrad in %
| [-90 90]
|-
| par_PWMcmdMono und par_speedMono
| Aus Aufgabe. Beschreibt die Kennlinie des Motors.
| -
| siehe Abbildung Motorkennlinie
|-
| par_pwm_dz
| Bereich der Totzone. Falls der geregelte Tastgrad in dem Bereich liegt soll die Stellgröße 0 sein, da sonst der Motor ein nerviges fiepen hat. Als Vektor [min max]
| Tastgrad in %
| [-15 15]
|-
| par_speed_range
| Zulässiger Bereich der Geschwindigkeit. Als Vektor [min max]
| Inkrement/s
| [-5118,87 5386,52333333]
|-
|-
| par_spule_sign
| par_spule_sign
Zeile 139: Zeile 189:
| -1
| -1
|-
|-
| UI_hRobot_stayOnTop
| par_thresh_stable
| Soll die Oberfläche der Simulationsanzeige dauert im Fokus sein?
| Das Ist-Inkrement wird mit einer Abweichung von par_thresh_stable als erfüllt/stabil betrachtet.
| Boolean
| Inkrement
| false
| 5
|-
| UI_hRobot_transparency
| Transparenz der Malroboter in der Simulationsanzeige
| 0 bis 1
| 0.7
|-
| UI_min_dist_line
| Mindistdistanz zwischen Punkten damit eine Linie gezeichnet wird (spart Ressourcen)
| -
| 2
|-
|-
| par_xlim  
| par_xlim  
Zeile 164: Zeile 204:
| [0,12 0,3]
| [0,12 0,3]
|-
|-
| par_MarkerLeft, par_MarkerIdle oder par_MarkerRight
| L_i
| Aus Aufgabe. Servo-Position für die Stifthalterung.
| Aus Aufgabe. Seillänge von der Motorspule bis zur starren Rolle. Als Vektor: [Länge_links Länge_rechts]
| Stellungswinkel in Grad
| [Meter Meter]
| Je Roboter anders
| Je Ausführung anders
|-
|-
| par_Base
| Ts
| Aus Aufgabe. Länge des Roboter.
| Zeitschritt des Modells. Sollte kleiner sein als die Hälfte der kleinsten Zeitkonstante des Systems.
| Meter
| Sekunden
| 0.42
| 0,05
|-
|-
| par_PWMcmdMono und par_speedMono
| UI_min_dist_line
| Aus Aufgabe. Beschreibt die Kennlinie des Motors.
| Mindistdistanz zwischen Punkten damit eine Linie gezeichnet wird (spart Ressourcen)
| -
| -
| siehe Bild 2
| 2
|-
|-
| par_counts_end
| UI_hRobot_stayOnTop
| Endposition des Roboters nach der Zeichnung
| true: Wird unterhalb des Roboters gemalt (Durch die Transparenz trotzdem zu sehen); false: oberhalb
| [Inkrement Inkrement]
| Boolean
| [-12410, -3497]
| false
|-
|-
| par_counts_list
| UI_hRobot_transparency
| Punkteliste der Zeichnung. Liste aus aus Vektor [Inkrement_Links Inkrement_Rechts]. Wird aus dem Bild berechnet
| Transparenz der Malroboter in der Simulationsanzeige
| [Inkrement Inkrement]
| 0 bis 1
| -
| 0.7
|-
| par_counts_list_slices
| Liste aus Abständen des Anfangs eines Segments zum nächsten Segment in der Punkteliste. Liste aus Indizies. Wird aus dem Bild berechnet.
| Index
| -
|-
| par_speed_range
| Zulässiger Bereich der Geschwindigkeit. Als Vektor [min max]
| Inkrement/s
| [-5118,87 5386,52333333]
|-
| par_pwm_allowed_range
| Zulässiger Bereich des Tastgrads. Als Vektor [min max]
| Tastgrad in %
| [-90 90]
|-
| par_pwm_dz
| Bereich der Totzone. Falls der geregelte Tastgrad in dem Bereich liegt soll die Stellgröße 0 sein, da sonst der Motor ein nerviges fiepen hat. Als Vektor [min max]
| Tastgrad in %
| [-15 15]
|-
| par_discrete_tf
| Diskrete Trasnferfunktion berechnet aus der kontinuierlichen Transferfunktion H.
| Transferfunktion
| aus <math>H(s) = \frac{1}{0,1\cdot s + 1}</math>
|-
|-
|}
|}


== Anforderung ==
== Zusammenfassung und Ausblick ==
* Wissenschaftliche Vorgehensweise (Projektplan, etc.)
Der simulierte Roboter vollendet die Zeichnung nach ca. 9 Minuten. Im realen Fall war die Zeichnung nach ca. 17 Minuten fertig. Der größte Zeitverlust entsteht dadurch, dass der PI-Regler versucht in der Totzone des Gleichstrommotors zu regeln. Der Integrator benötigt dann etwas Zeit, um die notwendige Stellgröße zu erreichen. Diese kleinen Zeitverluste führen im Gesamtverlauf zu mehreren Minuten.
* Wöchentliche Fortschrittsberichte (informativ)
 
* Projektvorstellung im Wiki
Die Aufgaben wurden methodisch abgearbeitet. Dabei wurde zuerst das "Arduino Engineering Kit" gesichtet und der Malroboter aufgebaut. Für die Erstellung der Simulation wurde das Gesamtsystem aus regelungstechnischer Sicht betrachtet und modelliert. Ein Bild lies sich sowohl in Simulation als auch in der Realität zeichen. Dies zeigt den Erfolg des Projekts.
* Machen Sie ein tolles Videos, welches die Funktion visualisiert.
 
Für die Berechnung der Punktliste wird die Anfangsposition des Roboters als Referenz benötigt. Zurzeit wird diese Position noch händisch mit einem Lineal gemessen. Eine Automatisierung des Prozesses kann zum Beispiel mithilfe einer Webcam und einer Bildverarbeitung realisiert werden.
 
Das Projekt vertieft die theoretischen Grundlagen des Mechatronik Studiums im Bereich der Informatik, Regelungstechnik und Systemmodellierung. Die vorher erwähnten Verbesserungen und die Implementierung mit Matlab und Simulink erlauben einen einfachen und intuitiven Umgang mit der Hardware.
 
== Quelltext ==
Den Quelltext finden Sie im [https://svn.hshl.de/svn/HSHL_Projekte/trunk/Arduino_Engineering_Kit/Malender_Roboter/Projektarbeit%20SS2021 SVN Arbeitsordner].


== Weblinks ==
== Weblinks ==
Zeile 227: Zeile 248:
# [https://www.youtube.com/watch?v=2ypmTq3VmFM&list=PLAnYjDlRTdcURwtFsIkWyNgTzKhxY7DBo&index=10 Deer Drawing]
# [https://www.youtube.com/watch?v=2ypmTq3VmFM&list=PLAnYjDlRTdcURwtFsIkWyNgTzKhxY7DBo&index=10 Deer Drawing]
# [https://store.arduino.cc/arduino-engineering-kit Arduino Store]
# [https://store.arduino.cc/arduino-engineering-kit Arduino Store]
# [https://player.vimeo.com/video/385223137 Video-Anleitung: Aufbau der Hardware]
# [https://aek.arduino.cc/ Arduino Engineering Kit Aufgabenmaterial]
# Add-on: [https://de.mathworks.com/matlabcentral/fileexchange/66569-arduino_engineering_kit_project_files Arduino_Engineering_Kit_Project_Files]


== Software ==
== Software ==
Zeile 233: Zeile 257:
# [https://de.mathworks.com/matlabcentral/fileexchange/66569-arduino_engineering_kit_project_files Arduino Engineering​ Kit Project Files]
# [https://de.mathworks.com/matlabcentral/fileexchange/66569-arduino_engineering_kit_project_files Arduino Engineering​ Kit Project Files]
# [https://de.mathworks.com/matlabcentral/fileexchange/68396-reinforcement-learning-with-self-balancing-motorcycle Reinforcement learning with Self-balancing motorcycle]
# [https://de.mathworks.com/matlabcentral/fileexchange/68396-reinforcement-learning-with-self-balancing-motorcycle Reinforcement learning with Self-balancing motorcycle]
== Literatur ==


== Siehe auch ==
== Siehe auch ==

Aktuelle Version vom 28. August 2021, 20:35 Uhr

Abbildung 1: Arduino Engineering Kit - Malender Roboter - Simulation in 24-facher Geschwindigkeit (Laufzeit: 9min) - Mehr zu den Anzeigelementen im Kapitel Simulationsanzeige

Autoren: Stefan Arndt
Betreuer: Prof. Schneider
Art: PA
Projektlaufzeit:


Thema

Aufbau eines selbsmalenden Roboters.

Ziel

Das Arduino Engineering Kit ermöglicht den Aufbau dreier regelungstechnischer Herausforderungen. In diesem Projekt soll ein malender Roboter gebaut und programmiert werden. Das Projekt wurde zudem durch eine Simulation erweitert.

Verwendete Software

  1. MATLAB und Simulink R2021a (exportierte Modelle für R2020b liegen dem Projekt bei)
  2. Add-on: Arduino_Engineering_Kit_Project_Files
  3. Add-on: MATLAB Support Package for Arduino Hardware
  4. Add-on: Simulink Support Package for Arduino Hardware

Aufgabenstellung

  1. Einarbeitung in das Thema, auch aus regelungstechnischer Sicht
  2. Identifikation der Regelstrecke
  3. Sichtung und Test des bestehenden Bausatzes
  4. Aufbau des Systems (ggf. Platinenfertigung, etc.)
  5. Vergleichen und bewerten Sie verschiedene Regleransätze (P, PI, PID und andere).
  6. Modellbasierte Programmierung der Hardware via Matlab und Simulink
  7. Test des Malroboters
  8. Dokumentation nach wissenschaftlichem Stand
  9. Funktionsnachweis als YouTube-Video


Anforderung

  • Wissenschaftliche Vorgehensweise (Projektplan, etc.)
  • Wöchentliche Fortschrittsberichte (informativ)
  • Projektvorstellung im Wiki
  • Machen Sie ein tolles Videos, welches die Funktion visualisiert.

Bewertung des Bausatzes

Der Hardwareaufbau konnte mithilfe des Anleitungsvideos innherlab von vier Stunden aufgebaut werden. In den Versuchen zeigte sich die Hardware als etwas anfällig. Die Konstruktion, die für die Befestigung der Stifte notwendig ist, fiel öfters auseinander und musste neu fixiert werden. Hier können die Elemente mit z.B. Heißkleber fixiert werden. Die Monofilament Trageschnur des Roboters ist im Umgang aufgrund ihrer Steifigkeit schwer. Diese wurde durch eine geflochtene Angelschnur ersetzt.

Identifikation der Regelstrecke

Abbildung 2: Regelstrecke des Gleichstrommotors

In Abbildung 2 ist der Regelkreis für einen Gleichstrommotor des Malroboters dargestellt. Die Regelgröße ist die Geschwindigkeit des Motors. Die Geschwindigkeit wird über den Inkrementalgeber diskret gemessen. Die berechnete Regeldifferenz wird von einem PI-Regler verarbeitet, der als Stellgröße den PWM-Tastgrad an die Steuerung des Gleichstrommotors (Regelstrecke) übergibt. Die Steuerung auf dem "Arduino Motor Shield" steuert die notwendige H-Brücke an, um den Motor mit dem gewünschten Tastgrad anzutreiben.

Abbildung 3: Motorkennlinie

Um das System zu analysieren, wird die Geschwindigkeit gemessen. Als Eingabe dient dabei der Tastgrad in Schritten von 5%. Nachdem ein Tastgrad eingestellt wurde, werden 2 Sekunden gewartet und die Geschwindigkeit gemessen. Diese Messung wurde fünf mal wiederholt und der Durchschnitt gebildet. Abbildung 3 zeigt die resultierende Kennlinie. Diese Motorkennlinie wurde im unbelasteten Zustand gemessen.

Aufbau des Systems

Abbildung 4: Darstellung des Malroboters
Abbildung 5: Aufbau der Hardware am Whiteboard

Die Komponenten sind in der Abb. 4 dargstellt. Ein Aufbau der Hardware mit Whiteboard findet sich im Abb. 5 vor. Der Aufbau wurde mithilfe des Anleitungsvideos erstellt. Die Basis dieses Projekts bildet das Arduino-Board "MKR1000". Mit dem dazugehörigen "Arduino Motor Shield", lassen sich die zwei Gleichstrommotoren ansteuern. Diese besitzen einen integrierten Inkrementalgeber mit einer Auflösungen von . Die Versorgungsenergie liefert ein Lithium-Polymer-Akkumulator mit einer Ladungsträgerkapazität von 800\,mAh. Der Malroboter ist zudem mit zwei Whiteboard-Stiften und einem Servomotor ausgestattet, mithilfe dessen der Roboter einen roten oder schwarzen Stift an die Whiteboard-Oberfläche drückt. Die Grundkonstruktion besteht aus 3D-gedruckten Bauteilen, die durch Schraubverbindungen ein festes Konstrukt ergeben. Die Schnur wird um die Welle des Elektromotors gewickelt und an der Grundkonstruktion festgebunden, so dass sich eine Schlaufe bildet. Die beiden Schlaufen werden um zwei starre Rollen gelegt, die am Whiteboard befestigt sind. Durch das Ansteuern der Motoren zieht oder senkt sicht der Roboter in eine Richtung. Mit seinen zwei Freiheitsgraden kann er somit jeden Punkt in einer vorgegeben Fläche ansteuern.

Bewertung verschiedener Regleransätze

Eine Bewertung erfolgt qualitativ auf Grundlage der Eigenschaften der drei Regler in Tabelle 1.

Regler Bewertung
Tabelle 1: Bewertung verschiedener Regleransätze
P Ein P-Regler erreicht in unserem Fall keine Regeldifferenz von 0. Die bleibende Regelabweichung kann durch Erhöhung des Parameters verringert werden. Dies begünstigt jedoch ein aggressives Verhalten der Regelung.
PI In dem Projekt wurde ein PI-Regler verwendet. Dieser kompensiert durch sein Integrator die bleibende Regelabweichung. Als Parameter wurden und verwendet. Dar unsere Stellgröße begrenzt ist, tritt der Wind-Up-Effekt auf. Dieser wird durch die Clamping-Methode verhindert.
PID Der PID-Regler erweitert den PI-Regler durch ein Differenzierer, der auf die Änderungsrate der Reglerabweichung reagiert. Der Roboter hat keine komplexe Kinematik, wodurch die Änderungsrate meist konstant bleibt. Deshalb wird auf ein I-Glied verzichtet.

Modellbasierte Programmierung

Die Programmierung wurde mithilfe einer simulierten Umgebung realisiert. Der Projektordner lautet "aek_plotter". Inerhalb des Projekordners sind die Dateien für die Übungsaufgaben der Seite https://aek.arduino.cc/ Der Unterordner "simulink" enthält die entwickelte Simulationsumgebung.

Simulations- oder Hardwareumgebung starten

  1. Im Simulink-Ordner ./aek_plotter/simulink die Datei start.m ausführen
  2. potter_sim.slx öffnen für die Simulationsumgebung oder plotter_hardware.slx zur Ausführung auf der Hardware

Simulationsanzeige

Die Simulationsanzeige in Abbildung 1 zeigt den Malroboter während der Zeichnung des HSHL-Logos. Das blaue Rechteck definiert unseren zulässigen Malbereich. Das Quadrat in der unteren-linken Ecke, zeigt den Status der gewählten Stiftfarbe an. Es sind die in Tabelle 2 aufgeführten vier Farben in der Anzeige möglich. Dabei wird die Farbe hellblau zum Anfang angezeigt um den uninitaialisierten Zustand des Roboters zu signalisieren.

Farbe Bedeutung servoPos-Variable im Stateflow
Tabelle 2: Anzeige Stiftzustand (unten-links)
Weiß Kein Stift wurde ausgewählt. par_MarkerIdle
Schwarz Der Roboter malt mit dem schwarzen Stift. par_MarkerLeft
Rot Der Roboter malt mit dem roten Stift. par_MarkerRight
Hellblau Der Stiftzustand wurde nicht gesetzt (uninitialisiert). None


Abbildung 7: Modul Simulationsanzeige in Simulink

Die Abb. 7 zeigt das Modul der Simulationsanzeige. Die "gemessenen" Inkremente der Motoren werden in in xy-Positionen umgerechnet. Der Roboter wird auf jene Position gesetzt. Die Funktion sim_plotLine kümmert sich um das einzeichnen der Punkte und die Linienverbindung zwischen den Punkten. Außerdem zeichnet diese Funktion die Anzeige Stiftzustand (unten-links). Die Funktion sind Wrapper für die jeweiligen Funktionen mit "fn"-Präfix und binden diese extrinsisch ein. Dies ist notwendig um die Grafikelemente zu nutzen.

Parametrierung

In der folgenden Tabelle 3 sind die wichtigsten Parameter für die Ausführung des Modells erklärt. Einige Parameter gehen aus den Aufgaben der AEK-Seite hervor und werden mithilfe dieser berechnet. Die Bennung wurde in dem Fall zum größten Teil beibehalten.

Parameter Beschreibung Einheit Wert
Tabelle 3: Parameterliste des Modells aus der start.m Datei
par_Base Aus Aufgabe. Abstand der beiden starren Rollen. Meter 0.42
par_counts_end Endposition des Roboters nach der Zeichnung [Inkrement Inkrement] [-12410, -3497]
par_counts_list Punkteliste der Zeichnung. Liste als Vektor [Inkrement_Links Inkrement_Rechts]. Wird aus dem Bild berechnet [Inkrement Inkrement] -
par_counts_list_slices Liste aus Abständen des Anfangs eines Segments zum nächsten Segment in der Punkteliste. Liste aus Indizies. Wird aus dem Bild berechnet. Index -
par_discrete_tf Diskrete Trasnferfunktion berechnet aus der kontinuierlichen Transferfunktion H. Transferfunktion aus
par_Kp Parameter für das P-Glied - 8
par_Ki Parameter für das I-Glied - 16
par_L_arm Aus Aufgabe. Abstand von der Motorspule bis zum Malpunkt. Meter 0.075
par_MarkerLeft, par_MarkerIdle oder par_MarkerRight Aus Aufgabe. Servo-Position für die Stifthalterung. Stellungswinkel in Grad Je Roboter anders
par_pwm_allowed_range Zulässiger Bereich des Tastgrads. Als Vektor [min max] Tastgrad in % [-90 90]
par_PWMcmdMono und par_speedMono Aus Aufgabe. Beschreibt die Kennlinie des Motors. - siehe Abbildung Motorkennlinie
par_pwm_dz Bereich der Totzone. Falls der geregelte Tastgrad in dem Bereich liegt soll die Stellgröße 0 sein, da sonst der Motor ein nerviges fiepen hat. Als Vektor [min max] Tastgrad in % [-15 15]
par_speed_range Zulässiger Bereich der Geschwindigkeit. Als Vektor [min max] Inkrement/s [-5118,87 5386,52333333]
par_spule_sign Muss angepasst werden je nach Wicklungsart der Spule (im Uhrzeigersinn oder gegen) 1, -1 -1
par_thresh_stable Das Ist-Inkrement wird mit einer Abweichung von par_thresh_stable als erfüllt/stabil betrachtet. Inkrement 5
par_xlim Aus Aufgabe. Begrenzung des Malbereichs. Datei: WhiteboardLimits.mat. Wert als Vektor [x_min x_max] [Meter Meter] [0,12 0,3]
par_ylim Wie par_xlim für y [Meter Meter] [0,12 0,3]
L_i Aus Aufgabe. Seillänge von der Motorspule bis zur starren Rolle. Als Vektor: [Länge_links Länge_rechts] [Meter Meter] Je Ausführung anders
Ts Zeitschritt des Modells. Sollte kleiner sein als die Hälfte der kleinsten Zeitkonstante des Systems. Sekunden 0,05
UI_min_dist_line Mindistdistanz zwischen Punkten damit eine Linie gezeichnet wird (spart Ressourcen) - 2
UI_hRobot_stayOnTop true: Wird unterhalb des Roboters gemalt (Durch die Transparenz trotzdem zu sehen); false: oberhalb Boolean false
UI_hRobot_transparency Transparenz der Malroboter in der Simulationsanzeige 0 bis 1 0.7

Zusammenfassung und Ausblick

Der simulierte Roboter vollendet die Zeichnung nach ca. 9 Minuten. Im realen Fall war die Zeichnung nach ca. 17 Minuten fertig. Der größte Zeitverlust entsteht dadurch, dass der PI-Regler versucht in der Totzone des Gleichstrommotors zu regeln. Der Integrator benötigt dann etwas Zeit, um die notwendige Stellgröße zu erreichen. Diese kleinen Zeitverluste führen im Gesamtverlauf zu mehreren Minuten.

Die Aufgaben wurden methodisch abgearbeitet. Dabei wurde zuerst das "Arduino Engineering Kit" gesichtet und der Malroboter aufgebaut. Für die Erstellung der Simulation wurde das Gesamtsystem aus regelungstechnischer Sicht betrachtet und modelliert. Ein Bild lies sich sowohl in Simulation als auch in der Realität zeichen. Dies zeigt den Erfolg des Projekts.

Für die Berechnung der Punktliste wird die Anfangsposition des Roboters als Referenz benötigt. Zurzeit wird diese Position noch händisch mit einem Lineal gemessen. Eine Automatisierung des Prozesses kann zum Beispiel mithilfe einer Webcam und einer Bildverarbeitung realisiert werden.

Das Projekt vertieft die theoretischen Grundlagen des Mechatronik Studiums im Bereich der Informatik, Regelungstechnik und Systemmodellierung. Die vorher erwähnten Verbesserungen und die Implementierung mit Matlab und Simulink erlauben einen einfachen und intuitiven Umgang mit der Hardware.

Quelltext

Den Quelltext finden Sie im SVN Arbeitsordner.

Weblinks

  1. Arduino Engineering Kit
  2. YouTube: Unboxing the Arduino Engineering Kit
  3. Deer Drawing
  4. Arduino Store
  5. Video-Anleitung: Aufbau der Hardware
  6. Arduino Engineering Kit Aufgabenmaterial
  7. Add-on: Arduino_Engineering_Kit_Project_Files

Software

  1. Arduino Engineering Kit Hardware Suppo​rt
  2. Arduino Engineering Kit Hardware Suppo​rt für R2018b
  3. Arduino Engineering​ Kit Project Files
  4. Reinforcement learning with Self-balancing motorcycle

Literatur

Siehe auch

  1. Studentische Arbeiten bei Prof. Schneider
  2. Anforderungen an eine wissenschaftlich Arbeit



→ zurück zum Hauptartikel: Studentische Arbeiten