Transcript Slide 1

Robotų programavimo
technologijos
T125B114
2012 m.
Robertas Damaševičius
[email protected]
Robotų programavimo
aplinkos ir kalbos
Turinys

Microsoft Robotics Developer Studio




Architektūra
DSS
Visual Programming Language (VPL)
Kitos programavimo platformos ir kalbos



Arduino
Lego
Rovio
Programavimo platformos

Grafinės





Scenarijų



Python
Perl Robotics
C kalbos dialektai



MRDS VPL
Lego NXT (LabView)
RoboLab
RIS
Easy C
Robot C
Sisteminės

Java, C-sharp
http://netzspannung.org/learning/artdecom/systemwusel-technology/images/robolab-gucki-ruhig_GROSS.gif
Microsoft Robotics Developer Studio



Robotų projektavimo ir modeliavimo platforma
3D imitavimas
Pagrindinė programavimo kalba: C#
Microsoft Robotics Developer Studio
Realaus laiko architektūra
 Lygiagretumas
 Servisų infrastruktūra
Projektavimo įrankiai
 Modeliavimo įrankis
 Visual Programming
Language (VPL)
Servisai ir pavyzdžiai
 Mokomoji medžiaga
 Pavyzdžiai
 Robotų servisai
 Robotų modeliai
Robotics Developer Studio



Windows platformai sukurta aplinka, skirta robotų
kūrimui.
Ji yra integruota su Visual Studio .NET, todėl
programuoti galima bet kuria .NET palaikoma
programavimo kalba.
Pranašumai:



Palaikomi paskirstyti skaičiavimai.
Nepriklauso nuo robotų techninės įrangos, lustų architektūros.
Galima valdyti sudėtingus robotus turinčius daugiau nei vieną
procesorių.
Microsoft Robotics Studio

Robotics Studio sudaro trys dalys:




Runtime — sistemos šerdis, kuri leidžia valdyti robotus.
Concurrency Library (CCR) — biblioteka, skirta lygiagrečių
procesų valdymui.
Decentralized System Services (DSS) — paslaugomis grįsta
architektūra leidžianti kurti ir koordinuoti paskirstytas
programas.
Robotą valdanti programa veikia interneto serveryje,
naudoja tinklo paslaugas. Robotas bendrauja su jį
valdančia programa per bevielę arba laidinę sąsają.
Projektavimo įrankiai

Modeliavimo vizualizavimo įrankiai

Aukštos raiškos 3D atvaizdavimas


Fizikos varikliukas


Grafinis ir fizikinis vaizdai
PhysX™ variklis
Greitas programų kūrimas ir
derinimas
Kas yra roboto programa (pagal MRDS)?
Bumper
(Jutiklis)
Variklis
Message Box
(Vykdytuvas)
Orchestrator
Variklis

Infrared Detector
(Jutiklis)
Bumper
(Jutiklis)
Laisvai susijusių, lygiagrečiai vykdomų komponentų kompozicija



Jutiklių / vykdytuvų valdymas
Vartotojo sąsaja (pvz., pranešimų langas)
Elgsena
Programos realizacijos modeliai

Palaikomi tiek atskiro, tiek paskirstyto vykdymo scenarijai
Prijungta
(operacijos vykdomos kompiuteryje)
Atjungta (robotas veikia
autonomiškai)
Paskirstytas vykdymas
(vykdymas paskirstytas tarp
skirtingų modulių)
Servisai




Pagrindiniai Robotics Developer Studio objektai yra
servisai.
Kiekvienas servisas leidžia atlikti bendravimą tarp
procesų, o kiekvienas procesas atlieka konkrečią
funkciją, pvz., judina roboto galvą arba nuskaito
duomenis iš jutiklio.
Programą sudaro bendradarbiaujančių servisų rinkinys.
Servisai siunčia vienas kitam pranešimus per įvesties ir
išvesties jungtis.
Servisai


Pagrindinis programos kompozicinis blokelis
Servisas




Turi struktūrizuotą būseną
Bendrauja pranešimais siunčiamais per portus
Turi valdiklius (aprašo elgseną)
Pagrindinės operacijos



Būsenos gavimas ir manipuliavimas
Sukūrimas ir sunaikinimas
Pranešimų siuntimas
Portas
FIFO
Servisas
Valdikliai
Būsena
Paskirstytos programos

