Strona Główna
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy RegulaminRegulamin  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj






Przyszłość jest w naszych rękach...
...bo przyszłość to robotyka.





Poprzedni temat «» Następny temat
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
Postaw piwo autorowi tego posta
 
 
 
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.
Postaw piwo autorowi tego posta
 
 
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...
Postaw piwo autorowi tego posta
 
 
 
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


Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


website uptime

Powered by phpBB modified by Przemo © 2003 phpBB Group
kredyt przez internet

Love and Light Dominik Peh kosmetyki nero BearShare taniec nowoczesny Warszawa taniec z gwiazdami Porównywarka cen elektroniki