Možnosti komponentu Robot

Tento krátky tutoriál je rýchlym návodom na použitie komponentu robot.ocx na riadenie Robotnačky - priamo cez BlueTooth port i na diaľku cez siet Internet z prostredia Imagine (alebo iných jazykov).

Ak váš počítač je pripravený pre Robotnačku, prvými krokmi je vytvorenie objektu robot a pripojenie sa na robota cez virtuálny sériový port:

  new "oleobject [comname robot name r]
  r'connect "com4
Teraz môžeme vysielať riadiace príkazy ako keby sme riadili korytnačku. Všimnite si ale, že tieto príkazy už neriadia žiadnu korytnačku na grafickej ploche, riadia len priamo robota. (AvŠak, ak namiesto toho nahráte robot.imt, ktorý obsahuje triedu RobotTurtle, riadenie korytnačky na obrazovke sa zviaže s riadením robota). Napríklad môžete zadať nasledujúce príkazy (kompletný zoznam je nižšie).
  r'pu	r'fd 1000
  r'lt 720     ; zodpovedá 90 stupňom
  r'pd	r'bk 1000

O krokoch robota a korytnačiek
Argumenty procedúr fd a bk udávajúce dĺžku - počet krokov sú v prípade robota trochu väčšie, ako sme zvyknutí pri riadení korytnačky na obrazovke. Dôvod je jednoduchý: jeden krok korytnačiek na obrazovke zodpovedá jednému bodu na obrazovke. Bežná obrazovka alebo display má asi 600 až 1000 bodov na výšku. Robot sa vie ale pohybovať po veľmi jemných krokoch - je ich až približne 5 na jeden milimeter! To znamená, že 1000 krokov zodpovedá dĺžke len asi 20 cm.

Pohyb robota nie je obmedzený len na jednoduché pohyby korytnačej grafiky. Dokáže kresliť aj kružnice a kružnicové oblúky takmer µubovoµného polomeru - nastavením rozličných konątantných rýchlostí na oboch kolieskach robota. Napríklad na príkaz:

  r'fdspeed 10 40
sa robot začne pohybova» vpred, pričom jeho µavé koliesko sa bude pohybova» ątvrtinovou rýchlos»ou v porovnaní s jeho pravým kolieskom.

Matematika kruhových pohybov
V našom príklade bude dĺžka oblúku, ktorý vykrojí pravé koliesko (l2) 4-krát väčšia ako dĺžka oblúku vykrojeného ľavým kolieskom (l1), pretože pravé koliesko sa pohybuje 4-krát rýchlejšie a prejdená vzdialenosť je úmerná rýchlosti. Chceli by sme zistiť polomer (r) kružnice, ktorú robot nakreslí. Môžeme ho vypočítať takto (vzdialenosť pera od oboch kolies je 90 mm):
  l1 = 2π.(r - 90)
  l2 = 2π.(r + 90)
  l2 = 4.l1
  ________________

  2π.(r + 90) = 8π.(r - 90)
       r + 90 = 4r - 360
            r = 150 mm
Podobne, príkaz:
  r'bkspeed 50 50
spôsobí, ľe sa robot začne pohybova» polovičnou rýchlos»ou vzad, alebo na príkaz:
  r'ltspeed 10 40
začne Robotnačka kresli» kruľnicu s polomerom 54mm.

Viac matematiky o kruhových pohyboch
V tomto príklade bude ľavé koliesko robota sledovať kružnicu v spätnom pohybe, zakiaľ pravé koliesko bude sledovať väčšiu sústrednú kružnicu v doprednom pohybe. Polomer nakreslenej kružnice môžeme vypočítať tak, že spojíme tri fakty: 1) vzdialenosť koliesok je 180 mm, 2) pomer rýcholstí (a teda aj prejdených dĺžok a aj polomerov kružníc) koliesok je 1:4 a 3) pero sa nachádza v strede medzi kolieskami a teda polomer nakreslenej kružnice spolu s polomerom spätnej kružnice spolu tvoria 90 mm - polovicu vzdialenosti koliesok:
  180 = r1 + r2	   r2 = 4 r1
  180 = 5 r1
  r1  = 36,        r2 = 144

  r + r1 = 90      r = 90 - 36 = 54 mm
A napokon príkaz:
  r'rtspeed 0 50
spôsobí, ľe sa robot začne otáča» polovičnou rýchlos»ou vzad okolo svojho µavého kolieska.

Rýchlostné príkazy sa vykonávajú až pokiaľ nepríde ďalší príkaz. Na zastavenie robota je teda potrebné nastaviť rýchlosť 0 na obe kolieska (fdspeed 0 0). Namiesto nich je ale možné použiť kombinované príkazy, kde je počet krokov určený vopred (r'fdx, r'bkx, r'ltx, r'rtx) a teda kreslia kružnicové oblúky určitej dĺžky.

