Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:2009:piw09_nxtcases_1 [2009/06/13 00:59] 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 == |