Skocz do zawartości

Line follower - stop- problem przy wyjeźdzaniu za linię.


Kaytec

Pomocna odpowiedź

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

$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
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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:

przedni    - 1    (zderzeniowy) 
lewy       - 1
środkowy   - 1
prawy      - 1

a następnie

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...

Link do komentarza
Share on other sites

A może tak...

$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


  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.