PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sensoren gesteuertes Roboterauto



bkr-Gr.7
04.04.2005, 09:49
Wir haben ein Schulprojekt deren Aufgabe unten steht. Leider kommen wir bei der Programmierung nicht richtig weiter und würden uns über jeden Tipp zu der Programmierung oder sonstigen bzw. über ein fertiges Programm :D freuen!

Danke im vorraus!

Projektziel:
Es soll ein Fahrzeug gebaut werden, das es schafft, eigenständig an einer Fahrbahnmarkierung entlang zu fahren. (Die gesamte rechte Fahrbahnhälfte ist weiß und die gesamte linke Fahrbahnhälfte ist schwarz.) Das Fahrzeug soll so steuern, dass es die Trennlinie nie ganz verliert und auch in Kurven der Fahrbahn autonom folgt.

Das Fahrzeug:
Das Chassis wird mit zwei Gleichstromgetriebemotoren angetrieben die über ein C-Conrol-System angesteuert werden. Eine elektronische Schaltung realisiert die Aufbereitung der Signale der optischen Sensorik für das C-Control-System und die Ansteuerung der Motoren. Das C-Control-System regelt und steuert das gesamte Fahrzeug. Des weiteren trägt das Chassis noch eine Energieversorgung (Akku), damit ein autonomer Betrieb möglich ist.

Die Projektaufgaben:
Entwickeln und bauen Sie ein Steuermodul, welches das Fahrzeug so steuert, dass es autonom (ohne Beeinflussung und Energiezufuhr von außen) die oben gezeigte Bahn in der dargestellten Richtung umfahren kann. Ein einfacher mechanischer Aufbau (Chassis mit zwei über Gleichstromgetriebemotoren angetriebenen Rädern) wird zur Verfügung gestellt. Das Fahrzeug kann über die Drehzahl der Räder gefahren und gelenkt werden.

