Malender Roboter mit Arduino
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
- MATLAB und Simulink R2021a (exportierte Modelle für R2019a liegen dem Projekt bei)
Aufgabenstellung
- Einarbeitung in das Thema, auch aus regelungstechnischer Sicht
- Identifikation der Regelstrecke
- Sichtung und Test des bestehenden Bausatzes
- Aufbau des Systems (ggf. Platinenfertigung, etc.)
- Vergleichen und bewerten Sie verschiedene Regleransätze (P, PI, PID und andere).
- Modellbasierte Programmierung der Hardware via Matlab und Simulink
- Test des Malroboters
- Dokumentation nach wissenschaftlichem Stand
- 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
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.
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
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 |
---|---|
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
- Im Simulink-Ordner ./aek_plotter/simulink die Datei start.m ausführen
- potter_sim.slx öffnen für die Simulationsumgebung oder plotter_hardware.slx zur Ausführung auf der Hardware
Simulationsanzeige
Die Simulationsanzeige in Abbildung 6 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:
Farbe | Bedeutung | servoPos-Variable im Stateflow |
---|---|---|
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 |
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 |
---|---|---|---|
par_Base | Aus Aufgabe. Länge des Roboter. | Meter | 0.42 |
par_counts_end | Endposition des Roboters nach der Zeichnung | [Inkrement Inkrement] | [-12410, -3497] |
par_counts_list | Punkteliste der Zeichnung. Liste aus aus 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 | Soll die Oberfläche der Simulationsanzeige dauert im Fokus sein? | Boolean | false |
UI_hRobot_transparency | Transparenz der Malroboter in der Simulationsanzeige | 0 bis 1 | 0.7 |
Ergebnisvideo
Quelltext
Den Quelltext finden Sie im ["https://svn.hshl.de/svn/HSHL_Projekte/trunk/Arduino_Engineering_Kit/Malender_Roboter/Projektarbeit SS2021" SVN Arbeitsordner].
Weblinks
- Arduino Engineering Kit
- YouTube: Unboxing the Arduino Engineering Kit
- Deer Drawing
- Arduino Store
- Video-Anleitung: Aufbau der Hardware
- Arduino Engineering Kit Aufgabenmaterial
Software
- Arduino Engineering Kit Hardware Support
- Arduino Engineering Kit Hardware Support für R2018b
- Arduino Engineering Kit Project Files
- Reinforcement learning with Self-balancing motorcycle
Literatur
Siehe auch
→ zurück zum Hauptartikel: Studentische Arbeiten