Bachelorarbeit - HS-OWL

Transcription

Bachelorarbeit - HS-OWL
Hochschule Ostwestfalen-Lippe
Fachbereich Elektrotechnik und Technische Informatik
Bachelorarbeit
des Herrn
Daniel Klose
Matr.-Nr.: 1522 2039
gemäß Bachelorprüfungsordnung für den Studiengang Elektrotechnik
in der Fassung der Bekanntmachung
vom 30. September 2008
(Verkündungsblatt der Hochschule 2008/Nr. 16).
Thema:
Programmierung eines mobilen Roboters
1. Prüfer/-in:
2. Prüfer/-in:
Prof. Dr.-Ing. Rolf Hausdörfer
Prof. Dr.-Ing. Thomas Korte
Die Bachelorarbeit umfasst 37 Seiten.
Erklärung
II
Ich erkläre, dass ich die vorliegende Bachelorarbeit selbstständig angefertigt habe.
Zur Anfertigung der Bachelorarbeit benutzte ich keine anderen als die angegebenen
Quellen und Hilfsmittel.
Die Ausfertigung als CD-ROM liegt bei.
Lemgo, den 23.11.2012
___________________________________
(Unterschrift des Autors)
Bachelorarbeit
WS12/13
Daniel Klose
Kurzfassung / Abstract
III
Kurzfassung
Die vorliegende Bachelorarbeit behandelt die Entwicklung einer Software für einen
mobilen Roboter, dessen Grundlage der c’t-Bot der gleichnamigen Zeitschrift ist. Die
Software ist in der Programmiersprache C geschrieben und läuft auf einen Mikrocontroller des Typs 68HCS12, der den Roboter steuert. Neben dem Aufbau der
Software werden in der Bachelorarbeit die Methoden und die Strategien beschrieben,
die zur Fortbewegung und zum Steuern des Roboters nötig sind. Dabei versucht die
Software den Stromverbrauch zu reduzieren, wenn der Roboter nicht genutzt wird.
Der Roboter kann von Studenten und Schülern genutzt werden, um an die hardwarenahe Programmierung herangeführt zu werden und vorhandene Kenntnisse zu vertiefen. Dazu können viele Funktionen der Software weiter genutzt werden und erleichtern das Erstellen von Anwendungen für den Roboter.
Abstract
The thesis explains the processing of a software for a robot, which is based on the
c’t-Bot of the so-called magazine c’t. The software is programmed with the programming language C and runs on a 68HCS12 microcontroller, which controls the
robot. The thesis also describes the structure of the software, but especially the methods and strategies to move and control the robot. The software tries to reduce the
energy consumption if the robot is not being used. Students can utilize the robot to
learn hardware-oriented programming and get practical experience. Many of the
software’s functions can be useful to extend it and allow creating new applications
for the robot.
Bachelorarbeit
WS12/13
Daniel Klose
Inhaltsverzeichnis
IV
Inhaltsverzeichnis
Kurzfassung/Abstract .............................................................................................. III
Inhaltsverzeichnis .................................................................................................... IV
Abbildungsverzeichnis............................................................................................. VI
Abkürzungsverzeichnis ..........................................................................................VII
1 Einleitung..................................................................................................................1
1.1 Einführung...........................................................................................................1
1.2 Ziele .....................................................................................................................1
2 Motorregelung ..........................................................................................................3
2.1 Modellbildung des Motors ..................................................................................3
2.2 Regelstreckenbildung ..........................................................................................6
2.3 Quasikontinuierlicher Reglerentwurf ..................................................................7
2.4 Diskretisierung der Regelung ..............................................................................9
2.5 Regelung im Programm ....................................................................................11
3 Fernbedienung .......................................................................................................12
3.1 RC5-Code ..........................................................................................................12
3.2 Entschlüsselung des RC5-Codes im Programm ................................................13
4 Positionsberechnung ..............................................................................................15
4.1 Daten des Positionssensors................................................................................15
4.2 Berechnung der Positionsdaten .........................................................................16
5 Distanzberechnung der Distanzsensoren .............................................................19
6 Transportfunktion .................................................................................................21
6.1 Hardwaremodifikation für den Antrieb der Klappe ..........................................21
6.2 Steuerung der Transportklappe .........................................................................22
7 Programmierte Anwendungen .............................................................................24
7.1 Freie Fahrt (free_drive) .....................................................................................24
7.2 Linienverfolgung (follow_line) .........................................................................25
7.3 Umgebung abfahren (area_ride)........................................................................27
7.4 Quadrat abfahren (square_drive) .......................................................................28
Bachelorarbeit
WS12/13
Daniel Klose
Inhaltsverzeichnis
V
7.5 Gegenstand suchen und aufnehmen (look_for_item)........................................29
7.6 An einer Linie anhalten und umdrehen (stop_at_line) ......................................30
7.7 Weitere Anwendungen ......................................................................................30
8 Energiesparoptionen ..............................................................................................31
8.1 Energiesparoptionen des Mikrocontrollers 68HCS12 ......................................31
8.2 Energiesparfunktion der Software .....................................................................31
9 Programmübersicht ...............................................................................................33
10 Aufgaben für das Praktikum ..............................................................................36
11 Zusammenfassung und Ausblick........................................................................37
12 Anhang ..................................................................................................................38
A
Funktionen der Programm-Module.................................................................38
Literaturverzeichnis .................................................................................................51
Bachelorarbeit
WS12/13
Daniel Klose
Abbildungsverzeichnis
VI
Abbildungsverzeichnis
Abbildung 1: Ersatzschaltbild einer permanenterregten Gleichstrommaschine ...........3
Abbildung 2: Wirkungsplandarstellung der Gleichstrommaschine ..............................4
Abbildung 3: Wirkungsplandarstellung des Motors .....................................................5
Abbildung 4: Vereinfachtes Regelstreckenmodell .......................................................7
Abbildung 5: Simulation des quasikontinuierlichen Entwurfs .....................................9
Abbildung 6: Simulation des diskreten Reglers mit den Regelparametern aus 2.3 ....10
Abbildung 7: Simulation des diskreten Reglers mit angepassten Parametern............10
Abbildung 8: Aufbau des RC5-Codes ........................................................................12
Abbildung 9: Beispielsignal eines RC5-Codes mit zugehörigen Bits .......................13
Abbildung 10: Entschlüsselung der Bitflanken des RC5-Codes ................................14
Abbildung 11: Empfangen und Senden eines Bytes vom/an Sensor ..........................15
Abbildung 12: Winkelposition nach dem Start...........................................................17
Abbildung 13: Berechnung der x- und y-Position (mit α = Winkelposition) .............17
Abbildung 14: Gegenüberstellung der approx. Kennlinie mit der Sensorkennlinie ..20
Abbildung 15: Strombegrenzungsschaltung für den Servo-Antrieb...........................21
Abbildung 16: Prozedur für das Aufnehmen und Ablegen eines Gegenstands ..........23
Abbildung 17: Tastenbelegung für die freie Fahrt des Roboters ................................25
Abbildung 18: Fuzzifizierung der Sensorwerte ..........................................................25
Abbildung 19: Ablaufdiagramm der Linienverfolgung ..............................................27
Abbildung 20: Zustandsdiagramm des Programms area_ride ...................................28
Abbildung 21: Zustandsdiagramm der Anwendung look_for_item ...........................29
Bachelorarbeit
WS12/13
Daniel Klose
Abkürzungsverzeichnis
VII
Abkürzungsverzeichnis
A
Amper
AD
Analog-Digital
AH-Glied
Abtast-Halte-Glied
B
Byte
CAN
Controller Area Network
CCD
Charge-Coupled Device
CCR
Condition Code Register
dpi
dots per inch
g
Gramm
H
Henry
Hz
Hertz
IR
Infrarot
IRQ
Interrupt Request
LED
Light Emitting Diode
m
Meter
N
Newton
PWM
Pulsweitenmodulation
r
Radius
s
Sekunde
SDIO
Serial Data Input Output
v
Geschwindigkeit
V
Volt
ω
Winkelgeschwindigkeit
Ω
Ohm
°
Grad
Bachelorarbeit
WS12/13
Daniel Klose
1 Einleitung
1
1
Einleitung
1.1 Einführung
Roboter erhalten in der modernen Gesellschaft einen wachsenden Stellenwert. In der
industriellen Welt nehmen sie zunehmend dem Menschen die Arbeit ab und erhöhen
die Produktivität eines Unternehmens, da sie in vielen Bereichen dem Menschen
überlegen sind. Roboter können meist Tätigkeiten schneller und präziser ausführen
und werden dabei nicht müde. Sie können schwere Teile bewegen und in Umgebungen arbeiten, die für einen Menschen gefährlich sind, und sie sind auf Dauer sogar
kostengünstiger.
In den letzten Jahren ist die Komplexität der Aufgaben für Roboter immer weiter
gewachsen. Erkennbar macht das auch die zunehmende Anzahl an Drohnen, die z.B.
vom Militär oder von der Polizei für Beobachtungen eingesetzt werden. Aufsehen
erregen auch immer die Mars Missionen, bei denen Roboter auf dem Mars landen
und zur Erforschung des erdnahen Planeten eingesetzt werden. Erst in diesem Jahr
hat der Mars-Rover „Curiosity“ spektakuläre Bildaufnahmen vom Mars geschickt
und bringt neue Erkenntnisse über den roten Planeten. Gesteuert werden solche Roboter von einer Software, die oft Aufgaben autonom erledigt, die für einen Menschen
trivial wären, aber für einen Roboter eine große Herausforderung sind. Diese Bachelorarbeit behandelt den Entwurf einer solchen Software, die einen Roboter teils autonom steuern soll, so dass bestimmte Aufgaben erledigt werden können.
1.2 Ziele
Im vorangegangen Praxisprojekt [1] ist die Hardware eines Roboters verbessert und
vor allem für einen anderen Mikrocontroller geändert worden. Als Grundlage hat der
c’t-Bot von der gleichnamigen Zeitschrift zur Verfügung gestanden, der als offenes
Projekt zur Verfügung steht. In dieser Arbeit soll die Software für den im Praxisprojekt umgebauten mobilen Roboter entwickelt werden, welche die Daten der Sensoren
verarbeitet und die Bewegung des Roboters steuert. Das Programm soll für den MikBachelorarbeit
WS12/13
Daniel Klose
1 Einleitung
2
rocontroller 68HCS12 entwickelt werden, der den Roboter steuern soll, und in der
Programmiersprache C geschrieben werden. Die Software soll dem Roboter ermöglichen, dass er Aufgaben, wie auf einer Linie fahren, ein Quadrat abfahren oder einen
Gegenstand aufnehmen, autonom bewältigen kann. Zudem muss sie die Anweisung
einer Fernsteuerung auswerten, so dass sich der Roboter dadurch bedienen lässt und
auch ein freies Fahren mittels der Fernbedienung ermöglicht wird. Da der Roboter
meist von Akkus betrieben wird, sollen auch die Energiespar-Optionen des Mikrocontrollers untersucht werden und in die Software integriert werden. Der Roboter
soll in Zukunft in Praktika für Studenten zur Verfügung stehen, die einige Funktionen selbst erarbeiten sollen, aber vor allem Funktionen dieser Software nutzen sollen,
um auf die Peripherie des Roboters zuzugreifen. Welche Funktionen des Programms
von Studenten selbst im Praktikum erarbeitet werden können, soll ein kleiner Randpunkt dieser Arbeit sein.
Bachelorarbeit
WS12/13
Daniel Klose
2 Motorregelung
2
3
Motorregelung
Der c’t-Bot besitzt zwei separate Gleichstrommotoren für den Antrieb seiner beiden
Räder. Angesteuert werden beide Motoren durch ein PWM-Signal
PWM Signal mit einer
eine Frequenz von 32 kHz, um die Motoren nicht zu sehr zu belasten und ein besseres FahrFah
verhalten zu erlangen [22].
]. Da beide Motoren nicht exakt gleich sind und einer
ei
der
Motoren immer eine andere Drehrichtung hat als der andere, fährt der Roboter bei
demselben PWM-Signal
Signal nicht geradeaus. Damit der Roboter geradeaus fährt, müssen
beide Räder mit gleicher Drehzahl laufen. Eine Drehzahlregelung hält die Drehzahl
eines Motors auf einen vorgegebenen Sollwert. Grundvoraussetzung für eine RegeReg
lung ist eine Messung der
de Ausgangsgröße, also der Drehzahl, die im
m Fall des Roboters durch die Radencoder Sensoren aufgenommen werden können. Durch den VerVe
gleich des Ist-Werts
Werts am Ausgang mit dem Soll-Wert
Soll Wert kann eine Abweichung berechberec
net werden, die ein entsprechendes Handeln
Hand
der Regelung ermöglicht.
ermöglicht Die Regelung
verhindert auch, dass sich die sinkende Akkuspannung auf das PWM-Signal
PWM
und
somit die Drehzahl der Räder auswirkt. Ohne eine Regelung ist die Steuerung des
Roboters schwierig, so dass die Erstellung einer Regelung fast unumgänglich ist.
2.1 Modellbildung des Motors
Um die Regelstrecke für die Motorregelung beschreiben zu können, wird das in AbA
bildung 1 gezeigte vereinfachte Ersatzschaltbild einer permanenterregten Gleichstrommaschine herangezogen.
Abbildung 1: Ersatzschaltbild einer permanenterregten Gleichstrommaschine
Gleichstrommas
(vgl. [3][4])
Bachelorarbeit
WS12/13
Daniel Klose
2 Motorregelung
4
Aus dem Ersatzschaltbild (Abb. 1) ergibt sich die Spannungsgleichung (1), die zu der
Übertragungsfunktion (2) führt. Wie aus (2) ersichtlich, handelt es sich bei der Übertragungsfunktion um ein Verzögerungsglied erster Ordnung (PT1-Glied).
∙
∙
∙
∙ ∙
(1)
L
⟺ 1
∙
1
1
∙
,
(2)
Abbildung 2: Wirkungsplandarstellung der Gleichstrommaschine
Uq(t) - Ankerspannung
Rq
- Anschlusswiderstand
Ui(t)
- induzierte Gegenspannung
Lq
- Anschlussinduktivität
Iq(t)
- Ankerstrom
Ta
- Zeitkonstante
Bei einer permanenterregten Gleichstrommaschine ist der Erregerfluss konstant und
wird durch den Faktor der Motorkonstante km beschrieben. Die Proportionalität der
Konstanten mit dem Strom iq(t) ergibt das Drehmoment MM(t) des Motors (3). Desweiteren ergibt sich aus der Drehmomentbilanz die Bewegungsdifferenzialgleichung
(4) für starr gekoppelte Schwungmassen mit der Winkelgeschwindigkeit ω(t). Da die
Drehung des Rotors im konstanten Erregerfeld die gegeninduktive Spannung ui(t)
erzeugt, kann diese Spannung durch den proportionalen Zusammenhang mit der
Drehzahl n durch (5) beschrieben werden. [3][4]
Bachelorarbeit
WS12/13
Daniel Klose
2 Motorregelung
5
∙
(3)
L
∙
(3)
MM(t) - Drehmoment des Motors
km
- Motorkonstante
!∙
"
#
(4)
#
(4)
L
! ∙ ∙ Ω s
1
∙
!∙
⟺ Ω
J
- Trägheitsmoment des Motors
ω(t)
- Winkelgeschwindigkeit
#
ML(t) - Lastmoment
∙ 2' ∙ (
∙)
(5)
L
∙Ω
(5)
Aus den Formeln ergibt sich der in Abbildung 3 zusammenhängende Wirkungsplan
für den Motor, bei dem das Lastmoment zur Vereinfachung zu Null idealisiert ist.
Abbildung 3: Wirkungsplandarstellung des Motors
Bachelorarbeit
WS12/13
Daniel Klose
2 Motorregelung
6
2.2 Regelstreckenbildung
Aus dem in Kapitel 2.1 aufgestellten Signalfluss kann die Übertragungsfunktion (6)
für den Motor erstellt werden und ergibt den ersten Teil der Regelstrecke.
⟹ Ω s
1
∙
!
⟺ Ω
1
! ∙
1
1 ! ∙
∙
1
∙
1
1
+
∙
∙1
1
Ω
⟺ ,
1
+-
!
∙
1
∙1
1
∙Ω
1
.
∙
!
-
(6)
.
Um die Regelstrecke zu komplettieren, müssen noch das Stellglied und die Messeinrichtung betrachtet werden. Die Ankerspannung wird aus einem PWM-Signal des
Mikrocontrollers gebildet, wodurch die Spannung verändert werden kann. Denn die
Nutzspannung, mit der der Motor arbeitet, ergibt sich aus dem Tastverhältnis des
PWM-Signals (siehe (7)).
/
∙
0120
3
/
∙ 4 5678ä: ( ,
; <;
=>?
(7)
Das Einstellen des PWM-Signals im Programm erfolgt durch die Angabe der Pulsbreite thigh mit einem digitalen Wert von 0 bis 255. Dieser Wert ist die Stellgröße des
späteren digitalen Reglers und legt die maximale Periode T des Tastverhältnisses auf
255 fest. Die Eingangsspannung Ue ist die maximale Spannung, die eingestellt werden kann, und ist durch die Betriebsspannung (Akkuspannung) definiert. Die Akkuspannung liegt etwa bei 6 V, was auch der Nennspannung des Motors entspricht. Die
Ankerspannung Uq ergibt sich daher aus der Stellgröße y mit der Gleichung (8).
B
6A ∙ +CC ∙ D
(8)
Durch die optischen Radencoder Sensoren kann die Geschwindigkeit des Rads ermittelt werden. Die Geschwindigkeit ist auch die Sollgröße, auf die geregelt werden soll.
Bachelorarbeit
WS12/13
Daniel Klose
2 Motorregelung
7
Um aus der Winkelgeschwindigkeit ω des Motors die Geschwindigkeit v des Rads
zu berechnen, reicht eine Multiplikation mit dem Radius r des Rads. Für die Geschwindigkeit in mm/s erfolgt die Umrechnung mittels Gleichung (9).
E
5
FGH/I
∙)
, 7 (
(9)
Damit ist das vereinfachte Regelstreckenmodell vollständig und wird in Abbildung 4
dargestellt sowie durch (10) beschrieben. Mit der Regelstrecke ist eine Berechnung
des digitalen Reglers möglich und wird in Kapitel 2.3 betrachtet.
E
,H
FG
F
∙,
∙ +CC
JH ∙ ,
,
E∙F
JH
FG∙+CC
(10)
Abbildung 4: Vereinfachtes Regelstreckenmodell
2.3 Quasikontinuierlicher Reglerentwurf
Um einen digitalen Regler zu berechnen, wird in der Praxis häufig die Regelung als
eine „quasi zeitkontinuierliche“ Regelung betrachtet, damit die Berechnung nicht
unnötig komplex wird. Denn ein quasikontinuierlicher Entwurf, in der das AbtastHalte-Glied (AH-Glied) approximiert wird, reicht oft schon aus, um ein geeignetes
Regelverhalten zu erzielen. Das AH-Glied wird wegen seines Frequenzgangs als
Totzeitglied approximiert und kann mit der Potenzreihenentwicklung der e-Funktion
vereinfacht durch ein PT1-Glied beschrieben werden (siehe (11)). [5]
,KL
Bachelorarbeit
1
3
M 6 NH+
1
B
+ B
+
2
WS12/13
⋯
M
1
1
B
,
B
2
(11)
Daniel Klose
2 Motorregelung
8
Das Verhalten des AH-Glieds wird in den Regelkreis eingefügt und damit berücksichtigt. Der offene Regelkreis kann nun mit (12) beschrieben werden.
,>
,H
∙ ,KL
∙ ,P
(12)
Für die Regelung wird ein PI-Regler verwendet, durch dessen Übertragungsfunktion
(13) sich der offene Regelkreis zu (14) ergibt und der geschlossene Regelkreis (15)
aufgestellt werden kann.
,P
,>
,?
S
!
B R
T
R
!
JQ ∙
JQ JH 1
R
+
B
Z[
Z[
UHa 3V
HW 3X 3V 3Y
\] \^ _`
\] \^ _`
a4
1
BUH3V
3Y U3X UHb R
(13)
R
!
R-
B
.
(14)
R
cV Z[
_
d
U3X e` fUH3V - ` UB.UB
\] \^ _`
\] \^
a3
a1
a2
(15)
a0
Zur Berechnung der Regelparameter wird das Betragsoptimum herangezogen, welches das Ziel anstrebt, den Betrag der Führungsübertragungsfunktion Gw(s) für möglichst viele Frequenzen an den Betrag „1“ anzunähern. Der Zähler der Übertragungsfunktion wird durch einen vorgeschalteten Führungsfilter (16) kompensiert. Durch
Bildung des Nenner-Betrags ergeben sich die Forderungen aus (17) und (18), um den
Nenner bei möglichst vielen Frequenzen um ω = 0 mit den zwei freien Parametern
des PI-Reglers an den Betrag „1“ anzuschmiegen. [4]
,g
|i j) |+
Betrag des Nenners:
4G +
)+ 4B +
24G 4+
)S 4+ +
i j) ∙ i
24G 4S
(16)
R
24B 4T
j)
)F 4T +
24+ 4S
)k 4S +
=0
=0
4+ +
Bachelorarbeit
1
1
4B +
24G 4S
24G 4+
24B 4T
WS12/13
0
0
(17)
(18)
Daniel Klose
2 Motorregelung
9
Mit (17) und (18) lassen sich die beiden Reglerparameter für Verstärkung Kp und
Nachstellzeit Tn berechnen und erhält mit den folgenden Werten des Faulhaber Motors 2619 006 SR
Rq = 8,2 Ω
Lq = 465 µH
J = 0,68 gcm2
km = 8,59 mNm/A
und einer Abtastzeit von T = 0,25 s die Werte:
Kp1 ≈ 6,4
(Kp2 ≈ 1789,5)
Tn1 ≈ 0,013
(Tn2 ≈ 0,00005)
Die Simulation zeigt ein gutes und schnelles Regelverhalten mit den beiden Parametern (siehe Abb. 5).
Abbildung 5: Simulation des quasikontinuierlichen Entwurfs
2.4 Diskretisierung der Regelung
Im Programm muss der Regler und auch der Führungsfilter diskret implementiert
werden. Mit der Trapezregel ergibt sich für den PI-Regler die Summenformel (19)[5]
und für den Führungsfilter die Form (20).
De
JQ ∙ 6e
Dm,e
De
Bachelorarbeit
, Dm,e
3
3U+3V
∙ 6e
Dm,eNB
6eNB
WS12/13
3
JQ ∙ +3 ∙ 6e
3N+3V
3U+3V
V
∙ DeNB
6eNB
(19)
(20)
Daniel Klose
2 Motorregelung
10
Die Simulation der diskreten Regelung mit den aus Kapitel 2.3 berechneten Werten
für den Regler ergibt das in Abbildung 6 gezeigte Verhalten. Der Regler übersteuert
aufgrund der relativ hohen Abtastzeit von 0,25 Sekunden.
Abbildung 6: Simulation des diskreten Reglers mit den Regelparametern aus 2.3
Die Berechnung der Regelparameter mit dem digitalen Betragsoptimum würde sehr
komplex werden und den Rahmen sprengen. Die empirische Ermittlung aus dem
vorhandenen System verspricht eine schnellere und einfachere Lösung. Durch Herabsetzen der Verstärkung Kp und etwas Erhöhen der Nachstellzeit Tn lässt sich ein
gutes Regelverhalten in der diskreten Simulation erzielen. Abbildung 7 zeigt das
Regelverhalten des Modells mit den folgenden Werten:
Kp = 0,2
Tn = 0,1
Abbildung 7: Simulation des diskreten Reglers mit angepassten Parametern
Bachelorarbeit
WS12/13
Daniel Klose
2 Motorregelung
11
2.5 Regelung im Programm
In den vorangegangenen Kapiteln ist der Roboter mit seinem Antriebssystem durch
ein Modell beschrieben worden, welches natürlich nicht ganz der Realität entspricht.
In ersten Tests der Regelung sind die Parameter daher dem realen System angepasst
worden, wobei vor allem die Nachstellzeit Tn etwas erhöht worden ist. Dadurch ist
die Regelung zwar träger, aber verbessert die Fahreigenschaften des Roboters und
eine extra Anfahrtsprozedur ist ebenfalls nicht nötig. Der Regler arbeitet auf dem
68HCS12 nun mit den Parametern
Kp = 0,3 und Tn = 0,8.
Um das Verhalten der Regelung weiter zu verbessern, wird die Ist-Größe durch den
Mittelwert von mehreren Messungen gebildet. Jeder Interrupt, der durch die RadEncoder Sensoren ausgelöst wird, entspricht einer zurückgelegten Strecke des Rades
von 3 mm. Diese Eigenschaft macht die Messung schon nicht besonders exakt. Hinzu kommt, dass durch äußere Einflüsse wie Streulicht oder ähnliches, eine Kante der
Encoder-Scheibe gelegentlich nicht erkannt wird und dadurch die Messung verfälscht wird. Die Geschwindigkeit, die alle 100 ms aus der gefahrenen Strecke des
Rades aufgenommen wird, wird für die Regelung aus den letzten drei Messwerten
ermittelt, wodurch das Verhalten der Regelung während der Fahrt ruhiger wird.
Die Regelung wird im Programm von der Funktion speed_control gesteuert. Als
Eingangswerte bekommt die Funktion die Soll-Geschwindigkeitswerte (in mm/s) für
den rechten und linken Motor. Die Funktion muss in einer Schleife immer wieder
aufgerufen werden, jedoch wird die Funktion erst durch Erreichen der Abtastzeit
durchlaufen. Bedingung für die Funktion der Regelung ist die Aktivierung der RadEncoder Sensoren über die enable Funktion, da ohne die Sensoren die Geschwindigkeit nicht berechnet werden kann. Die Richtung des Rads wird durch die Vorzeichen
der Geschwindigkeitssollwerte bestimmt, wobei eine negative Sollgeschwindigkeit
eine Rückwärtsdrehung des Rads bewirkt. Durch die Motorregelung ist die Steuerung des Roboters vereinfacht und verbessert worden, wodurch die Grundlage für
das weitere Programm geschaffen worden ist.
Bachelorarbeit
WS12/13
Daniel Klose
3 Fernbedienung
3
12
Fernbedienung
3.1 RC5-Code
Zur Übertragung benutzen die meisten Fernbedienungen den RC5-Code
RC5
als Verschlüsselung. Der RC5--Code
Code besteht aus 14 Bits und ist wie in Abbildung 8 aufgeaufg
baut.
Abbildung 8: Aufbau des RC5-Codes
RC5
[6]
Neben 5 Adressbits und 6 Kommandobits besteht der RC5-Code
RC5 Code noch
noc aus 2 Startbits
und einem Togglebit. Wenn das zweite Startbit nicht als siebtes Kommandobit agiert,
um die Befehlszahl zu erhöhen, sind die ersten beiden Bits des RC5-Codes
RC5
immer
„1“. Das Togglebitt ändert bei jedem Tastendruck seinen Zustand, wodurch ein neuer
Tastendruck erkannt wird. Wird eine Taste auf der Fernbedienung gedrückt gehalten,
behält das Togglebit den Zustand. Durch die Adressbits erkennt das Gerät, ob der
Befehl verarbeitet werden muss oder der Befehl für ein anderes Gerät bestimmt ist.
In den Kommandobits ist die Information enthalten, welche Taste gedrückt wurde.
Der RC5-Code ist, ähnlich wie der bekannte Manchester-Code,
Manchester
taktflankengesteuert;
d.h., dass die Richtung einer Flanke im Signal darüber entscheidet, ob der Zustand
des Bits „1“ oder „0“ ist. Bei dem RC5-Code
Code steht eine fallende Flanke für eine logilog
sche „1“ und eine steigende Flanke für eine logische „0“. Abbildung 9 zeigt ein BeiBe
spielsignal mit der entsprechenden Auswertung der Bits.
Bachelorarbeit
WS12/13
Daniel Klose
3 Fernbedienung
13
Abbildung 9: Beispielsignal eines RC5-Codes mit zugehörigen Bits [7]
3.2 Entschlüsselung des RC5-Codes im Programm
Das RC5-codierte Signal wird von einem Pin des Ports T aufgenommen und durch
den Timer-Baustein des Mikrocontrollers ausgewertet. Jede Flanke löst einen Interrupt aus, so dass zu jeder Zeit ein Kommando der Fernbedienung entgegen genommen werden kann. Da durch die Selbsttaktung nicht jede Flanke des Signals zu einem Bit gehört, ist der Zeitabstand zwischen den Flanken von großer Bedeutung, um
das Signal auswerten zu können. Wie in [1] beschrieben und in Abbildung 8 ersichtlich, dauert die Übertragung eines Bits 1,778 ms. Die Flanken, die zwischen den Bits
nach der Hälfte der Zeit aufkommen können, müssen ignoriert werden. Durch eine
Zeitbasis, die mit dem Modulus Down Counter des Timer-Bausteins vom Mikrocontroller erzeugt wird, werden nur Flanken bearbeitet, die nach 1,5 ms erkannt werden.
Daher ist die Zeitbasis des Modulus Down Counter auf 500 µs festgelegt worden,
wodurch sich die Zeitbasis von 1 ms für beispielsweise die Geschwindigkeitsberechnung der Räder berechnen lässt. Die erste Flanke des Signals ist immer bereits die
fallende Flanke des Startbits, weil das Signal durch einen Pull-Up Widerstand im
Empfänger Sensor auf High-Status liegt (vgl. Datenblatt TSOP34836). Diese Flanke
dient als Referenz dafür, welche Flanken durch die Zeit ignoriert werden und welche
ausgewertet werden. Nach dieser Vorauswahl werden die Bits gemäß Abbildung 10
entschlüsselt. Wird eine Taste dauerhaft gedrückt, wiederholt sich das Signal nach
etwa 113 ms. Daher wird in der Auswertung alles zurückgesetzt, wenn die letzte
Flanke vor mehr als 30 ms ausgelöst wurde. Ein Zähler sorgt dafür, dass die Bits an
die richtige Stelle des Datenworts gesetzt werden und das Ende der Übertragung erkannt wird. Ob es sich bei dem ausgelösten Interrupt um eine fallende oder steigende
Flanke handelt, wird durch die Abfrage des Pegels am Portpin nach dem Interrupt
festgestellt. Erst wenn ein Befehl komplett übertragen wird, übernimmt das ProBachelorarbeit
WS12/13
Daniel Klose
3 Fernbedienung
14
gramm ihn in eine entsprechende Variable,
Variable, die im weiteren Programm verwendet
und ausgewertet werden kann. [6][7]
Abbildung 10: Entschlüsselung der Bitflanken des RC5-Codes
RC5 Codes
Bachelorarbeit
WS12/13
Daniel Klose
4 Positionsberechnung
4
15
Positionsberechnung
4.1 Daten des Positionssensors
Der aus einer Lasermaus stammende Positionssensor liefert Daten zur Bewegung.
Durch einen CCD-Kamerachip wird die Bewegung des Untergrunds erkannt und als
Daten in Register abgelegt. Die Daten für die x- und y-Bewegung können über eine
SDIO-Schnittstelle vom Sensor ausgelesen werden (siehe [1]). Abbildung 11 zeigt
wie das Senden und Empfangen der Datenbytes realisiert ist.
Abbildung 11: Empfangen (links) und Senden (rechts) eines Bytes vom/an Sensor
Bachelorarbeit
WS12/13
Daniel Klose
4 Positionsberechnung
16
Bei einer fallenden Flanke wird das Datenbit geändert und bei folgender steigender
Flanke wird das Bit übernommen. Für das Empfangen eines Bytes heißt das, dass der
Port bei einem High-Zustand des Takts ausgelesen werden muss und für das nächste
Bit der Takt einmal gewechselt werden muss. Wenn ein Byte gesendet werden soll,
muss das nächste Bit im Low-Status des Takts auf die Datenleitung gelegt werden,
damit es beim Taktwechsel vom Sensor übernommen wird. Dadurch können Register
des Sensors ausgelesen werden oder Daten in Register geschrieben werden.
Die x- und y-Bewegungen speichert der Sensor in zwei dafür vorgesehene Register.
Um die Register auslesen zu können, muss vorher das Motion-Bit des Motion_Status
Registers ausgelesen werden. Das Motion-Bit gibt ebenfalls Aufschluss darüber, ob
überhaupt eine Bewegung stattgefunden hat. Wenn das Motion-Bit „1“ ist, hat eine
Bewegung stattgefunden und beide Register (X- und Y-Register) müssen ausgelesen
werden. Das Auslesen der Register löscht gleichzeitig auch den Inhalt, so dass ein
doppeltes Abfragen der gleichen Bewegung ausgeschlossen ist. Die Werte der Register liegen zwischen -128 und +127 und sind noch keine Distanzmaße. Die Distanzumrechnung hängt von der Auflösung des Sensors ab, die sich durch die höhere
Montage des Sensors im Vergleich zur Maus verändert hat. Durch Messungen ist der
Umrechnungsfaktor der Werte bei etwa 0,0287 mm festgelegt worden. Damit ist dies
die kleinstmögliche Bewegung, die der Sensor aufnimmt und die Auflösung des Sensors beträgt dadurch etwa 900 dpi. [1]
4.2 Berechnung der Positionsdaten
Durch die x- und y-Daten des Positionssensors kann die aktuelle Position sowie der
Drehwinkel des Roboters ermittelt werden. Nach einer Umrechnung der Daten des
Sensors ergeben sich für eine Vorwärtsbewegung positive y-Distanzwerte und für
eine Rechtsbewegung positive x-Distanzwerte. Da der Positionssensor nicht zentral
unter dem Roboter sitzt, erfasst der x-Wert jede Rotationsbewegung. Mit dem Abstand des Sensors zum Mittelpunkt des Roboters ergibt sich der Radius des Kreises,
den der Sensor bei einer Drehung des Roboters abfährt. Mit dem sich aus dem Radius ergebenden Umfang und der zurückgelegten Strecke (x-Wert) lässt sich näherungsweise der Drehwinkel berechnen, den der Roboter zurücklegt. Der Winkel des
Bachelorarbeit
WS12/13
Daniel Klose
4 Positionsberechnung
17
Roboters steht in der
er Variablen bot_angle,, wodurch der Roboter seine aktuelle BlickBlic
richtung kennt (siehe Abb. 12).
1
Abbildung 12: Winkelposition nach dem Start
Mit dem Drehwinkel lässt sich die x- und y-Position bestimmen, denn die Positionen
beziehen sich wie in einem Koordinatensystem auf den Ursprungspunkt – dem Startpunkt. Mit dem y-Wert
Wert des Positionssensors und der Trigonometrie lassen sich so die
Veränderungen auf
uf der xx und y-Achse berechnen. [8]
y
D
q
s
∙ cos p
(21)
∙ sin p
(22)
α
x
Abbildung 13: Berechnung der x- und y-Position (mit α = Winkelposition)
Bachelorarbeit
WS12/13
Daniel Klose
4 Positionsberechnung
18
Das Nutzen des Positionssensors für die zurückgelegte Strecke, die Berechnung der
Position und des Drehwinkels hat viele Vorteile und kann für verschiedene Aufgaben
genutzt werden. Jedoch ist die Positionsberechnung mit Toleranzen verbunden, die
sich besonders bei immer größer werdenden Strecken, die der Roboter zurücklegt,
bemerkbar machen. Die Fehler summieren sich immer weiter auf, so dass die Position ungenau wird und irgendwann nicht mehr zu gebrauchen ist. Wie bei Computermäusen üblich, können auch unterschiedliche Untergründe die Messung verfälschen
oder sogar unmöglich machen. Dennoch ist der Positionssensor eine große Bereicherung und macht z.B. Distanzfahrten zuverlässiger und genauer als es die Odometrie
könnte. Die Variablen für die x- und y-Position sowie dem Drehwinkel stehen der
kompletten Software zur Verfügung und werden lediglich durch die Funktion update_position aktualisiert, die immer wieder aufgerufen werden muss, wenn sich der
Roboter bewegt.
Bachelorarbeit
WS12/13
Daniel Klose
5 Distanzberechnung der Distanzsensoren
5
19
Distanzberechnung der Distanzsensoren
Die Distanzsensoren Sharp GP2Y0A21YK, die die Front des Roboters nach Hindernissen abtasten, liefern eine analoge Spannung, die ein Analog/Digital-Umsetzer des
Mikrocontroller 68HCS12 aufnimmt und verarbeitet. Die Ausgangsspannung der
Sensoren verhält sich nicht proportional zur Entfernung (siehe [1]), wodurch eine
spezielle Umrechnung erforderlich ist, die die Ausgangskurve approximiert. Mit der
Näherungsformel (23) können Teile der Ausgangsspannung/Distanzkennlinie nachgebildet werden, denn eine komplette Approximation der Kennlinie ist nicht möglich. Aufgrund der Ungleichheit der Sensoren wird die Näherung für beide Sensor
einzeln berechnet. [9]
t
q
4
(23)
u
d – Distanz
a – Steigungskonstante
b – Offsetkonstante
x – AD-Wert des Sensors
Durch Messungspunkte werden die Konstanten berechnet, wodurch sich zwei Funktionen für die Distanzbereiche von 7 cm-15 cm und 15 cm-30 cm ergeben. Der dritte
Abschnitt ab 30 cm wird durch eine lineare Funktion approximiert, da die Kurve ab
dieser Entfernung enorm abflacht und die Messungen der Sensoren ab dieser Distanz
recht ungenau werden. In Abbildung 14 ist die approximierte Kurve für den rechten
Distanzsensor mit der Ausgangskennlinie des Datenblatts gegenübergestellt. Eine
Approximation für größere Distanzen ist nicht behandelt worden, da die Sensoren in
diesen Bereichen unzuverlässig arbeiten. Besonders der linke Sensor hat bei größeren
Distanzen Probleme, da er um 180° gedreht ist und dadurch nahe über den Boden
schaut. Das hat zur Folge, dass ab einer Distanz von etwa 40 cm beim linken Sensor
keine Messung mehr möglich ist. Bei unglücklichen Verhältnissen kann es auch
vorkommen, dass der linke Sensor durch Streulicht vom Boden beeinflusst wird und
die Messwerte verfälscht. Der rechte Sensor hat diese Probleme weniger, dennoch
sind Messungen auf größeren Distanzen nicht besonders zuverlässig. Da die primäre
Aufgabe der Sensoren das Verhindern eines Zusammenpralls mit einem Hindernis
Bachelorarbeit
WS12/13
Daniel Klose
5 Distanzberechnung der Distanzsensoren
20
ist, sind größere Entfernung auch weniger interessant. Das Erkennen eines kleineren
Objektes, das für das Suchen eines Gegenstandes verwendet wird, ist dadurch mit
diesen Sensoren nur begrenzt möglich. Im Programm wird vorwiegend mit einem
Distanzbereich von kleiner als 20 cm gearbeitet, da die Sensoren in diesem Bereich
zuverlässig arbeiten. Damit der Roboter gegen kein Hindernis fährt, reicht es aus,
wenn Distanzen kleiner als 15 cm berücksichtigt werden.
Abbildung 14: Gegenüberstellung der approximierten Kennlinie mit der Sensorkennlinie [10]
Bachelorarbeit
WS12/13
Daniel Klose
6 Transportfunktion
6
21
Transportfunktion
6.1 Hardwaremodifikation für den Antrieb der Klappe
Für die Nutzung der Transportklappe ist eine Schaltungsänderung vorgenommen
geworden. Im Akkubetrieb verursacht der Servo-Antrieb bei seiner Nutzung ein Abstürzen des Mikrocontrollers. Verursacht wird das Problem durch eine sehr hohe
Stromspitze beim Anlauf des Antriebs, welche durch den Innenwiderstand der Akkus
die Spannung für einen kurzen Moment so weit einbrechen lässt, dass die Spannungsversorgung für den Mikrocontroller zusammenbricht. Durch den Betrieb über
ein strombegrenzendes Netzteil ist die Höhe der Stromspitze auf etwa 800 mA eingegrenzt worden. Das Fehlersignal, welches bei größeren Strömen des ServoAntriebs ausgelöst wird, kann in der kurzen Zeit nicht ausgelesen werden und würde
nicht hilfreich sein, da der Fehler bei jedem Anlauf des Antriebs ausgelöst wird. Aus
diesem Grund ist eine Strombegrenzungsschaltung (siehe Abb. 15) eingefügt worden, die durch zwei NPN-Transistoren den Strom auf maximal 270 mA begrenzt.
Versorgungsspannung des
Servo-Antriebs
5V Spannungsversorgung
Abbildung 15: Strombegrenzungsschaltung für den Servo-Antrieb
Die Begrenzung des Stroms verhindert das Abstürzen des Mikrocontrollers und lässt
den Servo-Antrieb auch langsamer in Position fahren, jedoch hat er dadurch auch
weniger Stellkraft. Der Eingriff in die Schaltung wurde mittels einer kleinen Lochrasterplatine realisiert, jedoch kann die Schaltung ohne Probleme in das Layout der
Hauptplatine integriert werden. Es gibt keine Informationen darüber, ob das Problem
mit dem Servostrom auch bei anderen Nutzern des c’t-Bots vorgekommen ist, jedoch
Bachelorarbeit
WS12/13
Daniel Klose
6 Transportfunktion
22
kann ausgeschlossen werden, dass das Problem an der neuen Beschaltung aus dem
Praxisprojekt [1] liegt.
6.2 Steuerung der Transportfunktion
Für die Steuerung der Klappe wird der Servo-Antrieb mit einem PWM-Signal von
50 Hz vom Mikrocontroller betrieben. Die Pulsdauer der 20 ms langen Periode entscheidet über die Winkelposition des Servo-Antriebs und beträgt für den ersten Anschlag 1 ms und für den zweiten Anschlag, der um 180° zum ersten Anschlag gedreht ist, 2 ms. Für die Klappe wird nicht der komplette Drehwinkel des ServoAntriebs benötigt, wodurch sich für die Positionen für „Klappe Offen“ und „Klappe
Geschlossen“ jeweils eine Pulsdauer zwischen 1 ms und 2 ms ergibt. [1]
Ob die Transportbox leer ist oder sich etwas in der Box befindet oder ob die Transportklappe geöffnet oder geschlossen ist, kann über Sensoren abgefragt werden. Für
diese Anwendungen enthält das Modul transport entsprechende Funktionen, die den
Status der Klappe oder Box zurückgeben. Durch die Strombegrenzung aus Kapitel
6.1 ist die vorgesehene Fehlermeldung für die zu große Stromaufnahme des ServoAntriebs nicht mehr aussagekräftig, da der Servo-Antrieb über eine Zeit den maximalen Strom der Schaltung nutzt. Eine maximale Zeit, die das Fehlersignal anliegen
darf, kann als Sicherheitsfunktion genutzt werden, falls der Servo-Antrieb beispielsweise blockiert ist und abgeschaltet wird. Im Programm ist jedoch eine generelle
Zeitschaltung vorhanden, die nach 3 Sekunden betrieb den Servo-Antrieb ausschaltet, so dass das Fehlersignal nicht nötig ist.
Des Weiteren sind im Programm zwei Funktionen vorhanden, die für das Aufnehmen und Ablegen eines Gegenstandes zuständig sind. Beide Prozeduren funktionieren anwendungsorientiert, so dass ein Gegenstand auch nur dann abgelegt wird,
wenn sich eines in der Transportbox befindet oder wenn sich nach einer bestimmten
Distanz kein Gegenstand in der Transportbox befindet, der Vorgang abgebrochen
wird. Ein Ablaufplan für das Aufnehmen und Ablegen eines Gegenstandes ist in Abbildung 16 dargestellt.
Bachelorarbeit
WS12/13
Daniel Klose
6 Transportfunktion
23
Abbildung 16: Prozedur für das Aufnehmen (links) und Ablegen (rechts)
eines Gegenstands
Bachelorarbeit
WS12/13
Daniel Klose
7 Programmierte Anwendungen
7
24
Programmierte Anwendungen
Nach dem Start des Roboters kann mit der Fernbedienung zwischen 6 Programmen
gewählt werden, die unterschiedliche Aufgaben erledigen. Durch einen Tastendruck
auf den Zahlentasten 1-6 kann das gewünschte Programm gewählt werden. Nachfolgend sind die programmierten Anwendungen mit der zugehörigen Tastennummer
aufgelistet:
1. Freie Fahrt (ferngesteuertes Fahren)
2. Linienverfolgung
3. Umgebung abfahren
4. Quadrat abfahren
5. Gegenstand suchen und aufnehmen
6. An einer Linie anhalten und umdrehen
Zudem kann über die Power Taste der Fernbedienung der Roboter in einen Power
Down Modus versetzt werden. Erhält der Roboter nach dem Start oder nach Beendigung eines der oben genannten Programme länger als 5 Minuten keinen neuen Befehl für eine Anwendung, wird ebenfalls der Power Down Modus aktiviert, um
Strom zu sparen.
7.1 Freie fahrt (free_drive)
Im Modus der freien Fahrt kann der Roboter ferngesteuert werden und handelt nach
den Anweisungen der Fernbedienung. Das Handling ist jedoch etwas anders als bei
einem gewöhnlichen ferngesteuerten Auto. Wird eine Taste einmal gedrückt, führt
der Roboter diese Bewegung aus bis eine andere Taste gedrückt wird. Wenn also der
Roboter vorwärts fährt und die Taste zur Linksfahrt gedrückt wird, fährt der Roboter
so lange eine Linkskurve bis die Taste für die Vorwärtsfahrt gedrückt wird. Ein dauerhafter Tastendruck hat dadurch keine Auswirkungen auf das Verhalten des Roboters. In Abbildung 17 ist die Tastenbelegung auf der Fernbedienung dargestellt, die
zum Steuern des Roboters im Programm der freien Fahrt benötigt wird.
Bachelorarbeit
WS12/13
Daniel Klose
7 Programmierte Anwendungen
25
Transportklappe schließen
Vorwärts
Transportklappe öffnen
Rechts
Links
Rückwärts
Programm verlassen
Stopp/Anhalten
Geschwindigkeit
erhöhen (+)
verringern (-)
Drehung auf der Stelle
(+) linksherum
(-) rechtsherum
Abbildung 17: Tastenbelegung für die freie Fahrt des Roboters [11]
7.2 Linienverfolgung (follow_line)
Im Modus der Linienverfolgung soll der Roboter auf einer schwarzen Linie fahren
und diese nicht verlassen. Dafür stehen ihm zwei Sensoren unterhalb des Roboters
zur Verfügung, die durch Reflexionseigenschaften des Untergrunds eine analoge
Spannung erzeugen, welche der AD-Umsetzer des Mikrocontrollers in Werte für das
Programm umwandelt. Für eine gute Fahrt auf der Linie ist im ersten Versuch eine
Fuzzy-Regelung entworfen worden, die die Werte der Sensoren verarbeitet und
durch das Prinzip der Fuzzy-Logik einen Stellwert für die Motoren erzeugt.
µ
1
wenig
mittel
viel
Sensorwert
Abbildung 18: Fuzzifizierung der Sensorwerte (vgl. [12])
Die Bildung eines Fuzzy-Reglers durchläuft 3 wesentliche Schritte. Bei der Fuzzifizierung mittels Fuzzy-Mengen (siehe Abb. 18) wird die Regeldifferenz bzw. hier
der Sensorwert einer Funktion zugeordnet, die aus „wenig“, „mittel“ und „viel“ an
Abweichung besteht. Der daraus resultierende Erfüllungsgrad µ wird in der Inferenz
weiterverarbeitet und ergibt durch festgelegte Regeln einen Erfüllungsgrad für die
Stellgrößen-Fuzzy-Mengen. Daraus wird in der Defuzzifizierung die Stellgröße für
die beiden Motoren berechnet. Der Vorgang einer Fuzzy-Regelung ist sehr rechenin-
Bachelorarbeit
WS12/13
Daniel Klose
7 Programmierte Anwendungen
26
tensiv, scheint aber für diese Anwendung die optimale Lösung zu sein. Dennoch ist
das Ergebnis der Regelung nicht nutzbar. Da es schwierig ist eine Fuzzy-Regelung
anzupassen und zu verfeinern, ist die Methode der Fuzzy-Regelung nach einigen
Versuchen verworfen worden. [12]
Im zweiten Versuch ist die Regelung mit einem konventionellen Regler entworfen
worden. Das Problem bei dem Entwurf des konventionellen Reglers ist die Erzeugung einer Regeldifferenz aus den Sensorwerten. Durch Differenzbildung der beiden
Sensorwerte, wodurch der Sollwert mitten auf der Linie „0“ wäre, ist ein Regler entworfen worden, der den Roboter zunächst auf einer gerade Linie hält. Jedoch bekommt der Regler bereits bei einer geraden Linie Probleme sobald der Roboter die
Linie zu weit verlässt, da der Untergrund komplett weiß ist und keine entsprechende
Regeldifferenz gebildet werden kann. Die Regelung mit einem konventionellen Regler auf einer etwas gebogenen Linie ist vollkommen gescheitert, so dass die Idee einer Regelung verworfen wurde, da die Sensoren dazu nicht geeignet sind.
Die Verwendung eines Farbverlaufs kann es ermöglichen, das der Roboter mit einer
Regelung eine vorgegebene Streck folgt. Denn das Problem der Regelung auf einer
schwarzen Linie besteht darin, dass die Sensoren keine gute Regeldifferenz liefern
können. Dieses Problem könnte durch eine breitere Linie gelöst werden, die aus einem Farbverlauf (schwarz zu weiß) besteht. Die Sensoren liefern dadurch besser zu
regelnde Werte und die breitere Linie gibt mehr Spielraum für die Regelung. Im Programm ist bereits eine Regelung für einen Farbverlauf integriert worden, jedoch
konnte die Regelung durch eine fehlende Strecke bisher nicht getestet und eingestellt
werden.
Damit der Roboter doch noch einer schwarzen Linie folgt, ist ein einfacher Algorithmus entworfen worden, der jederzeit prüft, ob sich einer der Sensoren nicht mehr
auf der Linie befindet. Wenn ein Sensor die Linie verlässt, hält der Roboter sofort an
und korrigiert mit einer entsprechenden Drehung bis der Sensor wieder auf der Linie
ist. Die aus Kapitel 2 entworfene Motorregelung kann hier aufgrund der Abtastzeit
nicht verwendet werden, weil der Roboter zu spät reagieren würde. Da der Roboter
auf der Linie fahren soll und nicht unbedingt möglichst genau geradeaus, werden die
Motoren direkt über das PWM-Signal angesteuert. Durch die Stopp-Taste hält der
Bachelorarbeit
WS12/13
Daniel Klose
7 Programmierte Anwendungen
27
Roboter an und das Programm wird beendet. Das folgende Diagramm (Abbildung
19) zeigt den Ablauf des Programms für die Linienverfolgung.
Abbildung 19: Ablaufdiagramm der Linienverfolgung
7.3 Umgebung abfahren (area_ride)
In diesem Programm fährt der Roboter in einem durch schwarze Linien abgegrenzten
Feld ohne es zu verlassen. Dabei sucht der Roboter in einem zufälligen System mit
der Zeit das ganze Feld ab. Findet der Roboter mit den Distanzsensoren ein Hindernis, prüft er dieses auf einen Gegenstand, den er mitnehmen könnte. Wenn es kein
Gegenstand ist, z.B. eine Wand, weicht der Roboter dem Hindernis aus. Das Programm kann auch als Alternative zum Suchprogramm aus Kapitel 7.5 gesehen werden, da es auch Gegenstände findet, die sich in einem Feld befinden und aufgenommen werden können. In Tests ist diese Art der Suche effektiver gewesen als die aus
Bachelorarbeit
WS12/13
Daniel Klose
7 Programmierte Anwendungen
28
Kapitel 7.5, allerdings hat das Programm den Nachteil, dass der Gegenstand nicht
erkannt werden kann, wenn der Roboter genau auf den Gegenstand zufährt, da er
sich dann zwischen den beiden Distanzsensoren befindet. Das Programm kann jederzeit durch die Stopp-Taste beendet werden. Das folgende Zustandsdiagramm (Abbildung 20) zeigt den groben Ablauf des Programms.
Abbildung 20: Zustandsdiagramm des Programms area_ride
7.4 Quadrat abfahren (square_drive)
Der Roboter fährt ein Quadrat ab, in dem er viermal nacheinander eine bestimmte
Strecke vorwärts fährt und sich nach jeder Strecke um 90° nach links dreht. Im optimalen Fall erreicht der Roboter am Ende wieder den Startpunkt. Für diese Anwendung spielt der Positionssensor eine wichtige Rolle, durch den neben der Distanz
auch die Drehung berechnet wird. Um möglichst genau am Ursprungsort wieder anzukommen, wird die aus Kapitel 4.2 berechnete x- und y-Position für die Fahrt herangezogen. Mit dem Programm wird der Startpunkt meist mit einer leichten Abweichung erreicht, die aufgrund der in Kapitel 4.2 beschriebenen Toleranzen zu erklären
ist. Falls die Fahrt vorzeitigt gestoppt werden soll, kann das Programm durch die
Stopp-Taste jederzeit beendet werden, ansonsten beendet sich das Programm nach
erreichen der Startposition.
Bachelorarbeit
WS12/13
Daniel Klose
7 Programmierte Anwendungen
29
7.5 Gegenstand suchen und aufnehmen (look_for_item)
Die Anwendung versucht einen Gegenstand in der Umgebung des Roboters zu finden, um ihn dann aufzunehmen und zu transportieren. Dazu dreht sich der Roboter in
kleinen Schritten um die eigene Achse und prüft mit dem linken Distanzsensor, ob
sich etwas in der näheren Umgebung befindet. Der rechte Distanzsensor eignet sich
weniger für die Suche, da er kleinere Gegenstände nicht erkennt und über sie hinweg
schaut. Der linke Sensor ist um 180° gedreht montiert und erkennt daher auch tiefer
liegende Hindernisse. Trotzdem ist der Suchradius eingeschränkt, weil besonders der
linke Distanzsensor von Reflektionen der Oberfläche beeinflusst wird. Die Distanzsensoren, die primär der Kollisionsverhinderung dienen, sind für die Suche daher nur
begrenzt nutzbar. Nachdem der Roboter in seiner unmittelbaren Umgebung keinen
Gegenstand gefunden hat, fährt er 20 cm und beginnt eine neue Suche. Falls der Roboter auf eine schwarze Linie trifft, die das Feld begrenzt, hält der Roboter an, dreht
sich und leitet eine neue Suche ein. Hat der Roboter einen aufnehmbaren Gegenstand
gefunden, transportiert er den Gegenstand 20 cm und legt ihn dann wieder ab. Nach
dem Ablegen des Gegenstands oder durch das Drücken der Stopp-Taste wird das
Programm beendet. Dieser Suchmodus dauert sehr viel Zeit, vor allem wenn der Gegenstand irgendwo in einem begrenzten Feld platziert wird. Daher ist der „Suchmodus“ aus Kapitel 7.3 effektiver und schneller. Das Zustandsdiagramm in Abbildung
21 zeigt das grobe Prinzip der Anwendung.
Abbildung 21: Zustandsdiagramm der Anwendung look_for_item
Bachelorarbeit
WS12/13
Daniel Klose
7 Programmierte Anwendungen
30
7.6 An einer Linie anhalten und umdrehen (stop_at_line)
Eine kurze und schnelle Anwendung, die auch im Praktikum programmiert werden
könnte und nur die Aufgabe erfüllt, dass der Roboter in einem durch schwarze Linien
abgegrenzten Feld bleibt. Der Roboter fährt solange bis er auf eine Kante stößt und
dreht sich daraufhin um. Dabei entscheiden die Kantensensoren, ob links- oder
rechtsherum gedreht wird. Zudem fährt der Roboter ein kurzes Stück wieder zurück,
nachdem er eine Linie oder Kante entdeckt hat, damit der Teflon-Stift, der hinten als
„Standbein“ montiert ist, nicht an der Kante oder dem Isolierband, welches als Linie
dient, hängen bleibt. Beendet wird diese Anwendung durch Betätigung der StoppTaste auf der Fernbedienung.
7.7 Weitere Anwendungen
In dem Modul applications befindet sich neben den genannten Anwendungen noch
eine Funktion für die in Kapitel 7.2 erwähnte Linienverfolgung für einen Farbverlauf, die allerdings bisher nicht getestet wurde. Des Weiteren befindet sich in dem
Modul eine Funktion, die den Roboter zum Startpunkt fahren lässt, die jedoch aufgrund der Fehleraufsummierung nach größeren Distanzen fehlerhaft arbeitet. Das
Modul applications enthält auch Funktionen zur Energiesparverwaltung, welche in
Kapitel 8 näher erläutert sind.
Bachelorarbeit
WS12/13
Daniel Klose
8 Energiesparoptionen
8
31
Energiesparoptionen
8.1 Energiesparoptionen des Mikrocontrollers 68HCS12
Der 68HCS12 Mikrocontroller stellt drei Modi zur Verfügung, die Einfluss auf den
Stromverbrauch haben. Neben dem Run-Modus, der die normale Betriebsart des
Mikrocontrollers darstellt, existieren ein Wait-Modus und ein Stop-Modus, die den
Stromverbrauch reduzieren. Im Wait-Modus bleibt der Takt aktiv, während die CPU
abgeschaltet wird. In diesem Modus können einzelne Peripherieelemente durch das
Setzen von Bits aktiviert oder deaktiviert werden, wodurch auch festgelegt wird,
welche Schnittstelle die CPU wieder aufwecken kann. Der Wait-Modus wird von
jedem Interrupt unterbrochen und wird einfach durch den Assembler-Befehl „WAI“
aktiviert. Der Stop-Modus ist der stromsparendste Modus, den der 68HCS12 Controller besitzt. In diesem Modus wird neben CPU und Peripherie auch der Takt abgeschaltet, wodurch der Mikrocontroller zum Stillstand kommt und nur einen sehr geringen Strom verbraucht. Der Stop-Modus kann jedoch nur durch einen Reset oder
durch den externen IRQ-Pin des 68HCS12 Controllers aufgehoben werden. Außerdem kann das CAN-Modul mit entsprechender Konfiguration den Stop-Modus aufheben. Um in den Stop-Modus zu gelangen, muss vor dem Assembler-Befehl
„STOP“ das Stoppbit (S-Bit) im Condition Code Register (CCR) auf „0“ gesetzt
werden, welches nach jedem Reset „1“ ist und die Stopp-Instruktion sperrt. [13]
8.2 Energiesparfunktion der Software
Die Schaltung mit dem Mikrocontroller verbraucht im normalen Betrieb (ohne Sensoren und Ansteuerung der Motoren) etwa 90-95 mA. Durch die Power-Taste auf der
Fernbedienung kann der Mikrocontroller in den Stop-Modus versetzt werden, wodurch sich der Stromverbrauch der Schaltung auf unter 70 mA reduziert. Wird die
blaue Indikator-LED auf dem Mikrocontroller-Modul deaktiviert und wird der Positionssensor in den Power-Down Modus versetzt, reduziert sich der Stromverbraucht
auf unter 50 mA. Mit etwa 45 mA ist damit der Energiebedarf der Schaltung halbiert
Bachelorarbeit
WS12/13
Daniel Klose
8 Energiesparoptionen
32
worden und verlängert die Akkulaufzeit. Der Wait-Modus spart weniger Energie und
wird zudem durch den Modulus-Down-Counter immer wieder unterbrochen. Da der
Modulus-Down-Counter für das Auslesen der Fernsteuerungsbefehle gebraucht wird,
ist ein Abschalten des Counters nicht sinnvoll. Daher wurde neben dem manuellen
Aktivieren des Stop-Modus noch ein selbstständiges Aktivieren aus der Hauptschleife programmiert, so dass nach 5 Minuten Inaktivität der Mikrocontroller automatisch
den Stop-Modus aktiviert und die Indikator-LED und den Positionssensor deaktiviert.
Bachelorarbeit
WS12/13
Daniel Klose
9 Programmübersicht
9
33
Programmübersicht
Die Software für den Roboter ist in mehrere Module aufgeteilt, die jede eine Aufgabe der Software übernehmen und das Programm übersichtlich gestalten. Die einzelnen Module der Software werden im Folgenden kurz erläutert. Eine Übersicht über
die Funktionen, die jedes Modul beinhaltet, befindet sich im Anhang.
Modul applications
Für die unterschiedlichen Aufgaben, die der Roboter erledigen kann, enthält das Modul applications Funktionen mit Abläufen, die über die Main-Funktion aufgerufen
werden.
Modul akku
Das Modul akku enthält eine Funktion zur Überwachung der Akkuspannung. Das
Fehlersignal an Port B, welches eine Hardware-Schaltung auslöst (siehe [1]), wird
dort ausgewertet und die rote LED auf der Hauptplatine wird bei geringer Spannung
eingeschaltet.
Modul control
Im Modul control stehen Funktionen zur Verfügung, die für die Steuerung und Fortbewegung des Roboter von Nutzen sind. Das Modul beinhaltet ebenfalls die Regelung der beiden Motoren, die für die Bewegung des Roboters eine wichtige Rolle
spielen.
Modul decode_rc5
Allein für die Entschlüsselung des RC5-Codes der Fernbedienung ist das Modul
decode_rc5 zuständig. Die einzelnen Bits des ankommenden Signals werden in der
Funktion ausgewertet und zu dem Kommando-Befehl zusammengesetzt.
Bachelorarbeit
WS12/13
Daniel Klose
9 Programmübersicht
34
Modul enable
Die zwei Funktionen des Moduls schalten Distanzsensoren, Liniensensoren, Kantensensoren, Radencoder, Transportlichtschranke und Klappensensor sowie die rote
LED ein bzw. aus.
Modul init
Das Modul init beinhaltet die Funktion zur Initialisierung des Roboters. Die Ports
und Module des Programms werden eingerichtet und gegebenenfalls mit Startwerten
versehen.
Modul main
Die zum Start des Programms nötige Main-Funktion befindet sich in einem extra
dafür vorgesehenen Modul. Von dort werden weitere Unterprogramme und Funktionen aufgerufen.
Modul motion
Das Modul motion kümmert sich um alle Ansteuerungen der Motoren. Die Funktionen des Moduls kümmern sich um ein entsprechendes PWM-Signal für Antrieb- und
Servo-Motoren.
Modul position
Im Modul position werden die Daten für die Positionsbestimmung berechnet und
verwaltet. Mit Hilfe des Positionssensors wird die Winkelposition sowie die aktuelle
x- und y-Position des Roboters ermittelt und zur Verfügung gestellt.
Modul positionsensor
Für die Kommunikation mit dem Positionssensor ist das Modul positionsensor zuständig. Das Modul stellt Funktionen zum Auslesen und Steuern des Sensors bereit
und nimmt den anderen Modulen die direkte Kommunikation über die SDIO Schnittstelle zum Sensor ab.
Bachelorarbeit
WS12/13
Daniel Klose
9 Programmübersicht
35
Modul sensors
Die analogen Sensoren des Roboters werden im Modul sensors ausgelesen und teilweise verarbeitet, damit außerhalb des Moduls die Werte der Sensoren entsprechend
ihrer Funktion zur Verfügung stehen.
Modul speed_measure
Das Modul speed_measure kümmert sich um die Berechnung der Geschwindigkeit
der beiden Räder, die vorwiegend für die Motorregelung genutzt wird.
Modul timer
Das Modul timer behandelt die Interrupt Funktionen, die durch den Timer-Baustein
erzeugt werden. Welche Interrupt Funktionen des Timers aktiv sind, wird in der Vektor-Tabelle des Moduls vect festgelegt.
Modul transport
Im Modul transport sind Funktionen für alle Transport-Aufgaben implementiert.
Dazu gehört die Behandlung der Sensoren für Transportklappe und Transportfach
sowie fertige Funktionen zum Aufnehmen und Ablegen einen Gegenstandes.
Modul vect
Die Vektor-Tabelle für die Interrupt Behandlung des 68HCS12 ist im Modul vect
aufgeführt. Die Auswertung der Interrupts erfolgt im Modul timer.
Bachelorarbeit
WS12/13
Daniel Klose
10 Aufgaben für das Praktikum
36
10 Aufgaben für das Praktikum
In einer Vielzahl von Möglichkeiten kann der Roboter in einem Praktikum verwendet werden. Mit dem PWM-Modul können Studenten zu Beginn den Roboter zum
Leben erwecken und können später schwierigere Funktionen wie z.B. das Entschlüsseln der Kommandos der Fernbedienung schreiben. Neben solchen vom Programm
unabhängigen Funktionen, können auch mithilfe einiger Funktionen aus der vorliegenden Software Anwendungen geschrieben werden, die kleinere Probleme lösen.
Einfachere Anwendungen wie z.B. das Durchfahren eines kleinen Labyrinths oder
das Folgen einer Straße, welche durch schwarze Linien oder Hindernisse begrenzt
sind, erfordern das Auslesen von analogen Sensoren und gibt den Studenten einen
Einblick in die Mobilität des Roboters. Daraus folgen auch Anwendungen wie das
Anhalten an Linien und das Befahren eines abgesteckten Bereichs. Mit den Distanzsensoren können die Studenten den Roboter vor Hindernissen anhalten lassen und
mit den Daten des Positionssensors können Distanzen gefahren werden, wodurch
auch Anwendungen wie das Fahren eines Quadrats erstellt werden können. Als weitere Funktion ist das Aufnehmen oder Ablegen eines Gegenstands von Interesse der
Studenten, wobei mehrere Funktionen und Anwendungen genutzt werden. Es gibt
eine Vielzahl von Anwendungen, die Studenten erstellen können, aber der zeitliche
Rahmen ist dabei immer begrenzt und auch der Schwierigkeitsgrad muss angemessen sein.
Bachelorarbeit
WS12/13
Daniel Klose
11 Zusammenfassung und Ausblick
37
11 Zusammenfassung und Ausblick
In dieser Bachelorarbeit ist eine Software für den mobilen Roboter der Zeitschrift c‘t,
dessen Hardware zuvor im Praxisprojekt [1] überarbeitet worden ist, entwickelt worden, die das Auslesen der Sensoren und das Nutzen der Motoren ermöglicht. Durch
entwickelte Methoden und Strategien können Module und Funktionen der Software
auch für weitere Softwareprojekte genutzt werden. Ohne einige Methoden, wie die
Motorregelung oder die Berechnung des Drehwinkels, ist die Funktionsweise des
Roboters eingeschränkt, wodurch sich viele Anwendungen nicht realisieren lassen.
Die Grundlage für Anwendungen, wie einer Linienfahrt oder eine bestimmte Strecke
zu fahren, ist mit der Software geschaffen worden. Durch die einfache Steuerung
über die Fernbedienung ist das Aufrufen von Anwendungen ermöglicht worden. Mit
den Energiesparoptionen des Mikrocontrollers 68HCS12 versucht die Software den
Stromverbrauch gering zu halten. Auf Basis der neu entwickelten Software können
Studenten arbeiten und ihr Interesse an der hardwarenahen Programmierung wecken.
Dis Software des Roboters deckt die wichtigen Bereiche wie Auslesen der Sensoren
und Steuerung der Aktoren ab, jedoch kann der Roboter für viele weitere Anwendungen genutzt werden. Die Aufgaben, die der Roboter erledigen kann, sind vielfältig und steigern die Praxiserfahrung der Studenten. Einen wissenschaftlichen Nutzen
hat dieses Projekt nicht und die Hardware stößt auch oft bereits an ihre Grenzen. Daher begrenzt sich die Nutzung des Roboters auf Lehreinrichtungen wie Hochschulen
oder Schulen, jedoch kann es auch Interessierte an den Bereich der Elektrotechnik
und Informatik heranbringen. Wenn es eine entsprechende Strecke für die Verfolgung einer Linie mit Farbverlauf gibt, ist die Entwicklung der Regelung, die bereits
vorprogrammiert wurde, eine interessante Anwendung. In einigen Bereichen wie z.B.
der Verarbeitung der Sensordaten kann die Genauigkeit möglicherweise noch etwas
erhöht werden, aber die Möglichkeiten der Hardware sind begrenzt.
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
A
38
Funktionen der Programm-Module
Modul akku
Funktionen:
void check_akku (void)
Prüft das Fehlersignal der Akkuüberwachungsschaltung und aktiviert die rote LED,
wenn das Fehlersignal länger anliegt.
Modul applications
Funktionen:
void follow_line_gradient (void)
Führt die Anwendung zur Verfolgung einer Linie mit Farbverlauf aus.
void follow_line (void)
Führt die Anwendung zur Verfolgung einer schwarzen Linie aus.
void square_drive (void)
Führt die Anwendung zum Abfahren eines Quadrats aus.
void free_drive (void)
Führt die Anwendung zu einer freien Fahrt aus.
void back_to_start (void)
Lässt den Roboter zur Startposition zurückfahren.
void area_ride (void)
Führt die Anwendung zum Abfahren seiner Umgebung aus.
void look_for_item (void)
Führt die Anwendung zur Suche und zum Transport eines Gegenstands aus.
void stop_at_line (void)
Führt die Anwendung zum Anhalten an einer schwarzen Linie aus.
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
39
void power_down (void)
Bringt den Roboter in einen energiesparenden Modus.
void bot_timeout (void)
Bringt den Roboter nach einer festgelegten Zeit selbstständig in einen energiesparenden Modus.
Modul control
Funktionen:
void speed_control (int set_speed_left_local, int set_speed_right_local)
Regelt den rechten und linken Motor auf die gewünschte Geschwindigkeit. Durch
negative Soll-Geschwindigkeiten dreht sich der Motor rückwärts.
Bedingung:
aktivierte Rad-Encoder (enable Funktion)
Inputs:
Soll-Geschwindigkeit für rechten und linken Motor
int pi_control_motor_left (int set_speed_local)
Berechnet die Stellgröße des Reglers für den linken Motor.
Bedingung:
aktivierte Rad-Encoder (enable Funktion)
Input:
Soll-Größe (Geschwindigkeit) des linken Motors
Output:
Stellgröße für den linken Motor
int pi_control_motor_right (int set_speed_local)
Berechnet die Stellgröße des Reglers für den rechten Motor.
Bedingung:
aktivierte Rad-Encoder (enable Funktion)
Input:
Soll-Größe (Geschwindigkeit) des rechten Motors
Output:
Stellgröße für den rechten Motor
int get_direction (int set_speed_local)
Prüft die Soll-Geschwindigkeit auf Negativität und gibt die entsprechende Drehrichtung des Motors zurück.
Input:
Soll-Geschwindigkeit des Motors
Output:
Drehrichtung des Motors
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
40
void bot_turn_right (int degree_local)
Dreht den Roboter um einen gewünschten Winkel (in Grad) auf der Stelle nach links.
Bedingung:
Power Up des Positionssensors, aktivierte Rad-Encoder (enable Fkt.)
Input:
Der gewünschte Winkel (in Grad), um der sich der Roboter nach links
drehen soll
void bot_turn_left (int degree_local)
Dreht den Roboter um einen gewünschten Winkel (in Grad) auf der Stelle nach
rechts.
Bedingung:
Power Up des Positionssensors, aktivierte Rad-Encoder (enable Fkt.)
Input:
Der gewünschte Winkel (in Grad), um der sich der Roboter nach
rechts drehen soll
void bot_turn_to_zero_angle (void)
Dreht den Roboter auf kürzestem Weg in die Ursprungsblickrichtung (Winkel 0)
Bedingung:
Power Up des Positionssensors, aktivierte Rad-Encoder (enable Fkt.)
void bot_full_stop (void)
Stoppt beide Räder des Roboters. (Bremse)
Bedingung:
aktivierte Rad-Encoder (enable Funktion)
void bot_drive_backward_mm (int distance_local)
Lässt den Roboter um eine gewünschte Distanz rückwärts fahren.
Bedingung:
Power Up des Positionssensors, aktivierte Rad-Encoder (enable Fkt.)
Input:
Distanz, die der Roboter rückwärts fahren soll (in mm)
void bot_drive_forward_mm (int distance_local)
Lässt den Roboter um eine gewünschte Distanz vorwärts fahren.
Bedingung:
Power Up des Positionssensors, aktivierte Rad-Encoder (enable Fkt.)
Input:
Distanz, die der Roboter vorwärts fahren soll (in mm)
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
41
int pid_gradient_line_control (double ek_local)
Berechnet die Stellgröße für die Linienfahrt auf einem Farbverlauf aus der Regeldifferenz.
Input:
Regeldifferenz aus Soll- und Ist-Größe, der Sensoren
Output:
Stellgröße für Motoren
void gradient_line_control (void)
Bedingung:
aktivierte Liniensensoren (enable Funktion)
Regelt die Fahrt auf einer Linie mit Farbverlauf.
Modul decode_rc5
Funktionen:
void decode_rc5 (int time, short int level)
Entschlüsselt den Befehl der Fernbedienung aus den Flanken des RC5-Signals.
Inputs:
Zeit der letzten Flanke und Pegel des Pins nach dem Interrupt
externe Variablen:
extern long int rc5_command
Letzter Befehl der Fernbedienung
Modul enable
Funktionen:
void enable (int enable_local)
Aktiviert die Sensoren und die rote LED.
Input:
Das Element, welches aktiviert werden soll.
void disbale (int disable_local)
Deaktiviert die Sensoren und die rote LED.
Input:
Bachelorarbeit
Das Element, welches deaktiviert werden soll.
WS12/13
Daniel Klose
12 Anhang
42
externe Variablen:
extern Port_ab* pa_ptr
Pointer des Ports A (Digital Out)
extern Port_ab* pb_ptr
Pointer des Ports B (Digital In)
Modul init
Funktionen:
void init (void)
Initialisiert die Ports des Mikrocontrollers und versetzt den Roboter in den Startzustand.
Modul main
Funktionen:
void main (void)
Enthält die Main-Funktion mit der Hauptschleife, aus der die Anwendungen gestartet
werden können.
Modul motion
Funktionen:
void motor_left (int direction_local, int duty_local)
Steuert den linken Motor mit einem PWM-Signal an. Die Funktion entscheidet über
die Drehrichtung und Geschwindigkeit des Motors.
Inputs:
Drehrichtung des linken Motors und Pulslänge des PWM-Signals
void motor_right (int direction_local, int duty_local)
Steuert den rechten Motor mit einem PWM-Signal an. Die Funktion entscheidet über
die Drehrichtung und Geschwindigkeit des Motors.
Inputs:
Bachelorarbeit
Drehrichtung des rechten Motors und Pulslänge des PWM-Signals
WS12/13
Daniel Klose
12 Anhang
43
void open_flap_gate (void)
Steuert den Servo-Antrieb mit einem PWM-Signal an, welches ihn in eine Stellung
fahren lässt, die die Transportklappe öffnet.
void close_flap_gate (void)
Steuert den Servo-Antrieb mit einem PWM-Signal an, welches ihn in eine Stellung
fahren lässt, die die Transportklappe schließt.
void stop_flap_gate (void)
Stoppt den Servo-Antrieb und die Transportklappe.
void flap_gate_timeout (void)
Stoppt den Servo-Antrieb der Transportklappe nach einer Zeit, um Strom zu sparen.
externe Variablen:
extern Port_h* ph_ptr
Pointer des Ports H (Digital Out)
extern PWMmodule* pwm_ptr
Pointer des PWM-Moduls
extern int direction_left
Drehrichtung des linken Motors
extern int direction_right
Drehrichtung des rechten Motors
Modul position
Funktionen:
void update_position (void)
Berechnet die neue Position durch die Positionsänderungsdaten des Positionssensors.
Bedingung:
Bachelorarbeit
Power Up Positionssensor
WS12/13
Daniel Klose
12 Anhang
44
void set_bot_angle (float dx_mm_local)
Berechnet die Winkelposition des Roboters aus der Bewegung der x-Achse des Positionssensors.
Bedingung:
Power Up Positionssensor
Input:
Bewegung der x-Achse, die der Positionssensor aufgenommen hat
float check_angle_range(float angle_local)
Prüft und korrigiert die Winkelgröße, wenn sie kleiner als 0 oder größer als 2π ist.
Input:
Der Winkel, der geprüft werden soll
Output:
Der korrigierte Winkel, der einen Wert zwischen 0 und 2π hat
float degree_to_radiant (int degree_local)
Rechnet einen Winkel von Grad in Radiant um.
Input:
Winkel in Grad
Output:
Winkel in Radiant
int radiant_to_degree (float radiant_local)
Rechnet einen Winkel von Radiant in Grad um.
Input:
Winkel in Radiant
Output:
Winkel in Grad
float get_distance_to_start (void)
Berechnet die direkte Distanz zum Startpunkt des Roboters.
Bedingung:
gespeicherte Positionsdaten
Output:
Die Distanz zum Startpunkt (in mm)
int get_bot_angle_to_start (void)
Berechnet den Winkel zwischen der Winkelposition 0 und dem Startpunkt des Roboters.
Bedingung:
gespeicherte Positionsdaten
Output:
Drehwinkel zwischen Winkelposition 0 und dem Startpunkt
externe Variablen:
extern double y_position
y-Position des Roboters
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
45
extern double x_position
x-Position des Roboters
extern double y_movement
Zurückgelegte Distanz in Vorwärts- bzw. Rückwärtsrichtung seit dem letzten Abfragen des Positionssensors.
extern float bot_angle
Aktuelle Winkelposition des Roboters.
Modul positionsensor
Funktionen:
char rx_positionsensor (void)
Empfängt ein Byte über die serielle Schnittstelle vom Positionssensor.
Bedingung:
Power Up Positionssensor
Output:
Das Byte, welches Empfangen wurde
void tx_positionsensor (char data_local)
Sendet ein Byte über die serielle Schnittstelle zum Positionssensor.
Bedingung:
Power Up Positionssensor
Input:
Das Byte, welches zum Sensor gesendet werden soll
void wait (int counts_local)
Nutzt eine Schleife, um eine Zeit abzuwarten.
Input:
Die Anzahl der Schleifendurchläufe
void get_delta_movement_mm (float* dx_ptr, float* dy_ptr)
Liest die X- und Y-Register des Positionssensors aus und berechnet die Bewegung in
mm. Die Bewegungsdistanz wird an die Variablen übergeben, dessen Adressen
übergeben wurden.
Bedingung:
Power Up Positionssensor
Inputs:
Adressen der Variablen, in der die aktuelle Bewegungsdistanz gespeichert werden soll
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
46
void reset_positionsensor (void)
Startet die SDIO Schnittstelle des Positionssensors neu und löscht X- und YRegister.
void clear_register_positionsensor (void)
Leert die X- und Y-Register des Positionssensors.
void power_down_positionsensor (void)
Versetzt den Positionssensor in den Energiesparmodus (Power-Down Modus).
externe Variablen:
extern Port_k* pk_ptr
Pointer des Ports K (SDIO)
Modul sensors
Funktionen:
short int read_sensor_analog (int sensor_local)
Liest einen analogen Sensor aus und gibt den AD-Wert des Sensors zurück.
Bedingung:
Sensor ist aktiviert (enable Funktion)
Input:
Der Sensor, dessen Wert abgefragt werden soll
Output:
Der AD-Wert des Sensors
int get_distance_left (void)
Gibt den Distanzwert des linken Distanzsensors zurück.
Bedingung:
Distanzsensoren sind aktiviert (enable Funktion)
Output:
Dis Distanz, die der linke Sensor misst.
int get_distance_right (void)
Gibt den Distanzwert des rechten Distanzsensors zurück.
Bedingung:
Distanzsensoren sind aktiviert (enable Funktion)
Output:
Dis Distanz, die der rechte Sensor misst.
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
47
int calculate_distance (int value_local, int sensor_local)
Berechnet aus einem AD-Wert eines Distanzsensors einen Distanzwert.
Input:
Der AD-Wert und der Distanzsensor, zu dem der AD-Wert gehört
Output:
Die berechnete Distanz in cm
int check_left_edge (void)
Prüft, ob sich der linke Kantensensor über einer Kante oder schwarzen Linie befindet.
Bedingung:
Kantensensoren sind aktiviert (enable Funktion)
Output:
Das Ergebnis der Prüfung (Kante oder keine)
int check_right_edge (void)
Prüft, ob sich der rechte Kantensensor über einer Kante oder schwarzen Linie befindet.
Bedingung:
Kantensensoren sind aktiviert (enable Funktion)
Output:
Das Ergebnis der Prüfung (Kante oder keine)
externe Variablen:
extern AnalogToDigital* atd0_ptr
Pointer des Ports ATD0 (AD-Port)
Modul speed_measure
Funktionen:
void update_speed (void)
Berechnet die Geschwindigkeit beider Räder aus den letzten Messwerten.
Bedingung:
Rad-Enconder sind aktiviert (enable Funktion)
void speed_measure (int movement_left_local, int movement_right_local)
Berechnet die Geschwindigkeit aus der zurückgelegten Distanz des Rades über eine
Zeit.
Inputs:
Zurückgelegte Distanz des linken und rechten Rads seit der letzten
Messung
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
48
externe Variablen:
extern int speed_motor_right
Die Geschwindigkeit des rechten Rads, welche durch mehrere Messwerte mit update_speed berechnet wurde.
extern int speed_motor_left
Die Geschwindigkeit des linken Rads, welche durch mehrere Messwerte mit update_speed berechnet wurde.
Modul timer
Funktionen:
@interrupt void timer0_isr (void)
Wird durch Flanken des linken Rad-Encoders ausgeführt und berechnet den dadurch
zurückgelegten Weg des linken Rads.
@interrupt void timer1_isr (void)
Wird durch Flanken des rechten Rad-Encoders ausgeführt und berechnet den dadurch zurückgelegten Weg des rechten Rads.
@interrupt void timer2_isr (void)
Wird durch Flanken des von der Fernsteuerung kommenden RC5-Signals ausgelöst
und leitet die relevanten Flanken zur Auswertung an die Entschlüsselungsfunktion
weiter.
@interrupt void modulus_counter_isr (void)
Wird nach einer konstanten Zeit immer wieder ausgeführt und schafft eine Zeitbasis
für verschiedene Anwendungen. Berechnet die Zurückgelegte Strecke jedes Rads
nach einer Zeit für die Geschwindigkeitsberechnung.
@interrupt void ISR_TRAP (void)
Wird bei unerwarteten Interrupts ausgeführt. (ohne Funktion)
@interrupt void SWI_TRAP (void)
Wird bei Software-Interrupts ausgeführt. (ohne Funktion)
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
49
externe Variablen:
extern TIMERmodule* timer_ptr
Pointer des Timer-Moduls
extern Port_t* pt_ptr
Pointer des Ports T (Digital In)
extern unsigned int control_time
Zeitbasis für die Motorregelung.
extern unsigned long int timeout_time
Zeitbasis für die Timeoutfunktion der Transportklappe und der selbstständigen Energiespar-Funktion.
Modul transport
Funktionen:
int status_flap_gate (void)
Gibt den Status des Transportklappensensors zurück.
Bedingung:
Klappensensor ist aktiviert (enable Funktion)
Output:
Status der Transportklappe (Offen oder Geschlossen)
int status_transportbox (void)
Gibt den Status der Lichtschranke im Transportfach zurück.
Bedingung:
Lichtschranke für Transportbox ist aktiviert (enable Funktion)
Output:
Status des Transportfachs (Leer oder Gegenstand im Fach)
int error_flap_gate (void)
Prüft das Fehlersignal des Servo-Antriebs und gibt den Status der Stromüberwachung zurück.
Output:
Status der Stromüberwachung des Servo-Antriebs (Fehler oder kein
Fehler)
Bachelorarbeit
WS12/13
Daniel Klose
12 Anhang
50
void pickup_item (void)
Führt eine Anwendung aus, in der ein Gegenstand, der vor dem Fach liegt, aufgenommen wird.
void place_item (void)
Führt eine Anwendung aus, in der ein Gegenstand, der sich im Transportfach befindet, abgelegt wird.
Bachelorarbeit
WS12/13
Daniel Klose
Literaturverzeichnis
51
Literaturverzeichnis
[1]
Daniel Klose, „Hardwareerweiterung für einen mobilen Roboter“, Hochschule Ostwestfalen-Lippe, 26.07.2012.
[2]
Heise Zeitschriften Verlag, „Aktuatoren des c’t-Bots – Motoren/Motorregelung“.
http://www.heise.de/ct/projekte/machmit/ctbot/wiki/ct-Bot-Software-
Aktuatoren [Stand: 10.10.2012]
[3]
Dierk Schröder, „Elektrische Antriebe – Grundlagen“, Springer Verlag, 4.
Auflage, 2009.
[4]
Otto Föllinger, „Regelungstechnik“, Hüthig Buch Verlag Heidelberg, 6. Auflage, 1990.
[5]
Frank Dörrscheidt, Wolfgang Latzel, „Grundlagen der Regelungstechnik“,
B.G. Teubner Stuttgart, 2. Auflage, 1993.
[6]
Sprut.de, „IR-Fernbedienung – der RC-5 Code“, 16.07.2009.
http://www.sprut.de/electronic/ir/rc5.htm, [Stand: 02.11.2012]
[7]
rn-wissen.de, „RC5-Code“, 09.05.2012.
http://www.rn-wissen.de/index.php/RC5-Code, [Stand: 04.11.2012]
[8]
Torsten Evers, „Wo bin ich?“, c’t Magazin 13/2006, S.226, Heise Zeitschriften Verlag, 2006.
[9]
kreatives-chaos.com, „Infrarot Entfernungsmesser“, 16.03.2007.
http://www.kreatives-chaos.com/artikel/infrarot-entfernungsmesser,
[Stand: 20.10.2012]
[10]
SHARP: Datenblatt GP2Y0A21YK, Sharp Corporation, 2005.
[11]
wiki.ctbot.de, „RC Univers29 “, 29.10.2012.
http://wiki.ctbot.de/index.php/RC_Univers_29, [Stand: 05.11.2012]
[12]
Heinz Mann, Horst Schiffelgen, Rainer Froriep, „Einführung in die Regelungstechnik“, Carl Hanser Verlag München, 11. Auflage, 2009.
Bachelorarbeit
WS12/13
Daniel Klose
Literaturverzeichnis
[13]
52
Harald Kreidl, Gerald Kupris, Oliver Thamm, „Mikrocontroller-Design“, Carl
Hanser Verlag München Wien, 2003.
[14]
RRZN / Leibniz Universität Hannover, „Die Programmiersprache C“, 16.
Auflage, 2007.
[15]
Joachim Goll, „C als erste Programmiersprache“, Teubner Verlag, 6. Auflage,
2008.
Bachelorarbeit
WS12/13
Daniel Klose

Documents pareils