ArduMower: Kartierung: Unterschied zwischen den Versionen
Zeile 161: | Zeile 161: | ||
der selbstlernenden Karte. | der selbstlernenden Karte. | ||
=== Funktionsaufruf === | === Funktionsaufruf === | ||
Im Funktionsaufruf ist der Aufruf der Funktion und die deklarierung der Persistenten Variabeln beschrieben. Hinzukommen die Befehle '''coder.extrinsic() ''' welche die Matlab-Befehle '''imshow() ''' und ''' | Im Funktionsaufruf ist der Aufruf der Funktion und die deklarierung der Persistenten Variabeln beschrieben. Hinzukommen die Befehle '''coder.extrinsic() ''' welche die Matlab-Befehle '''imshow() ''' und '''num2str() ''' in Simulink nutzbar machen. | ||
<syntaxhighlight lang="matlab" style="border: none; background-color: #EFF1C1; font-size:larger"> | <syntaxhighlight lang="matlab" style="border: none; background-color: #EFF1C1; font-size:larger"> | ||
function [PosNeu, Karte] = Kartenfunktion(xNeu,yNeu,PosAlt,Ausrichtung,Karte,Bumper,Ultraschall,Perimeterschleife) | function [PosNeu, Karte] = Kartenfunktion(xNeu,yNeu,PosAlt,Ausrichtung,Karte,Bumper,Ultraschall,Perimeterschleife) |
Version vom 19. Februar 2018, 13:06 Uhr
Dieser Wiki-Beitrag ist Teil eines Projektes, welches im Rahmen vom Fachpraktikum Elektrotechnik im 6. Semester und 7. Mechatronik absolviert wurde. Ziel des Beitrags ist es, eine nachhaltige Dokumentation zu schaffen, welche die Ergebnisse festhält und das weitere Arbeiten am Projekt ermöglicht.
Autoren: Marcel Kreuer
Betreuer: Prof. Dr.-Ing. Schneider, Prof. Dr.-Ing. Mirek Göbel
Projekt: Ardumower
Einleitung
Dieser Artikel beschreibt den Aufbau einer Matrix-basierten Karte zur Darstellung des aktuellen Mähstandes eines Rasenmähroboters. Neben der visuellen Darstellung, dient die Karte als Informationsgrundlage für beispielsweise die Planung der Mähstrategie.
Anforderungen
Die Aufgabe ist die Erstellung einer selbstlernenden Karte, welche im Lastenheft wie folgt gefordert wird:
In dem durch das Team Ardumower erstellten Pflichtenheft werden die Anforderungen weiter ausgeführt:
Um eine Implementierung zu ermöglichen wurden folgende Anforderungen an die Karte spezifiziert:
ID | Inhalt | Ersteller | Datum | Geprüft von | Datum |
---|---|---|---|---|---|
1 | Die Karte muss als Matrix mit der Rastergröße 0,3 m umgesetzt werden (Grid-Map). | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
2 | Die Perimeterschleife muss in der Karte mit dem Wert „1“ hinterlegt sein und in der Darstellung rot markiert werden. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
3 | Die aktuelle Position des Mähers muss in der Karte mit dem Wert „4“ hinterlegt sein und in der Darstellung blau markiert werden. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
4 | Hindernisse müssen in der Karte mit dem Wert „5“ hinterlegt sein und in der Darstellung magenta markiert werden. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
5 | Unbekannte Bereiche müssen in der Karte mit dem Wert „0“ hinterlegt sein und in der Darstellung weiß bleiben. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
6 | Ungemähter Rasen muss in der Karte mit dem Wert „2“ hinterlegt sein und in der Darstellung dunkelgrün makiert werden. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
7 | Gemähter Rasen muss in der Karte mit dem Wert „3“ hinterlegt sein und in der Darstellung hellgrün makiert werden. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
8 | Die Karte muss zyklisch aktualisiert werden. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
9 | Die Umsetzung muss als Matlab-Skript erfolgen, so dass eine Einbindung in Simulink als Matlab-Funktion möglich ist. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
10 | Eingangsgrößen der Funktion Kartenfunktion.m sind
|
Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
11 | Ausgangsgrößen der Funktion Kartenfunktion.m sind
|
Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
12 | Die Initialisierung muss 1s und die zyklische Darstellung muss 1ms unterschreiten. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
13 | Bei Kommentierung und Dokumentation muss sich an die Projektrichtlinien gehalten werden. | Marcel Kreuer | 05.10.2017 | Simon Kohfeld | 05.10.2017 |
Historie
In erster Instanz wurde die zu mähende Rasenfläche entlang der Perimeterschleife mit einem GroundTruth System vermessen. Die daraus resultierenden Messdaten wurden in Matlab eingelesen und zu einer Karte verarbeitet.
Die Karte selbst wurde als eine Matrix angelegt, wobei jedes Matrixelement eine Fläche von 0,3m x 0,3 m repräsentiert.
Die Auswertung der Messdaten ergab folgende mit Matlab generiert Karte:
Die Matrix selbst wurde exportiert und mithilfe eines einmaligen Algorythmuses in die Darstellungsform wie am Anfang des Artikels dargestellt konvertiert.
Funktionaler Systementwurf / Technischer Systementwurf
Bei der Größe des zu erstellenden Modells werden die Schritte Funktionaler Systementwurf/Technischer Systementwurf des V-Modells zusammen gelegt und bereits Schnittstellen zwischen den einzelnen Blöcken definiert.
Komponentenspezifikation
Das Modell wird insgesamt als Komponente aufgefasst, d. h. die einzelnen Blöcke aus dem Systementwurf werden als Bestandteil der Komponente "Selbstlernende Karte" definiert. Die Funktion der Komponente "Selbstlernende Karte" wird in Form eines PAP spezifiziert.
Programmierung
Im Folgenden wird die Matlab-Funktion hinter dem Simulink-Block vergestellt. Dabei lässt sich die Funktion unterteilen in:
- den Funktionsaufruf
- die Initialisierung und
- die zyklische Aktualisierung
der selbstlernenden Karte.
Funktionsaufruf
Im Funktionsaufruf ist der Aufruf der Funktion und die deklarierung der Persistenten Variabeln beschrieben. Hinzukommen die Befehle coder.extrinsic() welche die Matlab-Befehle imshow() und num2str() in Simulink nutzbar machen.
function [PosNeu, Karte] = Kartenfunktion(xNeu,yNeu,PosAlt,Ausrichtung,Karte,Bumper,Ultraschall,Perimeterschleife)
coder.extrinsic('imshow');
coder.extrinsic('num2str');
%aColorMap
persistent bInitKarte nKartenPosAlt mKarte hKarte hAxes xt yt xtLabel ytLabel hImg
persistent nUnbekannt nPerimeter nNichtGemaeht nGemaeht nArduMower nHindernis