Servisai gali veikti:



viename robote
bendradarbiaujančių
robotų spiečiuje
tinklo kompiuteryje
Servisai

Servisai gali reikšti bet kokius skaičiavimus




Aparatūriškai: jutikliai, vykdytuvai
Programiškai: vartotojo sąsajos, duomenų
saugojimas,…
Agregacija: jutikliių apjungimas,…
Atkartojimas per kompoziciją

Atskiriama būsena nuo elgsenos
Serviso pavyzdys

Struktūrizuota būsena

Vienodos operacijos

GET, QUERY, UPDATE, DELETE, DROP, SUBSCRIBE
Servisų sąveika


Per tinklo protokolus
Vartotojo sąsajai užtikrinti ir sąveikai su naršykle
naudojamas HTTP


Gili integracija su esama tinklo infrastruktūra
DSSP: SOAP pagrįstas protokolas komunikavimui
tarp servisų

Papildo HTTP modelį struktūrinio duomenų modifikavimo
galimybėmis ir įvykių pranešimais
Robotics Studio sąveika su naršykle
Vartotojo sąsajos
servisas
Valdymo įtaiso
servisas
Robotas
Variklio
servisai
Jutiklių
servisai
Robotics Studio
Runtime variklis


Servisų būseną galima stebėti
visuose programos lygmenyse
Servisai grąžina duomenis įvairiais
formatais
Roboto valdymas su naršykle
Naršyklė
Prisijungimas
Scenarijus
Robotas
Valdymo langas
Variklio
servisai
Jutiklių
servisai
JS servisas
JS servisas
Robotics Studio
Runtime variklis
JS servisas
Decentralized Software Services (DSS)







DSS biblioteka leidžia vykdyti servisus skirtinguose
procesuose arba netgi skirtingose mašinose.
Programa, sukurta naudojant DSS, yra sudaryta iš daugelio
nepriklausomų lygiagrečiai vykdomų servisų.
Kiekvienas servisas turi su juo susietą būseną ir tam tikro tipo
gaunamus pranešimus, vadinamus operacijomis.
Kai servisas gauna pranešimą, jis gali keisti savo būseną ir
siųsti pranešimus kitiems servisams.
Norėdami gauti pranešimus apie kitų servisų būsenos
pasikeitimą, servisai gali juos užsiprenumeruoti.
Servisai taip pat gali būti apjungiami su kitais servisai ir
sudaryti partnerystę.
Šis procesas vadinamas orkestravimu (angl. orchestration).
DSS komponentai
Serviso komponentai




Kontraktas: apibrėžia servisui leidžiamų siųsti pranešimų
tipą. Kiekvieną kontraktą unikaliai identifikuoja kontrakto
identifikatorius, aprašytas URI (Universal Resource Identifier)
formatu.
Vidinė būsena: serviso saugoma informacija leidžianti jam
kontroliuoti savo veiksmus. Aprašyta kaip klasė, turinti
atributus, kurie yra svarbūs serviso darbui.
Elgsenos: operacijų, kurias gali atlikti servisas, aibė.
Vykdymo kontekstas: serviso partnerystės su kitais
servisais ir jo pradinė būsena. Servisas gali turėti neribotą
skaičių partnerių. Partnerystė gali būti dinaminė. Partneriai
nebūtinai turi būti vykdomi tame pačiame kompiuteryje.
Partnerystės pavyzdys
Bumper 2
(Sensor)
Motor
Message
Box
(Actuator)
Orchestrator
Motor
Infrared
detector
(Sensor)
Bumper 1
(Sensor)
Servisas gali užregistruoti partnerystę su bet kuriuo
skaičiumi kitų partnerių
Orkestratoriaus servisas užregistruoja partnerystę su
Bamperio servisu
Kontraktai



Servisai žino, kokiu formatu reikia siųsti vienas
kitam pranešimus, nes jie yra sudarę kontraktą
Kontrakte pateikiama visa informacija, kaip
pranešimai turi būti formatuojami ir kokias
funkcijas gali atlikti servisas
Kontraktas yra saugomas kaip XML schemos
apibrėžimo failas (.xsd)
DSS procesų operacijų sąrašas










