Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:2009:piw09_nxtcases_1 [2009/06/13 00:51]
piw09
pl:miw:2009:piw09_nxtcases_1 [2019/06/27 15:50] (aktualna)
Linia 6: Linia 6:
  
  
- ​====== Temat: Egzamin na Prawo Jazdy ======+ ​====== Temat: Egzamin na Prawo Jazdy (sterowanie regułami) ​======
  
 Przygotowaliśmy plac manewrowy dla robota zdającego egzamin na prawo jazdy. Przygotowaliśmy plac manewrowy dla robota zdającego egzamin na prawo jazdy.
Linia 37: Linia 37:
  
  
-Plansza FIXME +{{:​pl:​miw:​2009:​schemat_jazda_po_luku.png?​400|}}
  
 +* na zielono zaznaczone są miejsca gdzie konieczna jest ściana umożliwiająca sterowanie przy pomocy echo sondy 
 == Zapis słowny == == Zapis słowny ==
   - Jeżeli powróciłeś((odległość od krawędzi mniejsza niż PROG i KAT >= 90<​sup>​o</​sup>​ i kierunek TYL)) na miejsce rozpoczęcia manewru to STOP   - Jeżeli powróciłeś((odległość od krawędzi mniejsza niż PROG i KAT >= 90<​sup>​o</​sup>​ i kierunek TYL)) na miejsce rozpoczęcia manewru to STOP
Linia 78: Linia 78:
   then direction = BACK and angle = 0   then direction = BACK and angle = 0
 </​code>​ </​code>​
 +
 == Implementacja w prologu== == Implementacja w prologu==
 +
 +<code prolog>
 +
 +direction(forward).
 +angle(0).
 +
 +start :- 
 + ​nxt_light(Value), ​
 + Value = RGB_Black, ​
 + ​direction(Direction), ​
 + ​Direction = back, 
 + ​angle(Angle),​
 + Angle >= 90, 
 + 
 + ​nxt_stop, ​
 + ​nxt_close.
 +
 +start :- 
 + ​nxt_ultrasonic(Value), ​
 + Value > 20, 
 + ​direction(Direction), ​
 + ​Direction = forward, ​
 + 
 + ​nxt_go(1).
 +
 +start :- 
 + ​nxt_light(Value), ​
 + Value \= RGB_Black, ​
 + ​direction(Direction), ​
 + ​Direction = back, 
 +
 + ​nxt_go(-1).
 +
 +start :- 
 + ​nxt_ultrasonic(Value), ​
 + Value <= 20, 
 + ​angle(Angle), ​
 + Angle < 90, 
 + ​direction(Direction), ​
 + ​Direction = forward, ​
 + 
 + B is Angle + 10, 
 + ​retractall(angle(_)), ​
 + ​assert(angle(B)), ​
 +
 + ​nxt_rotate(300,​10). ​
 +  ​
 +start :-
 + ​nxt_light(Value),​
 + Value = RGB_Black, ​
 + ​angle(Angle), ​
 + Angle < 90, 
 + ​direction(Direction), ​
 + ​Direction = back, 
 +
 + B is Angle + 10, 
 + ​retractall(angle(_)), ​
 + ​assert(angle(B)), ​
 +
 + ​nxt_rotate(300,​-10). ​
 + 
 +start :-
 + ​nxt_ultrasonic(Value), ​
 + Value <= 20, 
 + ​angle(Angle), ​
 + Angle >= 90, 
 + ​direction(Direction), ​
 + ​Direction = forward, ​
 +
 + ​retractall(angle(_)), ​
 + ​assert(angle(0)),​
 +
 + ​retractall(direction(_)),​
 + ​assert(direction(back)).
 +
 +</​code>​
  
 ==== 2. Parkowanie skośne przodem ====  ==== 2. Parkowanie skośne przodem ==== 
  
-Podobnie jak w poprzednim przypadku do sterowania robotem zostaną użyte dwa sensory (echosonda z przodu, sensor światła z tyłu robota). Do przeprowadzenia manewru należy przygotować planszę wg załączonego schematu. Podobnie jak poprzednio, plansza musi być obmalowana czarną linią i otoczona ścianą ​z zaznaczonej strony+Podobnie jak w poprzednim przypadku do sterowania robotem zostaną użyte dwa sensory (echosonda z przodu, sensor światła z tyłu robota). Do przeprowadzenia manewru należy przygotować planszę wg załączonego schematu. Podobnie jak poprzednio, plansza musi być obmalowana czarną linią i otoczona ścianą ​(kolor zielony na schemacie)
  
-schemat FIXME+{{:​pl:​miw:​2009:​schemat_parkowanie_skosne.png?​250|}}
  
 == Zapis słowny == == Zapis słowny ==
