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