• Keine Ergebnisse gefunden

Unterschiede zwischen C- und MATLAB/Simulink-Implementierung

Umsetzung auf Atmel Mikrocontroller

6.3 Unterschiede zwischen C- und MATLAB/Simulink-Implementierung

In diesem Unterabschnitt werden die Unterschiede zwischen dem C-Programm und der MATLAB/ Simulink-Implementierung beschrieben. Zunächst werden hardwarespezifische Unterschiede aufgelistet,

die in der Software berücksichtigt wurden.

• Im C-Programm wird zur Einsparung von Rechenzeit auf den Datentyp doubleverzichtet und nur mit den Datentypenintegerundfloatgearbeitet.

• Die Versorgungsspannung des Spannungsteilers zur Messung der Widerstände wird von 5V auf 3.3V reduziert.

• Der bereits in Abschnitt 6.1 beschriebene Mangel an parallelen AD-Wandlern muss eben-falls bei der Abtastung der Sensormatrix berücksichtigt werden. Die Taxel werden deshalb zeilenweise, nacheinander abgetastet.

Zur Implementierung des Pressungsmodells wurde zunächst die Implementierung der Exponenti-alfunktion der C-Standard Bibliothekmath.hverwendet. Diese führte zu sehr langen Taktzeiten, da bei der Abtastung aller 600 Taxel je zwei Funktionsauswertungen der Exponentialfunktion ausgeführt werden müssen. Daher wurde eine effizientere Approximation der Exponentialfunkti-on implementiert, die den zulässigen Wertebereich berücksichtigt. Diese nutzt die DefinitiExponentialfunkti-on der

6.3 Unterschiede zwischen C- und MATLAB/Simulink-Implementierung 65

Exponentialfunktion als Grenzwert eines Polynoms nach[74](Gleichung (6.1)).

ex= lim

Dam→ ∞auf einem realen System nicht implementiert werden kann, muss zur Berechnung die-ses Produkt ein endlichesmgewählt werden. Die Definition lässt für Potenzen von zwei(m=2n) eine rekursive Berechnungsvorschrift zu, mit der nur eine Addition und n+1 Multiplikationen ausgeführt werden müssen. Bild 6.2 zeigt die Approximation des in Abschnitt 4.5 identifizierten Pressungsmodell mit approximiertere-Funktion für verschiedene Rekursionstiefennim relevan-ten Wertebereich von 5kΩbis 60kΩ.

0 20 40 60

Bild 6.2:Approximationsgüte dere-Funktion für verschiedene Rekursionstiefennim Wertebereich von5kΩbis 60kΩnach Gleichung (6.1) zur Verkürzung der Rechenzeit.

Für n=12 ist die Abweichung der berechneten Druckspannung Pn von P über den gesamten Wertebereich bereits kleiner als 1 %. Die Rechenzeit der Auswertung des Pressungsmodells aller 600 Taxel kann durch diese Approximation bei ausreichender Genauigkeit von 47msauf 0.5ms verkürzt werden.

Für die Bildverarbeitungskette wird die in Abschnitt 5.6 ermittelte, optimale Variante implemen-tiert. Da diese keine Interpolationen und keinen Bildfilter verwendet, werden diese aus der Bild-verarbeitungskette entfernt. Zur Segmentierung wird ausschließlich dasThresholdingverwendet, da dieses in Abschnitt 5.6 bessere Ergebnisse zeigte. Aufgrund des beschränkten Programm- und Arbeitsspeicher des Mikroprozessors sowie der einkernigen Prozessorarchitektur wurde darauf verzichtet, eine umfangreiche Bildverarbeitungsbibliothek wie zum Beispiel openCV zu verwen-den. Stattdessen wurde die Bildverarbeitungskette, insbesondere die Regionenmarkierung und derQuickhull-Algorithmus, neu implementiert. Auf diese wird im Folgenden genauer eingegan-gen.

Algorithmen zur Regionenmarkierung können sequentiell oder rekursiv aufgebaut sein [6]. Ei-ne detaillierte Beschreibung des implementierten, rekursiven RegioEi-nenmarkierungsalgorithmus als Pseudocode zeigt Algorithmus 6.1. Ein Vorteil der rekursiven Regionenmarkierung gegenüber einer sequentiellen Formulierung ist, dass der Algorithmus immer vollständige Flächen findet [6]. Somit entfällt ein abschließender Vergleich der gefundenen Kontaktflächen auf doppelt ge-labelte, zusammenhängende Gebiete. Die rekursive Formulierung ist jedoch aufgrund des hohen temporären Speicherbedarf bei großen Flächen nur für relativ kleine Bilder einsetzbar. Diese Ein-schränkung ist für das 20×30-Taxel große Kontaktbild jedoch irrelevant.

