Przesunięty przez: daniel93 25 Cze 08 01:29 |
Line follower - stop- problem przy wyjeźdzaniu za linię. |
| Autor |
Wiadomość |
Kaytec

Pomógł: 2 razy Posty: 37 Otrzymał 3 piw(a) Skąd: Olsztyn
|
Wysłany: 26 Sty 08 06:06 Line follower - stop- problem przy wyjeźdzaniu za linię.
|
|
|
Witam. Zrobiłem do line followera czujnnik optyczny - zderzeniowy. Jest na przedzie robota.
Sam problem dotyczy programu. zrobiłem wszystko na if'ach i mam problem w momencie gdy robot wyjdzie poza linie wszystkimi czujnikami dolnymi (1,1,1) i w tym momencie zobaczy przeszkodę, to po usunięciu jej już nie kontynuuje poprzednio wykonywanego manewru. W programie powinno być raczej coś w stylu jeżeli czujnik 1 to cały program narazie stop. jak 1 to wraca do programu. U mnie tylko z pozoru tak jest. Proszę o pomoc. Pozdrawiam.
Film
| Kod: | $regfile = "2313def.dat"
$crystal = 10000000
'$noramclear
Config Portb = Output
Config Portd = Input
Portb = &B00000000
Portd = &B00000000
Motor_pp Alias Portb.0 'wyprowadzenia dla silników
Motor_pt Alias Portb.1
Motor_lp Alias Portb.3
Motor_lt Alias Portb.2
Sensor_p Alias Pind.2 'prawy czujnik lini
Sensor_s Alias Pind.4 'srodkowy czujnik lini
Sensor_l Alias Pind.3 'lewy czujnik lini
Sensor_o Alias Pind.1 'przedni czujnik zderzeniowy
Do
If Sensor_o = 0 And Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 1 Then 'jedz prosto
Gosub Go
Elseif Sensor_o = 0 And Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then 'skrec w lewo
Gosub Lewt
Elseif Sensor_o = 0 And Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then 'skrec w lewo
Gosub Lewt
Elseif Sensor_o = 0 And Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then 'skrec w prawo
Gosub Righ
Elseif Sensor_o = 0 And Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 0 Then 'skrec w prawo
Gosub Righ
Elseif Sensor_o = 1 And Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 1 Then 'stoj pomimo stanow
Gosub Stoj
Elseif Sensor_o = 1 And Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then 'stoj pomimo stanow
Gosub Stoj
Elseif Sensor_o = 1 And Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then 'stoj pomimo stanow
Gosub Stoj
Elseif Sensor_o = 1 And Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then 'stoj pomimo stanow
Gosub Stoj
Elseif Sensor_o = 1 And Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 0 Then 'stoj pomimo stanow
Gosub Stoj
End If
Loop
Go: 'polecenia dla silnikow
Motor_lt = 1
Motor_pt = 1
Return
Lewt:
Motor_lt = 1
Motor_pt = 0
Return
Righ:
Motor_lt = 0
Motor_pt = 1
Return
Stoj:
Motor_lt = 0
Motor_pt = 0
Return |
|
|
|
|
|
 |
DC2003

Posty: 1 Skąd: Polska
|
Wysłany: 26 Sty 08 09:02
|
|
|
| Po pierwsze proponuje poprawić opisy. Dopisać który czujnik jest do czego. Po drugie opis w dolnych IF mówi, że "go along", a program podaje idź do stop. Program pisany na kolanie i dlatego nie działa. |
|
|
|
|
 |
Kaytec

Pomógł: 2 razy Posty: 37 Otrzymał 3 piw(a) Skąd: Olsztyn
|
Wysłany: 26 Sty 08 11:52
|
|
|
edytowałem pierwszy-post poprawiłem w nim opisy.
Fakt faktem "na kolanie" ale program działa i to znakomicie. oto film z działania:
http://pl.youtube.com/watch?v=e9kYTq1hIPM
Fakt błąd w opisach, ale tylko dlatego że kopiowałem same ify,
pod koniec filmu widać wspominaną problemową sytuację opisaną niżej.
Bo gdy przyjmę że przy następujących stanach czujników:
| Kod: |
przedni - 1 (zderzeniowy)
lewy - 1
środkowy - 1
prawy - 1
|
a następnie
| Kod: |
przedni - 0
lewy - 1
środkowy - 1
prawy - 1
|
to robot stoi dalej w miejscu bo nie widzi czarnej linii... normalnie poradzi sobie z trzema jedynkami bo nie ma takiej definicji i kontynuuje poprzedni manewr... |
|
|
|
|
 |
abxyz
Expert programowanie

Pomógł: 16 razy Posty: 158 Otrzymał 26 piw(a) Skąd: zza winkla
|
Wysłany: 27 Sty 08 11:23
|
|
|
A może tak...
| Kod: |
$regfile = "2313def.dat"
$crystal = 10000000
'$noramclear
Config Portb = Output
Config Portd = Input
Portb = &B00000000
Portd = &B00000000
Motor_pp Alias Portb.0 'wyprowadzenia dla silników
Motor_pt Alias Portb.1
Motor_lp Alias Portb.3
Motor_lt Alias Portb.2
Sensor_p Alias Pind.2 'prawy czujnik linii
Sensor_s Alias Pind.4 'środkowy czujnik linii
Sensor_l Alias Pind.3 'lewy czujnik linii
Sensor_o Alias Pind.1 'przedni czujnik zderzeniowy
Do
If Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 1 Then 'jedz prosto
If Sensor_o = 1 Then Gosub Stoj 'jeśli przeszkoda na drodze to skok do podprogramu "Stoj"
Gosub Wprzod
Elseif Sensor_l = 0 And Sensor_s = 1 And Sensor_p = 1 Then 'skręć w lewo
If Sensor_o = 1 Then Gosub Stoj
Gosub Wlewo
Elseif Sensor_l = 0 And Sensor_s = 0 And Sensor_p = 1 Then 'skręć w lewo
If Sensor_o = 1 Then Gosub Stoj
Gosub Wlewo
Elseif Sensor_l = 1 And Sensor_s = 0 And Sensor_p = 0 Then 'skręć w prawo
If Sensor_o = 1 Then Gosub Stoj
Gosub Wprawo
Elseif Sensor_l = 1 And Sensor_s = 1 And Sensor_p = 0 Then 'skręć w prawo
If Sensor_o = 1 Then Gosub Stoj
Gosub Wprawo
End If
Loop
'polecenia dla silników
Wprzod:
Motor_lt = 1
Motor_pt = 1
Return
Wlewo:
Motor_lt = 1
Motor_pt = 0
Return
Wprawo:
Motor_lt = 0
Motor_pt = 1
Return
' podprogram wyłącza oba silnik i wstrzymuje działanie aż zniknie przeszkoda
Stoj:
Motor_lt = 0
Motor_pt = 0
While Sensor_o = 1
Waitms 10
Wend
Return
End
|
|
|
|
|
|
 |
|
|