Linia 121: Linia 198:
   then direction = BACK and angle = 0   then direction = BACK and angle = 0
 </​code>​ </​code>​
 +
 == Implementacja w prologu== == Implementacja w prologu==
 +
 +<code prolog>
 +direction(forward).
 +angle(0).
 + 
 +start :- 
 + ​nxt_light(Value), ​
 + Value = RGB_Black, ​
 + ​direction(Direction), ​
 + ​Direction = back, 
 + ​angle(Angle),​
 + Angle >= 45, 
 + 
 + ​nxt_stop, ​
 + ​nxt_close.
 + 
 +start :- 
 + ​nxt_ultrasonic(Value), ​
 + Value > 20, 
 + ​direction(Direction), ​
 + ​Direction = forward, ​
 + 
 + ​nxt_go(1).
 +    ​
 +start :- 
 + ​nxt_light(Value), ​
 + Value \= RGB_Black, ​
 + ​direction(Direction), ​
 + ​Direction = back, 
 + 
 + ​nxt_go(-1).
 + 
 +start :- 
 + ​nxt_ultrasonic(Value), ​
 + Value <= 20, 
 + ​angle(Angle), ​
 + Angle < 45, 
 + ​direction(Direction), ​
 + ​Direction = forward, ​
 + 
 + B is Angle + 5, 
 + ​retractall(angle(_)), ​
 + ​assert(angle(B)), ​
 + 
 + ​nxt_rotate(300,​5). ​
 + 
 +start :-
 + ​nxt_light(Value),​
 + Value = RGB_Black, ​
 + ​angle(Angle), ​
 + Angle < 45, 
 + ​direction(Direction), ​
 + ​Direction = back, 
 + 
 + B is Angle + 5, 
 + ​retractall(angle(_)), ​
 + ​assert(angle(B)), ​
 + 
 + ​nxt_rotate(300,​-5). ​
 + 
 +start :-
 + ​nxt_ultrasonic(Value), ​
 + Value <= 20, 
 + ​angle(Angle), ​
 + Angle >= 45, 
 + ​direction(Direction), ​
 + ​Direction = forward, ​
 + 
 + ​retractall(angle(_)), ​
 + ​assert(angle(0)),​
 + 
 + ​retractall(direction(_)),​
 + ​assert(direction(back)).
 +</​code>​
  
 ==== 3. Koperta==== ==== 3. Koperta====
- Do tego manewru została użyta plansza wg schematu. Manewr rozpoczyna się w miejscu oznaczonym ​literą S (Start), a kończy się po prawidłowym zaparkowaniu w "​kopercie"​. Manewr praktycznie rozpoczyna się po najechaniu na czarną linię prostopadłą do miejsca do markowania.  ​+ Do tego manewru została użyta plansza wg schematu. Manewr rozpoczyna się w miejscu oznaczonym ​"Start", a kończy się po prawidłowym zaparkowaniu w "​kopercie"​. Manewr praktycznie rozpoczyna się po najechaniu na czarną linię prostopadłą do miejsca do markowania. Kolorem zielonym na schemacie jest zaznaczone miejsce gdzie musi zostać umieszczona ściana aby prawidłowo zadziałała echosonda.  ​
  
- schemat FIXME+ {{:​pl:​miw:​2009:​picture_7.png?​250|}}
  
  == zapis słowny ==  == zapis słowny ==
Linia 160: Linia 312:
   then direction = BACK and rotate(-45)   then direction = BACK and rotate(-45)
  
 +  Rule 6:
   if light_Value = BLACK and manoeuvre = STARTED and direction = BACK    if light_Value = BLACK and manoeuvre = STARTED and direction = BACK 
   then direction = FORWARD   then direction = FORWARD
Linia 199: Linia 352:
   ​   ​
   retractall(direction(_)),​   retractall(direction(_)),​
-  assert(directino(slant)), ​+  assert(direction(slant)), ​
  
   nxt_rotate(300,​45).   nxt_rotate(300,​45).
  
 +start:-
 +  nxt_light(Value), ​
 +  Value = RGB_Black, ​
 +  manoeuvre(Manoeuvre), ​
 +  Manoeuvre = started, ​
 +  direction(Direction), ​
 +  Direction = slant, ​
  
 +  retractall(direction(_)),​
 +  assert(direction(back)),​
 +
 +  nxt_rotate(300,​-45). ​
 +
 +start:-
 +  nxt_light(Value), ​
 +  Value = RGB_Black, ​
 +  manoeuvre(Manoeuvre), ​
 +  Manoeuvre = started, ​
 +  direction(Direction), ​
 +  Direction = back, 
 +
 +  retractall(direction(_)),​
 +  assert(direction(forward)).
   ​   ​
 in(X,​[X|_]). in(X,​[X|_]).
Linia 209: Linia 384:
   in(X,Tail).   in(X,Tail).
 </​code>​ </​code>​
 +
 ==== 4. Hamowanie awaryjne ====  ==== 4. Hamowanie awaryjne ==== 
  
pl/miw/2009/piw09_nxtcases_1.1244847102.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0