Zum Erreichen des Projektziels sind folgende Teilaufgaben zu lösen und nachzuweisen:
· Fertigen sie mit ihrer Arbeitsgruppe einen Zeitplan an, in dem sie ihre Arbeitsaufgaben, -abläufe und Verantwortlichkeiten fixieren. (denken sie auch daran, entsprechende Reserven einzuplanen, legen sie feste Zeiten für Meetings fest, .....
· Entwickeln sie ein geeignetes Konzept zur Steuerung des Roboterfahrzeugs. Möglichkeiten der Anordnung der Sensoren. Festlegung der Parameter für die Ansteuerung der Motoren. Reaktion auf Veränderungen der Sensorwerte. (Die Konzeptidee ist zu dokumentieren und mit ihren Vor- und Nachteilen schriftlich zu diskutieren.) Änderungen in der Konzeption sind entsprechend zu dokumentieren.
· Die Signalanpassung ist so zu dimensionieren, dass für den C-Controler eine optimale Aussteuerung erreicht wird. Hierfür ist es erforderlich, das Verhalten des Sensors zu untersuchen. (Die Untersuchungsergebnisse sind zu dokumentieren.)
· Die Funktionsweise der Schaltung muss vollständig verstanden sein. In einem Fachgespräch müssen Fragen zu Teilaspekten der Schaltung präzise beantwortet werden.
· Die elektronische Schaltung ist aufzubauen und die einzelnen Module (Sensor, Motor, C-Control …) sind richtig anzuschließen. Bei der Umsetzung ist auf saubere mechanische und elektrische Ausführung zu achten
· Zur Steuerung des Roboters muss ein Programm geschrieben werden, welches das/die Eingangssignal/e in geeigneter Form auswertet/n und die Motoren entsprechend der gewünschten Anforderungen über pulsweitenmodulierte Signale (PWM) ansteuert (s.o.). Bei der Auswertung des Sensorsignals ist zu beachten, dass einer Lösung Vorrang gegeben wird, die unterschiedliche Helligkeiten auswertet (Proportionalregler). Eine Lösung, die lediglich zwei Werte unterscheidet (Zwei-Punkt-Regelung) führt zu Abzügen in der Bewertung. In einem Fachgespräch ist das Programm anhand eines Ablaufplans zu erklären.
· Schließlich muss das Fahrzeug selbständig und in möglichst kurzer Zeit die beschriebene Strecke abfahren. Die gemessenen Zeiten werden mit in die Beurteilung einfließen.
· Zu dem Fahrzeug, dem Programm und den ausgeführten Arbeiten ist eine vollständige Dokumentation anzufertigen. Die Dokumentation enthält folgende Teile:
o Deckblatt mit: Datum, Projekttitel, Namen und Gruppenname, Fahrzeugnummer, Schule
o Schaltplan mit den Angaben der Bauteildimensionen
o Funktion der verwendeten Baugruppen und Bauteile, Funktionsweise der Schaltung
(mit den entsprechenden wesentlichen Auszügen aus den Datenblättern – keine kompletten Datenblätter) hier sollen vor allem Bezüge hergestellt werden
o Programm
(Funktionsbeschreibung, Ablaufplan und Programmlisting)
o Angabe für die Zuordnung der Verantwortlichkeiten (wer hat was gemacht)
o Selbstbeurteilung des Ereichten, Fazit
o vollständige Angabe der verwendeten Quellen nach DIN1505

Weja
04.04.2005, 11:45
Hallo,
wenn ich das richtig sehe, geht es im Wesentlichen darum, euer Projekt richtig zu planen und durchzuführen. Dabei kann hier niemand helfen.
Die Aufgabe an sich ist wirklich so einfach, dass sie jeder Schüler durchführen kann. Ich hab das bereits mit Grundschülern gemacht.
Gruß
Weja

bkr-Gr.7
04.04.2005, 12:04
Die Planung ist nicht unser problem sondern eher die Programmierung..
sprich wir wissen nicht so genau wie wir die Daten des Sensors auswerten können und die motoren ansprechen können...

ACU
04.04.2005, 16:23
Also mal was zur Theorie zum verfolgen einer Linie:
LINK (http://www.roboterbastler.de/Postnuke/html/modules.php?op=modload&name=News&file=article&sid=3&mode=thread&order=0&thold=-1)
Den Linienfolgesensor müsst/könnt/solltet ihr genauso bauen.
Nur die Wertetabelle müsstet ihr neu machen, da ihr ja wollt, dass ein Sensor Hell und einer Dunkel sieht.
Wenn ihr Hilfe braucht (Wertetabelle, Programm) meldet euch nochmal.


MfG ACU

bkr-Gr.7
05.04.2005, 07:57
@ACU: Der link hat uns shconmal weitergeholfen :) big thx!
jetzt steht alles soweit physikalisch.
doch nun stehen wir vor einem neuen problem:
wie werten wir die werte der photowirderstände aus (per ad wandler)
und wie sprechen wir die motoren an (da wandler)

wär nett wenn du uns da nochmal helfen könntest :)

BlueNature
05.04.2005, 12:49
Hallo bkr-Gr.7!

Definier die erstmal deine Ports für die analogen Signale (normal 0-5V für 0-255)

Define Sensor1 As AD[1]
Define Sensor2 As AD[2]

Dann eben eiene Ansteuerung der Motoren. Da gibts viele Möglichkeiten. Entweder mit Prort und 1 und 0 für an und aus oder mit PWM für eine Drehzahlsteuerung. Zweiteres ist wenn du mit dem ersteren schon Probleme hast eher was wovon man vorerst mal die Finger lassen sollte. Mit 1 und 0 gehts so:

Define MotorVor As Port[1]
Define MotorZur As Port[2]

Dann gehts eben darum das Ganze noch zu programmieren. Das setzen der Ausgänge vor und Zurück geht auch einfach:

MotorVor = Off
MotorZur = On

oder

MotorZur = Off
MotorVor = On

Den Rest muß man eben nach Bedarf programmieren. Aber das nähere steht im Handbuch der C-Control zu den Befehlen und Funktionen. Einfach mal komplett lesen.

Grüße Wolfgang

bkr-Gr.7
05.04.2005, 13:18
hey BlueNature!
ja des hab ich auch schon so auch mit den d/a ausgängen ^^
nur ich bin net soo gut in ccbasic ;) und hab grad das problem mit der
if abfrage wo ich eigendlich ein bereich definieren möchte...
aber anscheinend erkennt er die AND verknüpfung nicht...
kann ich das auch irgendwie andres machen?

define ad_wandler ad[1]
define da_wandler1 da[1]
define da_wandler2 da[2]
define hell word[1]
define mittel word[2]
define dunkel word[3]


Looktab Tabelle,1,hell
Looktab Tabelle,2,mittel
Looktab Tabelle,3,dunkel

