PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : erster Roboter - mit Servoturm, CCD Kamera, -> Video



nooob
17.09.2006, 16:21
hi.
habs geschafft vorzeigbare ergebnisse zu produzieren ;-)

chassis: Robby RP5
µC: RN-Control 1.4
Sensoren: bis jetzt 2 IR Sensoren
1 Servo
1 CCD Funk Kamera
..........................

Video:
http://www.youtube.com/watch?v=dYbNB3EsDT4
edit: sound hängt im video hinterher.. keine ahnung liegt an youtube

Der Roboter fährt geradeaus bis er mit dem unteren IR Sensor ein Hindernis erkennt. Dann stoppt er, dreht den Turm nach rechts, misst mit dem oberen Sensor und weist einer Variablen den Wert zu, dann dasselbe mit links..
dann werden die Werte verglichen und je nach dem wo mehr platz ist, da fährt der Roboter dann hin..

bis jetzt dreht er fast noch ein bissle zu weit, und fährt zu dich an das hindernis heran, könnte also zum problem werden.
ausserdem geht irgendwie bei einer rechtsdrehung nur der eine motor..
sehr komisch das ganze, programm stimmt eigentlich, aber wenn ich den Motor umpolen will (Bascom).. funktioniert nur der, der sich noch vorwärts dreht.. der andere bleibt einfach stehen.. vielleicht hat da jm nen tipp..

ansonsten funzt es einwandfrei.. ;-)


Verbesserungsvorschläge im ausweichalgorithmus nehm ich gerne an...

Tuxy
17.09.2006, 17:49
http://www.nitro-mods.de/Forum/Smileys/default/smilie062.gif

Toller Roboter, gefällt mir gut.
Mit deinem Problem bezüglich der Motoren,
kann ich dir nicht weiterhelfen, hab auch gelegentlich ähnliche Probleme.

Weiter so...

OsramLED
17.09.2006, 20:25
sieht gut aus ;)

Das ist ein Fahrgestell von Conrad oder?

womb@t
17.09.2006, 22:30
Toll, echt, so stell ich mir meinen Roboter später auch vor! Anscheindend funktioniert der Autonome Modus sehr gut, aber das Getriebe ist doch sehr laut, stört dih das nicht?

nooob
18.09.2006, 17:48
ja das getriebe is echt laut.. spionieren damit is nich ;-)

naja die IR sensoren erkennen echt nur das was direkt in "Strahl"-Richtung liegt.. kaum ein bissle daneben.. dann rauscht er dagegen..

werde unten dran statt dem einen 2 Sensoren gewinkelt hinbauen, die sich überkreuzen... dann könnte er sogar ausweichen, wenn nur ein Sensor was "sieht" indem der eine motor leicht abgebremst wird.. dann braucht er net mehr komplett anhalten.. (wenn er zb schräg an einer wand vorbeifährt oder so...)

hier der quelltext.. nicht so sauber programmiert und kommentiert... aber ich denke man kanns "lesen" ;-)




$regfile = "m32def.dat"


$crystal = 16000000 'Quarzfrequenz
$baud = 9600



Sound Portd.7 , 200 , 900 'BEEP

'Servo Config
Config Servos = 1 , Servo1 = Portd.3 , Reload = 10 'Turmservo x
Config Portd = Output
Enable Interrupts
'Ende Servo Config

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung

Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein


Const Ref = 5 / 1023 'Für Batteriespannungsberechnung

Dim Taste As Byte

Dim A0 As Integer
Dim A1 As Integer
Dim A2 As Integer
Dim A3 As Integer
Dim A2_l As Integer
Dim A2_r As Integer



Dim Ton As Integer
Dim N As Integer
Dim I As Integer


Dim Center As Integer
Dim Servopos As Integer
Dim Left As Integer
Dim Right As Integer
Left = 50
Right = 150
Center = 100
Servopos = Center




' Für Motorentest
'Ports für linken Motor
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output 'Rechter Motor PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02 'Prescaler = 8











