O ile chcecie pobawić się w projektowanie algorytmu działania prostego robota oraz podejrzeć działanie algorytmu na własnym torze przeszkód to jest zabawka dla was.
Do dyspozycji jest pięć prymitywnych instrukcji:
1. move
2. turnleft
3. pickbeeper
4. putbeeper
5. turnoff
Dodatkowo możliwe jest używanie osiemnastu przygotowanych poniższych instrukcji specjalnych:
1. front_is_clear
2. front_is_blocked
3. left_is_clear
4. left_is_blocked
5. right_is_clear
6. right_is_blocked
7. next_to_a_beeper
8. not_next_to_a_beeper
9. any_beepers_in_beeper_bag
10. no_beepers_in_beeper_bag
11. facing_north
12. not_facing_north
13. facing_south
14. not_facing_south
15. facing_east
16. not_facing_east
17. facing_west
18. not_facing_west
Powyższe instrukcje podzielić można na kilka grup:
1. testujące obecność ściany wall
2. testujące obecność znacznika beeper,
3. testujące kierunk położenia (funkcje kompasu)
Możliwe jest wykorzystanie następujących instrukcji warunkowych:
if test:
instrukcje
if test:
instrukcje
else:
instrukcje
if test:
instrukcje
elif test:
instrukcje
...
elif test:
instrukcje
else:
instrukcje
oraz poniższych pętli:
do dodatnia_liczba:
instrukcje
while test:
instrukcje
Co najważniejsze możliwe jest tworzenie własnych funkcji, których nazwy zawerają wyłącznie ltery i podkreślnik:
define nowa_nazwa_funkcji:
instrukcje
Całość oparta jest o dwa edytory tekstowe, w których definiujemy świat dla robota oraz piszemy algorytm jego działania. Interfejs graficzny jest maksymalnie uproszczony i pozwala na podglądanie w pracy krokowej oraz ciągłej działania stworzonego robota w uprzednio zdefiniowanym świecie. Dla wygody istnieje możliwość narysowania swojego świata w trybie graficznym. Chcąc zacząć zabawę musimy zainstalować sobie aplikację GvR np:
sudo apt-get install gvr
Oto przykładowy kod mojego świata oraz algorytm działania prymitywnego robota:
Kod świata:
Robot 4 3 N 0
Beepers 4 7 1
Beepers 4 2 2
Beepers 4 4 3
Beepers 7 2 4
Beepers 2 2 5
Beepers 7 2 6
Wall 2 6 N
Wall 2 4 N
Wall 5 4 N
Wall 5 4 W
Wall 10 4 W
Wall 4 10 W
Wall 4 10 S
Wall 5 10 S
Wall 7 9 S
Wall 7 9 W
Wall 8 8 W
Wall 6 10 S
Wall 5 8 S
Wall 8 1 W
Wall 9 2 W
Wall 8 3 W
Wall 6 4 N
Wall 6 3 N
Wall 8 2 N
Wall 8 4 N
Wall 8 4 S
Wall 8 5 S
Wall 8 2 S
Wall 9 4 S
Wall 1 2 S
Wall 4 2 S
wall 3 10 N
wall 2 10 N
wall 1 10 N
wall 8 6 N
wall 8 7 N
wall 9 7 E
wall 9 8 N
wall 8 9 E
wall 8 9 N
wall 7 10 E
wall 6 10 E
wall 7 10 N
wall 9 8 E
wall 10 6 N
wall 11 6 N
wall 11 6 E
wall 11 5 N
wall 10 5 E
wall 10 5 N
wall 11 5 E
wall 11 4 E
wall 11 3 E
wall 11 2 N
wall 10 3 N
wall 10 1 N
wall 10 1 E
wall 11 2 E
wall 11 1 E
wall 5 6 E
wall 6 5 N
wall 2 8 E
wall 2 7 N
wall 1 10 E
wall 2 10 E
Kod działania robota:
define turn_unblocked:
if front_is_blocked:
while front_is_blocked:
turnleft
define turn_from_while:
if front_is_clear:
if next_to_a_beeper:
turnleft
do 1000:
turn_from_while
if next_to_a_beeper:
pickbeeper
if front_is_blocked:
turn_unblocked
else:
move
if front_is_blocked:
turn_unblocked
else:
if any_beepers_in_beeper_bag:
putbeeper
move
move
turnoff
Tak wygląda zainstalowana i działająca aplikacja GvR:
Linki:
http://gvr.sourceforge.net/about.php
http://rur-ple.sourceforge.net/en/rur.htm
http://gvr.sourceforge.net/lessons/rfrank/
http://pyrorobotics.org/?page=Robot_20Simulators
http://en.wikipedia.org/wiki/Karel_the_robot
http://en.wikipedia.org/wiki/Robotics
http://www.nebomusic.net/computerhelp.html
http://bricxcc.sourceforge.net/nbc/
http://mindstorms.lego.com/Overview/NXTreme.aspx
http://www.youtube.com/watch?v=uLomAePdPII&NR=1
http://www.eres.alpha.pl/elektronika/articles.php?cat_id=12
Brak komentarzy:
Prześlij komentarz