#mainloop
da_wandler1 = 6
da_wandler2 = 6

if ad_wandler > mittel AND if ad_wandler <= dunkel then goto dunkel
else goto hell
end if

#hell
da_wandler1 = 3
da_wandler2 = 6
goto mainloop

#dunkel
da_wandler1 = 6
da_wandler2 = 3

goto mainloop


table Tabelle
'hier kommen die werte des sensors rein
tabend

BlueNature
05.04.2005, 13:21
Versuchs mal ihne doppelte If.

if ad_wandler > mittel AND ad_wandler <= dunkel then goto dunkel

Grüße Wolfgang

bkr-Gr.7
05.04.2005, 14:04
@BlueNature jop jetz läufts :)
thx

bkr-Gr.7
07.04.2005, 07:51
Hi nochmal :)
möcht nur nochmal wissen was ihr nun von dem programm haltet...
im Simulator läufts soweit, konnte es nur noch nicht testen da noch ein paar bauteile fehlen(potis) die noch geliefert werden müssen.

vielleicht findet der ein oder andere noch einen logischen fehler :)

hier nun der code (L1-6: linker motor ansteuern, R1-6 rechter motor):

define vorwaerts1 port[1]
define vorwaerts2 port[3]
define ad_wandler ad[4]
define da_wandler1 da[1]
define da_wandler2 da[2]


vorwaerts1 = on
vorwaerts2 = on


#mainloop

if ad_wandler >= 0 and ad_wandler <= 19 then gosub L6
if ad_wandler >= 20 and ad_wandler <= 38 then gosub L5
if ad_wandler >= 39 and ad_wandler <= 57 then gosub L4
if ad_wandler >= 58 and ad_wandler <= 76 then gosub L3
if ad_wandler >= 77 and ad_wandler <= 95 then gosub L2
if ad_wandler >= 96 and ad_wandler <= 114 then gosub L1
if ad_wandler >= 115 and ad_wandler <= 133 then gosub mitte
if ad_wandler >= 134 and ad_wandler <= 152 then gosub R1
if ad_wandler >= 153 and ad_wandler <= 171 then gosub R2
if ad_wandler >= 172 and ad_wandler <= 190 then gosub R3
if ad_wandler >= 191 and ad_wandler <= 209 then gosub R4
if ad_wandler >= 210 and ad_wandler <= 228 then gosub R5
if ad_wandler >= 229 and ad_wandler <= 255 then gosub R6

goto mainloop

#L1
da_wandler1 = 160
da_wandler2 = 255
return

#L2
da_wandler1 = 128
da_wandler2 = 255
return

#L3
da_wandler1 = 96
da_wandler2 = 255
return

#L4
da_wandler1 = 64
da_wandler2 = 255
return

#L5
da_wandler1 = 32
da_wandler2 = 255
return

#L6
da_wandler1 = 1
da_wandler2 = 255
return

#mitte
da_wandler1 = 192
da_wandler2 = 192
return

#R1
da_wandler1 = 255
da_wandler2 = 160
return

#R2
da_wandler1 = 255
da_wandler2 = 128
return

#R3
da_wandler1 = 255
da_wandler2 = 96
return

#R4
da_wandler1 = 255
da_wandler2 = 64
return

#R5
da_wandler1 = 255
da_wandler2 = 32
return

#R6
da_wandler1 = 255
da_wandler2 = 1
return

BlueNature
07.04.2005, 10:58
Servus!

Hab mal etwas gleichwertiges geschrieben das dynamisch ohne Stufen reagiert und auch im Code kleiner sein wird. Probiers aus und viel Spaß dabei



Define Mot1Dir Port[1]
Define Mot2Dir Port[3]
Define Sensor AD[4]
Define Mot1Speed DA[1]
Define Mot2Speed DA[2]
Define Speed1 Byte[1]
Define Speed2 Byte[2]
Define Vor = On
Define Zur = Off
Define MidSensor = 127
Define MaxSensor = 255

#Init
Mot1Dir = Vor
Mot2Dir = Vor

#MainLoop
Speed1 = Sensor - Mitte
Speed2 = MaxSensor - Sensor
If Sensor > MidSensor Then Speed1 = MidSensor Else Speed2 = MidSensor
Mot1Links = Speed1 ShL 2
Mot2Links = Speed2 ShL 2
GoTo MainLoop


Grüße Wolfgang