Wait 4

Sound Portd.7 , 300 , 200
Wait 1 'BEEP
Sound Portd.7 , 1000 , 500
Sound Portd.7 , 100 , 500 'BEEP
Sound Portd.7 , 100 , 600 'BEEP

Sound Portd.7 , 100 , 700 'BEEP


'### Hier startet Scout-Schleife ################################################## ##############################
Do

Servopos = Center
Servo(1) = Servopos

'Linker Motor ein
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor ein
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


Pwm1a = 1023
Pwm1b = 1023




'Messung der Abstände
Start Adc
A0 = Getadc(0)
'A1 = Getadc(1)
A2 = Getadc(2)











'If Schleife für Frontal Wand
'********

If A0 > 380 Then 'If Abstand Frontsensor 1 kleiner als 15cm


'## STOP
Pwm1a = 0
Pwm1b = 0

'### BEEEPILEEEP
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 400
Sound Portd.7 , 300 , 500
Sound Portd.7 , 300 , 200
Sound Portd.7 , 700 , 800





'Servo kopf drehen, rechts links vermessen.
'##########################################


Servopos = Center
Servo(1) = Servopos
Waitms 250

Servopos = Left 'Servo nach links drehen
Servo(1) = Servopos

Wait 1
A2_r = Getadc(2) 'Sensor links auslesen und A2_l zuweisen
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800

Waitms 150


For Servopos = Left To Right Step 10
Servo(1) = Servopos
Waitms 10
Next


Wait 1
A2_l = Getadc(2) 'Sensor rechts auslesen und A2_r zuweisen
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Waitms 150


For Servopos = Right To Left Step -10
Servo(1) = Servopos
Waitms 10
Next
Waitms 250


Servopos = Center
Servo(1) = Servopos






Sound Portd.7 , 300 , 400
Sound Portd.7 , 300 , 500
Sound Portd.7 , 300 , 200
Sound Portd.7 , 700 , 800



'################################################# ###
If A2_l > A2_r Then 'wenn rechts mehr platz als links dann zurückfahren und nach rechts drehen



'stop
Pwm1a = 0
Pwm1b = 0

Wait 1

'Linker Motor vorwärts
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor rückwärts
Portb.0 = 0 'bestimmt Richtung rechter Motor
Portb.1 = 1 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN

'###########
'nach rechts drehen

Waitms 250

Pwm1a = 1023
Pwm1b = 1023

Wait 1

'stop
Pwm1a = 0
Pwm1b = 0

Waitms 150


End If

'################################################# ###



If A2_r > A2_l Then 'wenn links mehr platz als rechts dann zurückfahren und nach links drehen



'stop
Pwm1a = 0
Pwm1b = 0

Waitms 250

'Linker Motor rückwärts
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor vorwärts
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


Waitms 250

'###########
'nach links drehen

Pwm1a = 1023
Pwm1b = 1023

Wait 1

'stop
Pwm1a = 0
Pwm1b = 0

Waitms 150


End If

'################################################# ###



End If
















Loop

Roboter n00b
18.09.2006, 23:02
ja, gefällt mir super, gute arbeit. Nur dauert es etwas lange, bis er sich nach erkennen des hindernisses wieder in bewegung setzt

nooob
19.09.2006, 20:06
ja da hab ich NOCH wait eingebaut, damit ich besser verfolgen kann was er nacheinander abarbeitet.. auch die vielen piepstöne sagen mir also wo im quelltext er gerade is ;-)

gleichzeitig glaub ich, dass der wenn man zu wenig zeit lässt, nich korrekt die befehle ausführt.. speziell motorsteuerung.. vorwärts rückwärts..

tornado
02.10.2006, 16:48
Schade, ich kann das video nicht sehen, der öffnet die seite bei mir nicht.
wieso baust du nicht US sensoren anstatt den IR sensoren? die müssten die hindernisse besser erkennen.
grüsse
tornado