66 6 Umsetzung auf Atmel Mikrocontroller

Algorithmus 6.1Rekursive Regionenmarkierung angelehnt an[6] Require: binary inputimageIwithntaxels

Ensure: outputimageLthat contains the labelled regions

1: L0 //initialize outputimage

2: l⇐1 //initialize label counter

3: fori⇐1 tondo

4: ifL(i)6=0orI(i) ==0then

5: continue //current taxel is already labelled or doesn’t need to be labelled

6: else

7: L(i)⇐l

8: recurse from line 4 to line 9 for all neighbourhood taxels ofi

9: end if

10: l+ +

11: end for

12: return L

DerQuickhullAlgorithmus zur Berechnung des Supportpolygons wird ebenfalls selbst implemen-tiert. Die Hüllpunkte des konvexen Supportpolygons sollen später via CAN an den Steuerrechner von LoLa versendet werden. Um die Punkte in einer definierten Anzahl an CAN-Nachrichten ver-packen zu können, muss die Anzahl der Hüllpunkte beschränkt werden. Eine Beschränkung der gefundenen Hüllpunkte kann dadurch erreicht werden, dass für denQuickhullAlgorithmus eine maximale Rekursionstiefenma x festgelegt wird. Ist diese erreicht bricht der Algorithmus ab und gibt die bis dahin berechnete, unvollständige konvexe Hülle zurück. Diese beschreibt eine konser-vative Approximation der vollständigen, konvexen Hülle. Bei jedem Rekursionsschritt verdoppelt sich die maximale Anzahl möglicher Hüllpunkte ausgehend von zwei Startpunkten. Wie viele Re-kursionsschritte bei gegebener Sensorauflösung benötigt werden, um das Supportpolygon gut zu approximieren, beschreibt Bild 6.3.

5 10 15 20 25 30

Rekursionstiefenin[−]

0.4

Bild 6.3:Approximation des Supportpolygon mithilfe desQuickhullAlgorithmus für verschiedene maximale Re-kursionstiefen.

Als Testbild wurde ein Binärbild mit einer möglichst großen Anzahl an Hüllpunkten ausgewählt, da dieses eine kritischen Fall abbildet. Die vollständige, konvexe Hülle der in Bild 6.3 links dar-gestellten Ellipse besitzt 20 Hüllpunkte. Als Gütekriterium der Approximation wird der Abwei-chungsquotientAAn

der approximierten HülleAnvon der vollständigen HülleAverwendet. Es wird deutlich, dass bei einer Rekursionstiefe vonn=3 der Flächeninhalt von der approximierten und der vollständigen Hülle nahezu übereinstimmen. Daher wird die Rekursionstiefe desQuickhull

6.4 Ergebnisvergleich von C- und MATLAB/Simulink-Implementierung 67

aufnma x =3 begrenzt und die CAN-Nachrichten dementsprechend für 16 Hüllpunkte dimensio-niert. Die Implementierung desQuickhullAlgorithmus, erweitert um die Abbruchbedingung zur Begrenzung der maximalen Anzahl an Hüllpunkten, zeigt Algorithmus 6.2 als Pseudocode.

Algorithmus 6.2Quickhull nach[52], erweitert um eine Abbruchbedingung zur Begrenzung der maximalen Anzahl an Hüllpunkten.

Require: finite set of pointsS with two-dimensional coordinates(x,y)

Ensure: list of points that belong to the convex hull in counter clockwise order

1: a⇐minS.x

2: b⇐maxS.x

3: recursion countern⇐0

4: functionQuickHull(a,b,S,n)

5: n+ +

6: if S={ }then

7: return { }

8: else

9: c⇐index of point with max distance from a b

10: ifn<nma x then

11: A⇐points strictly right of ac

12: B⇐points strictly right of c b

13: return {(QuickHull(a,c,A,n) ,c, QuickHull(c,b,B,n))}

14: else

15: return {c}

16: end if

17: end if