26 października 2008

Guido von Robot - prosty symulator robota w Pythonie

GvR (Guido von Robot) to niewątpliwie kolejna alternatywa programowania przy pomocy żółwia analogicznie jak w języku LOGO. Istnieje jednak banalna różnica, która polega na zawężeniu zastosowania GvR do pisania algorytmu dla prostego robota wykorzystując składnie języka Python. Autor zminimalizował ilość zdefiniowanych funkcji, instrukcji oraz logikę do programowania robota. W założeniach programu jest edukacja dzieci i młodzieży - jako wstęp do podstaw programowania banalnych robotów.
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: