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) |
| |
| |
====== 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. |
| |
| |
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 |
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 == |
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 == |
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 |
| |
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|_]). |
in(X,Tail). | in(X,Tail). |
</code> | </code> |
| |
==== 4. Hamowanie awaryjne ==== | ==== 4. Hamowanie awaryjne ==== |
| |