Ako sa robot pohybuje po ploche, niekedy by bolo zaujímavé alebo užitčné poznať jeho polohu. Toto nie je možné s absolútnou presnosťou, pretože žiaden robot na svete sa nevyhne prešmykovaniu kolies na podklade a žiadna dielňa na svete by nevyrobila robota tak presného, ktorý by nestrácal zopár uhlových sekúnd pri pohybe vpred alebo otáčaní na mieste. Napriek tomu si komponent robot udržuje presnú informáciu o odhadovanej polohe robota. Získame ju príkazom pos. Na textovú plochu pozíciu vypíšeme takto:

  print r'pos 0
Tento príkaz vypíše pozíciu (súradnice x a y) a aktuálny smer robota.

Niekedy je vhodné súradnice vynulovať na [0,0],0, a dosiahneme to príkazom

  r'pos 1
ktorý tiež vráti aktuálne súradnice.

Robot je vybavený 6 senzormi, ktoré sú navrhnuté tak, aby pri aktivovaní zabránili, aby robot spadol zo stola. Môžeme ich využiť aj na rozlíąenie farby podkladu (len čierna a biela). Napríklad, robot môľe zasta» potom ako sa dostane nad nejaký geometrický útvar. Hodnoty senzorov (ktoré sú vždy 0 alebo 1 pre každý senzor a spolu sú tieto bity zbalené do jedného 6-bitového čísla) je moľné zisti» operáciou:

  r'getsensors
alebo je moľné naprogramova» podmienku, pri ktorej splnení robot prestane vykonáva» príkaz a zastaví motory, napríklad po príkaze:
  r'condition 0 63 0
uľ robot nespadne zo stola, alebo po príkaze:
  r'condition 16 0 16
robot sledujúci čiernu čiaru zastane na mieste, kde z čiary vyjde. Jednotlivé hodnoty zodpovedajú senzorovým maskám XOR, OR a AND, viac o tom a aj o mnohých ďalších príkazoch komponentu robot si môžete prečítať v súbore ReadMe.txt

Zoznam príkazov komponentu robot

fd Nchoď N krokov dopredu
bk Nchoď N krokov vzad
lt αotoč sa o α krokov (α / 8 stupňov) vľavo
rt αotoč sa o α krokov (α / 8 stupňov) vpravo

fdspeed l rnastav rýchlosti motorov na l, a r
bkspeed l rnastav rýchlosti motorov na -l, a -r
ltspeed l rnastav rýchlosti motorov na -l, a r
rtspeed l rnastav rýchlosti motorov na l, a -r

fdx l r Nrovnako ako fdspeed, ale zastav keď rýchlejšie koliesko spraví N krokov
bkx l r Nrovnako ako bkspeed, ale zastav keď rýchlejšie koliesko spraví N krokov
ltx l r Nrovnako ako ltspeed, ale zastav keď rýchlejšie koliesko spraví N krokov
rtx l r Nrovnako ako rtspeed, ale zastav keď rýchlejšie koliesko spraví N krokov

pdpero dole
pupero hore

getsensorshodnota senzorov
isaliveping robota
getvoltagestav batérie v decivoltoch
getactivity1 - rýchlostný príkaz, 2 - pozičný príkaz, 3 - v pokoji, 4 - chyba
isdone1 - v pokoji, 0 - stále vykonáva pozičný príkaz
alwayswait on|offon znamená, že pozičný príkaz blokuje pokračovanie programu, kým ho robot nedokončí (default off).

drawtext text size fontnakreslí text zadanej veľkosti a fontom (Borland BGI fonts)
textsize text size fontzistí veľkosť textu v krokoch
pos reset=0|1zistí pozíciu a resetne, ak je požadované
moveto x ypresunie robota na zadanú pozíciu

condition xor and ornastaví podmienku senzora
satisfiedzistí stav podmienky pre predchádzajúci príkaz

connect portpripoj sa na robota
setcomparam ...nastav komunikačné parametre
getversionverzia firmware
getnumkód nainštalovaných rozšírení robota

tone frequency durationzahraj tón

drawcalibnakresli kalibračný obrázok
calibrate ...nakalibruj robota podľa kalibračného obrázka

gripper commandriadenie chápadla (ak je pripojené)

server on|offumiestni robota na sieť
portnumber numnastav sieťový port
getportvráti meno portu, kde je robot pripojený
message user msgpošle textovú správu zadanému užívateľovi - v sieťovom režime
password newpswdzmení heslo
exclusive on|offzapne alebo vypne výhradný jedno-užívateľský režim - v sieťovom režime)
logoff passwdodhlás iného užívateľa
user name passwdzadaj meno a heslo pre prihlásenie sa - v sieťovom režime
connectedvráti 1 ak je robot pripojený, inak 0
netreport filenamenastaví meno súboru pre logfile
db ...nastaví databázu registračného systému

userfile filenamenastav súbor s užívateľmi
adduser name pswdpridaj nového užívateľa
deluser namezruš užívateľa
listusersvráť zoznam užívateľov

wait tpočkaj, kým pozičný príkaz skončí, alebo kým uplynie t ms
messages on|offpovolenie systémových správ v messageboxe

logfile filename|offmeno súboru pre replay
replay filenamezopakuj príkazy uložené v súbore