Create – sukuriamas naujas servisas
Delete – sunaikinama serviso būsena
Drop – servisas sunaikinamas
Get – gauti serviso būsenos kopiją
Insert – papildyti serviso būseną nauja informacija
Lookup – gauti informaciją apie servisą ir jo kontekstą
Query – panašiai kaip Get, tačiau leidžiamos struktūrizuotos
užklausos.
Replace – pakeičiama serviso būsena
Subscribe – reikalauti pranešimo apie serviso būsenos
pasikeitimus
Update – gauti informaciją apie servisą ir jo kontekstą
Concurrency and Coordination
Runtime (CCR )






CCR biblioteką sudaro klasės ir metodai skirti lygiagretumo,
koordinavimo ir trikių apdorojimo užduotims atlikti.
CCR naudoja asinchroninį programavimo modelį.
Naudojant CCR galima rašyti nepriklausomai vienas nuo kito
vykdomus programų fragmentus, kurie bendrauja vienas su
kitu pranešimais.
Pranešimas yra bet kokio CCR palaikomo tipo duomenys.
Prieš siunčiant jie yra serializuojami ir konvertuojami į XML
formatą, o gavėjas vėliau atlieka atvirkštinį konvertavimą.
Gavus pranešimą, jis yra patalpinamas eilėje, vadinamoje
jungtimi (port) ir būna joje tol, kol gavėjas galės jį apdoroti.
CCR






Gavėjo veiksmų aktyvavimui gali būti nustatomos sąlygos, pvz.,
operacija „Join“ tarp dviejų jungčių reiškia, kad pranešimas turi
ateiti į abi šias jungtis (loginis IR).
Operacija „Choice“ reiškia, kad pranešimas gali ateitį į vieną iš
nurodytų jungčių (loginis ARBA). Loginių išraiškų įvertinimą
atlieka Arbitras.
Patenkinus nurodytą sąlygą, pranešimas yra perduodamas į
dispečerio eilę.
Užduočių vykdymo valdymą atlieka dispečeris, kurie seka šiuo
metu vykdomą kodo fragmentą.
Kiekvienas kodo fragmentas gali būti vykdomas lygiagrečiai ir
asinchroniškai.
Gijų skaičius paprastai yra parenkamas lygus procesorių
skaičiui sistemoje.
CCR architektūra
Robotų modeliavimas naudojant
Microsoft Visual
Programming Language
Grafinio modeliavimo aplinka





Sukurtą programą galima išbandyti modeliavimo
aplinkoje Visual Simulation Environment
Tai yra 3D simuliatorius, kuriame galioja visi fizikos
dėsniai
Kuriamų robotų prototipus ir jų algoritmus galima
išbandyti tiek patalpoje, tiek natūralioje lauko aplinkoje
Robotų servisų realizavimui galima naudoti Visual
Programming Language (VPL)
VPL – tai grafinio programavimo aplinka
Kam reikalingas modeliavimas?



Techninė robotų dalis
yra brangi
Aparatūrą sunku
testuoti
Įvairūs apribojimai gali
neleisti dirbti
lygiagrečiai
Kam reikalingas modeliavimas?

Pranašumai



Lengva išmokti
Lengvas prototipų
kūrimas
Geras mokymosi ir tyrimų
įrankis
Kam reikalingas modeliavimas?

Trūkumai



Nėra “triukšmo”
Nepilni arba netikslūs
duomenys
Priderinimas reikalauja
daug laiko
Visual Programming Language





Tai speciali programų kūrimo aplinka skirta darbui
su DSS servisais.
Programos aprašomos grafiškai naudojant grafinę
notaciją panašią į duomenų srautų diagramas.
Todėl VPL programos yra vadinamos diagramomis.
Kiekvienas blokas atitinka servisą, skaičiavimo
operaciją, sąlygą arba lizdinę diagramą ir yra
vadinamas veiksmu (angl. activity).
Linijos tarp blokų vaizduoja pranešimus,
keliaujančius tarp servisų.
Veiksmo pavyzdys VPL kalboje

Veiksmas turi:




vieną ar kelis įėjimus, vaizduojamus kvadračiukais piktogramos
kairėje ir
vieną ar kelis išėjimus, vaizduojamus kvadračiukais piktogramos
dešinėje
Kai kurie veiksmai turi atskirą išėjimą pranešimams siųsti
Pranešimai siunčiami gavus įėjimo signalą arba pasikeitus
serviso vidinei būsenai
Pranešimai, portai, arbitrai

Pranešimai siunčiami į portus
Port<int> myPort = new Port<int>() ;
myPort.Post (42) ;

Portuose yra:



FIFO struktūra duomenų saugojimui
Skaičiavimo proceso vienetai (continuations)
Arbitrai:

Realizuoja įprastines lygiagretumo abstrakcijas
Pavyzdys: pasirinkimas
PortSet<int, string> port = new PortSet<int, string>();
Activate(
Arbiter.Choice(port, MyIntHandler, MyStringHandler)
);
void MyIntHandler(int i)
{
Console.WriteLine("Received: " + i);
}
void MyStringHandler(string s)
{
Console.WriteLine("Received: " + s);
}
Pavyzdys: dinaminis apjungimas
PortSet<Result,Exception> resultsPort = new PortSet<int>();
// parallel computation by posting requests
for (int i=0;i<N;i++)
{
computePort.Post(new DoWork(someData,resultsPort));
}
// requests complete asynchronously with unknown number
// of failures vs. successes
Activate(
Arbitras.MultipleItemReceive(resultsPort,
delegate (ICollection<Result> successes,
ICollection<Exception> failures)
{
foreach(Result r in results)
{
……
}
});
Servisų koordinavimas
[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public IEnumerator<ITask> GetHandler(Get get)
{
get.ResponsePort.Post(_state);
yield break;
}
[ServiceHandler(ServiceHandlerBehavior.Exclusive)]
public IEnumerator<ITask> UpdateHandler(Update update)
{
_state.CurrentResult += update.Body.Value;
update.ResponsePort.Post(new UpdateResponse());
yield break;
}
Pagrindiniai VPL veiksmai (1)





Variable – veiksmas, skirtas gauti arba nustatyti
būsenos kintamojo reikšmę.
Calculate – veiksmas, skirtas skaičiavimams atlikti.
Data – veiksmas, skirtas statiniams duomenims
aprašyti.
Join – veiksmas, kuris išsiunčia pranešimą tik gavęs
pranešimą į savo visus įėjimus.
Merge – veiksmas, kuris persiunčia į išėjimą visus
pranešimus ateinančius į jo įėjimus.
Pagrindiniai VPL veiksmai (2)





If – veiksmas, kuris persiunčia pranešimą į savo pirmąjį
išėjimą, jeigu sąlygos reikšmę yra lygi TRUE.
Switch – pranešimas persiunčiamas į įėjime nurodytą
išėjimą.
List – veiksmas, kuris saugo duomenų sąrašą.
Comment – komentaras
Activity – vartotojo apibrėžimas veiksmas, kuris gali būti
sudarytas ir iš kitų veiksmų.
Architektūra
The Simulator Engine Service







Realizuota kaip servisas
Saugo “pasaulio” būseną
Valdo įvesties įtaisus
3D atvaizdavimas naudojant XNA
Ageia fizikos dėsnių simuliatorius
Grafinė vartotojo sąsaja
Modeliavimo ir derinimo
redaktorius
User Interface / Editor
Simulation
Engine
Service
Ageia
Physics
Engine
XNA
Graphics
Library
Display
Hardware
Paprasčiausias modelis: Hello, World!
Kaip jis veikia?


Veiksmai keičiasi pranešimais
Veiksmai



Gavus įvesties pranešimą atliekamas veiksmas
Veiksmo rezultatas siunčiamas kaip išvesties pranešimas
Jungtys

Jungia išvestis su įvestimis
Input message
Output message
Duomenys



Išvesties pranešimas yra nauja duomenų
reikšmė
Turinys ignoruojamas
Skirtingi duomenų tipai

int, string, double, bool, …
Serviso veiksmai

Servisai gali turėti daug veiksmų


AlertDialog, PromptDialog, ConfirmDialog
Dauguma veiksmų turi du išvesties pranešimus


Sekmė – gali būti siunčiamos rezultatų reikšmės
Nesekmė – veiksmas nebaigtas
Servisų pasirinkimas
Naudoti
Services toolbox

Veiksmų sujungimas

Pirmojo veiksmo išvesties pranešimas
sujungiamas su …
… antrojo veiksmo įvestimi
Veiksmų realizavimas
Du kartus su pele
spūstelėjus
veiksmą parodoma
jo realizacija
Hello, World!
Duomenų jungtys
atlieka duomenų
formatavimą prieš
išsiuntimą kitam
veiksmui
Reikšmė:
AlertText = “Hello, World!”
(AlertText  string)
Veiksmai
Įvestis
Išvestis
Microsoft Robotics Studio
Daugiau informacijos:
http://www.msdn.microsoft.com/robotics
Lego robotų programavimas
Turinys









LEGO robotų technologija
Programavimas su ROBOTC
EasyC
RobotBASIC
NXTsharp
Roborealm
Programavimas su JAVA
Robolab
Pavyzdžiai
„Smegenys“ ir komponentai
Šviesos jutiklis
Garso jutiklis
NXT Brick: roboto „smegenys“
Servovarikliai
Lemputės
Sąlyčio jutiklis
Ultragarso jutiklis
„Smegenys“ ir komponentai







Jutikliai leidžia robotui reaguoti į aplinką
Šviesos jutikliai: reaguoja į šviesos intensyvumą ir
spalvą
Ultragarso: orientacija erdvėje
Sąlyčio: kliūčių vengimas
Garso: reaguoja į garso intensyvumą
Lemputės gali būti naudojamos kaip roboto
aktyvumo indikatorius
Servovarikliai užtikrina tikslų roboto judėjimą
„Smegenys“
Variklių ir
lempučių jungtys
USB jungtis
Programos
vykdymo
piktograma
Navigacija
On / Enter
Valyti / Atgal
Jutiklių įvesties jungtys
MindStorms rinkinys






RCX blokelis („smegenys“)
2 varikliai
2 sąlyčio jutikliai
1 šviesos jutiklis
USB IR siųstuvas
Kitos Lego dalys
RCX blokelis






Ekranas (LCD)
4 mygtukai
Garsiakalbis
3 jutiklių įvestys
3 variklių išvestys
IR sąsaja
RCX blokelis
Programų architektūra

Sistemų ROM lygmuo

Žemo lygmens valdymo programa

Mikroprograma (firmware)

Gali būti apeita ir tiesiogiai
valdoma aparatūriniame lygmenyje
Lego mikroprograma



RCX programų vykdymo aplinka
Prieš programuojant turi būti persiųsta į RCX
Lego Firmware v. 2.0





5 atskiros programos
10 gijų
32 globalūs kintamieji
16 lokalūs kintamieji / gijai
IR protokolas
Kitos mikroprogramos

LejOS (Java)


BrickOS (Gnu C/C++)


http://lejos.sourceforge.net/
http://brickos.sourceforge.net
RCXLisp (Lisp)

http://robotics.csc.villanova.edu/
RCX programavimas


Robotics Invention System (RIS)
Įvykiais grįsta, grafinė (piktogramos), edukacinė
http://www.generation5.org/content/2004/images/ris-programming.jpg
http://www.workshop3d.com/rcx/mindstorms10.htm
RoboLab



Grafinė
Primena srautų diagramas
Edukacinė
http://www-education.rec.ri.cmu.edu/roboticscurriculum/introductiontoprogramming.htm
http://www.workshop3d.com/rcx/robolab.htm
NXT-G





Programavimo aplinka ir grafinė kalba, skirta Lego Mindstorms
NXT robotukams programuoti.
Pritaikyta pradedantiesiems programuoti.
Kiekvienas sakinys vaizduojamas kaip blokas.
 Blokai yra dedami ant laiko ašies ir vykdomi nuosekliai.
 Blokų argumentai ir grąžinamos reikšmės yra perduodami
“laidais”, kurie yra sujungti su blokų įvesties ir išvesties gnybtais.
Sąlyginiai ir ciklo sakiniai vaizduojami kaip stačiakampiai, kurie
 sugrupuoja vieną ar kelis blokus,
 jų įvesties signalas yra Bulinio tipo reikšmė.
Lygiagretumas realizuojamas naudojant kelias laiko ašis,
vykdomas kaip atskiros gijos NXT įtaise.
NXT-G programos pavyzdys

Trūkumai: sudėtinga rašyti netgi paprastas programas
http://www.legoengineering.com/programming.html
RobotC


RobotC paprasta C
kalbos pagrindu
sukurta robotų
programavimo kalba,
palaikanti kelias robotų
programavimo
platformas, įskaitant
LEGO MINDSTROM
robotukus
Daugiausiai
naudojama robotų
varžybose
http://www.robotc.net/guide/index.html#
BrickOS




brickOS: dar viena Lego Mindstorms
mikroprograma (arba OS)
C/C++ programavimo kalba
gcc and g++ kompiliatoriai
http://brickos.sourceforge.net/
NQC (Not Quite C)



Lego Mindstorms, Cybermaster and Spybotics
Kalba, API ir kompiliatorius
C dialektas su apribojimais

http://bricxcc.sourceforge.net/nqc/doc/NQC_Tutorial.p
df
Not eXactly C (NXC)

BricX IDE

C kalbos dialektas

http://bricxcc.sourceforge.net/nbc/
71
NXC pavyzdys: linijos sekimas
int s;
task main()
{
SetSensorType(S1, SENSOR_TYPE_LIGHT_ACTIVE);
SetSensorMode(S1, SENSOR_MODE_PERCENT);
ResetSensor(S1);
while (1) {
if (Sensor(S1) < 48) {
OnFwd(OUT_A, 75);
Float(OUT_C); }
else {
OnFwd(OUT_C, 75);
Float(OUT_A); }
}
}
Šaltinis: Low-level Programming of NXT robots, July 9th 2008
72
Java programavimas

iCommand – tiesioginis komandinis režimas

LeJOS

Atviras kodas

Objektinė kalba – Java poaibis

Java tipai

Java bibliotekos klasės (java.lang, java.util, java.io)

Sinchronizacija

Tiesioginis jutiklių ir variklių valdymas

Robotics API biblioteka

Navigacija (odometrija)

Elgsena („subsumption“ architektūra)

Vaizdų apdorojimas
73
LeJOS programos pavyzdys
import josx.platform.rcx.*;
public class Patrol {
public static void main(String[] args)
throws InterruptedException {
Motor.A.forward();
while (true) {
Motor.C.forward();
// go forward
Thread.sleep (5000);
Motor.C.reverse();
// turn around
Thread.sleep (1000);
}
Motor.A.stop(); Motor.C.stop();
}
leJOS informacija

Parsisiųsti


Mokomasis vadovas


http://lejos.sourceforge.net/
http://lejos.sourceforge.net/tutorial/
Knygos

http://lejos.sourceforge.net/books.html
Programavimas Python

Įskiepiai




PyGame: imitavimo
aplinka
PyBluez: Bluetooth
ryšys
Python NXT: Python
bibliotekos skirtos NXT
Python IDE
PyGame
PyBluez
Programos



Švieso jutiklis
Ultragarso jutiklis
Garso jutiklis
http://home.comcast.net/~dplau/nxt_python/index.html
Python NXT
RobotC Programos pavyzdys
Programavimo kalbų apžvalga
http://www.teamhassenplug.org/NXT/NXTSoftware.html
Vaizdo medžiaga

Įvadas į LEGO programavimą



Rubiko kūbo problemos sprendimas


http://www.youtube.com/watch?v=-KQcUo3JVUs
Lego ranka


http://www.youtube.com/watch?v=kOp8ylmd2Eg
Lego balansuojantis robotas


http://www.youtube.com/watch?v=fa7IAvvYPOs
Lego driežas


http://www.youtube.com/watch?v=5fAn5A0HbhU
Lego voras


http://www.youtube.com/watch?v=l0vqZQMF0A4
http://www.youtube.com/watch?v=AzRRulYvVdY
http://www.youtube.com/watch?v=4J2ljmw9lug
Lego labirintas

http://www.youtube.com/watch?v=3bk21_kRFe8
Programos







BricX NQC – http://sourceforge.net/projects/bricxcc/
BrickOS - http://brickos.sourceforge.net/
Visual Basic http://mindstorms.lego.com/eng/community/resources/d
efault.asp
Java for RCX -- http://lejos.sourceforge.net,
http://tinyvm.sourceforge.net
BrickWiki -http://brickwiki.zapto.org/index.php/Mindstorms
Lego Robot Simulator -http://mindstorms.lego.com/simbot
NXT – http://service.lego.com/enus/helptopics/?questionid=2655
Literatūra

B. Bagnall, Core Lego MindStorms Programming,
by (Prentice-Hall, 2002),

G, Ferrari, et al Programming Lego MindStorms in
Java, by (Syngress, 2002),

W.J. Rust, Learning to Program in Java Using
Lego™ Mindstorms® Robots and LeJOS, 2005.

Baum, D. Definitive Guide to Lego
Mindstorms. Emeryville,CA: Apress, 2000.
Arduino platforma ir jos
programavimas
Kompiliuoti Siųsti
Ryšio stebėjimas
Arduino
IDE
langas
Redaktorius
Perduodamų duomenų
langas
Arduino programos pavyzdys
Du pagrindiniai metodai:
void setup() {
//setup serial and pinout
configuration
}
void run() {
//Read and write to serial
//Read and write to I/O
}
Arduino programavimas



Duomenys perduodami skaitmeniniu formatu
Naudojama USB arba Bluetooth
Ryšio kanalas inicializuojamas naudojant
setup() metodą
Arduino programos pavyzdys
int ledPin = 13;
void setup() {
Serial.begin(19200);
pinMode(ledPin, OUTPUT);
}
void run() {
int activeLED = Serial.read();
if(activeLED == 3){
digitalWrite(ledPin, HIGH);
delay(500);
}
Serial.println(activeLED);
}
http://www.arduino.cc/en/Reference/HomePage
Arduino programa – servovariklio
valdymas
int servoPin = 2;
void setup() {
pinMode(servoPin, OUTPUT);
}
void run() {
int activeLED = Serial.read();
if(activeLED == 3){
digitalWrite(ledPin, HIGH);
}
Serial.println(activeLED);
}
Pavyzdys: lemputės blykčiojimas
int ledPin = 13; // LED connected to pin 13
void setup()
// run only once when starts
{
pinMode(ledPin, OUTPUT); // sets pin as output
}
void loop()
// run over and over again
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000);
// waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000);
}
Programinė įranga

Arduino IDE
http://arduino.cc/en/Main/Software
Vaizdo medžiaga

Arduino 4WD: linijos sekimas
http://www.youtube.com/watch?v=uR8ajnHW_7U
Rovio programavimas
Rovio robotas





Wi-Fi ryšys
Web kamera
3 ratų sistema
Orientacija erdvėje: IR sensoriai (NorthStar II)
Valdymas:

PC, Mac, telefonas, PDA, iPhone, iPad.
Valdymo programos

Valdymas iš iPad


RobioWrap: .NET objektas


http://roviowrap.codeplex.com/
PyRovio: Python Rovio API


Žr. AppStore: ES Pad for Rovio
http://www.ohloh.net/p/pyrovio
Jrovio (Java Rovio)

http://www.robocommunity.com/download/17768/Jrovi
o-java-rovio/
Vaizdo medžiaga

Rovio surinkimas
http://www.youtube.com/watch?v=Jj2AkLr4m2E
http://www.youtube.com/watch?v=DR836sRYrAI
http://www.youtube.com/watch?v=U_AiFzO64uo
http://www.youtube.com/watch?v=wcQAvMlMkeE
http://www.youtube.com/watch?v=5YQyCAT62co
http://www.youtube.com/watch?v=80m7PkEuY1s
http://www.youtube.com/watch?v=L78je0T4THY
http://www.youtube.com/watch?v=QPzN4J9IN8c

Rovio valdymas iš iPad
http://www.youtube.com/watch?v=5-53IZALMgc

EEG valdymas per Skype
http://www.youtube.com/watch?v=NNkkuMO5l7A
Literatūra

Rovio User Manual
http://www.wowwee.com/static/support/rovio/manuals/Ro
vio_Manual.pdf

Rovio Quick Start Guide
http://gallienne.kegtux.org/rovio%20html/Rovio_Quick_St
art_Guide.pdf

Rovio API Specifications
http://www.wowwee.com/static/support/rovio/manuals/Ro
vio_API_Specifications_v1.2.pdf