360 likes | 597 Views
Intelektikos pagrindai. P160B100 2012 m. Robertas Damaševičius r obertas.damasevicius @ktu.lt. Tipinio roboto programavimo pavyzdys: Braitenbergo mašina. Turinys. Tipin ė roboto strukt ū ra Braitenbergo mašina – gerai žinomas teorinis roboto modelis Braitenbergo mašinos programavimas
E N D
Intelektikos pagrindai P160B100 2012 m. Robertas Damaševičius robertas.damasevicius@ktu.lt
Turinys • Tipinė roboto struktūra • Braitenbergo mašina – gerai žinomas teorinis roboto modelis • Braitenbergo mašinos programavimas • Braitenbergo mašina ir kvantiniai skaičiavimai
Tipinė roboto struktūra (1) • Jutimas – renka ir apdoroja iš jutiklių gaunamą informaciją • Modelio sukūrimas – kuria savo aplinkos modelius tikslu judėti aplinkoje ir planuoti savo veiksmus • Sprendimas – remiantis savo jutiklių pateikta informacija pasirenka tinkamą veiksmą • Planavimas – iš vartotojo nustatytų tikslų sukuria tikslams reikalingų pasiekti veiksmų seką
Tipinė roboto struktūra (2) • Veikimas – pageidaujamo veiksmo konvertavimas į atitinkamą fizinį veiksmą (pvz., judesį) • Valdymas – atlieka dabartinio veiksmo pasirinkimą iš turimos veiksmų sekos • Vadovavimas – atliekamas roboto elgsenų ir komponentų įjungimas, išjungimas ir konfigūravimas • Veiksmo pasirinkimas – tinkamiausio veiksmo pasirinkimas iš kelių galimai tinkamų veiksmų variantų
Braitenberg’o mašina • Jei roboto forma yra simetrinė bent vienos ašies atžvilgiu ir jis turi du ratus, tai judėjimą galima realizuoti Braitenberg’o mašinos modeliu. • Braitenberg’o mašina yra paprasčiausias mobilus robotas.
Braitenberg’o mašinos dalys Kairysis fotoelementas Dešinysis fotoelementas Buferis Dešinysis IR daviklis Kairysis IR daviklis Ratai • Buferis nustato, ar įvyko susidūrimas. • Sienos nepraleidžia šviesos. • Sienos atspindi infraraudonuosius spindulius. • Šviesos šaltiniai pakabinti lubose.
Braitenberg’o mašina • Ratai yra tiesiogiai sujungti su atstumo jutikliais įvedant jiems svorius panašiai kaip dirbtiniuose neuroniniuose tinkluose. • Kiekvienam ratui valdyti, gaunamos jutiklių vertės padauginamos iš svorių, o sandaugos susumuojamos. • Gauti rezultatai perduodami ratų motorams. • Jeigu jungtis yra teigiama (stiprinanti), rato sukimosi greitis yra proporcingas jutiklio signalo vertei. • Jeigu jungtis yra neigiama (slopinanti), rato sukimosi greitis yra priešingai proporcingas jutiklio signalo vertei. • Jeigu į ratą ateina neigiamas suminis signalas – ratas pradeda suktis atgal.
Pagrindiniai principai Jei signalas slopinamas, robotas artėja link šviesos Minuso ženklas reiškia neigiamą grįžtamąjį ryšį
Pagrindiniai principai Jei slopinami signalai sukryžiuoti, robotas tolsta nuo šviesos
Paprasčiausios Breitenberg‘o mašinos • a) Kiekvienas jutiklis sujungtas su varikliu toje pačioje pusėje • b) Kiekvienas jutiklis sujungtas su varikliu priešingoje pusėje • c) Kiekvienas jutiklis sujungtas su varikliais abejose pusėse
Braitenberg‘o tipo valdymo sistemos struktūra • Bendruoju atveju gali būti daug jutiklių • Kiekviena jungtis gali būti: • stiprinanti (didinanti rato variklio greitį; žymima „+“) arba • silpninanti (mažinanti rato variklio greitį; žymima „-„) • Storesnės jungčių linijos rodo, kad iš jutiklių perduodamos reikšmės motorams turi didesnius svorius
Breitenberg‘o mašinos elgsenos tipai 1 • 1) „Gyvybė“ • 2a) “Baimė” • 2b) “Agresija” • 3) “Meilė” 3 2b 2a
Braitenbergo mašinos elgsena: “gyvybė” • 1-tipo mašina gali važiuoti tik tiesiai • Judėjimo greitis proporcingas jutiklio grąžinamai reikšmei
Braitenbergo mašinos elgsena: “baimė” • 2a-tipo mašina su stiprinančiomis jungtimis stengiasi patekti į zoną, kurioje jos jutikliai bus mažiau aktyvuojami • Jeigu jutikliai reaguoja į šviesą, tuomet jutiklis esantis arčiau šviesos šaltinio privers atitinkamą ratą suktis greičiau ir robotas nusuks į šoną, tuo pademonstruodamas “baimės” elgseną.
Braitenbergo mašinos elgsena: “agresija” • 2b-tipo mašina su stiprinančiomis jungtimis stengsis artėti prie šviesos šaltinio, tuo demonstruodama “agresijos” elgseną
Braitenbergo mašinos elgsena: “meilė” • 3-tipo mašina su silpninančiomis jungtimis stengsis artėti prie šviesos šaltinio • Artėjant varikliai veiks vis silpniau, todėl robotas visą laiką bus šviesoje atsigręžęs į šviesos šaltinį, tačiau niekada nepasieks jo, tuo demonstruodamas “meilės” elgseną. • Tyrinėtojo elgesys • Jei aptinka stipresnį šviesos šaltinį, pradeda artėti prie jo
4 tipo mašina • Turi „vertybes“ (instinktus) • 4a tipas: Variklio aktyvavimo funkcija yra netiesinė (nemonotoninė), pvz., pasiekus max reikšmę vėl mažėja • Elgesys tampa sudėtingu: • mašina artėja prie šviesos šaltinio, o po to vėl nutolsta • arba sukasi aplink šaltinį tam tikru spinduliu • 4b tipas: aktyvavimo funkcija yra trūki • esant tam tikroms reikšmėms, mašina sustoja
Sudėtingos Braitenbergo mašinos • 5: Logika • Įvedamos loginės elgesio taisyklės • Atminties pradmenys • 6: Pasirinkimas • Įvedamas atsitiktinumo pasirenkant faktorius • Pvz., realizuojami genetiniai algoritmai • 7: Koncepcijos • Mašina gali mokytis • Gali pati modifikuoti savo jungtis tarp jutiklių ir variklių • Gali būti realizuota naudojant Hebb learning algoritmą • 8: Erdvė • Robotas turi jutiklius ir algoritmus reikalingus žemėlapiui sudaryti
Sudėtingos Braitenbergo mašinos • 9: Formos • Robotas gali atpažinti išorinių daiktų formas • 10: Samprotavimas • Robotas iš loginių teiginių gali išvesti naujus teiginius (elgesio taisykles) • 11: Taisyklės • Robotas pats gali susidaryti pasaulio modelį • 12: Reflektyvumas • Robotas žino savo „mąstymo“ taisykles (būsenas) ir pats gali keisti jų parametrų reikšmes • 13: Numatymas • Robotas gali prognuozuoti savo veiksmus ir aplinkos būseną ateityje • 14: Malonumas • Robotas pats gali pasirinkti savo būsimą būseną
Change the vehicle behavior? // Sensor output goes directly to wheel on same side void doSenseLogic() { setASpeed(sA.getSense()); setBSpeed(sB.getSense()); } // Sensor output crossed to wheel on opposite side /* void doSenseLogic() { setASpeed(sB.getSense()); setBSpeed(sA.getSense()); }*/ // Each sensor goes to wheel on same side with an inhibitory connection /* void doSenseLogic() { setASpeed(sA.getInverseSense()); setBSpeed(sB.getInverseSense()); } */ // Each sensor goes to wheel on opposite side with an inhibitory connection /* void doSenseLogic() { setASpeed(sB.getInverseSense()); setBSpeed(sA.getInverseSense()); } */ // Sensors are hooked up to opposite motors, with threshhold sensing. /* void doSenseLogic() { setASpeed(sB.getNonlinearSense()); setBSpeed(sA.getNonlinearSense()); } */ • Elgseną valdo doSenseLogic()metodas
Braitenbergo mašinos valdymo architektūra Jutikliai Loginės taisyklės Vykdikliai Aplinka
Braitenbergo automatas Jutikliai Loginės taisyklės Vykdikliai Atmntis Aplinka
Modeliavimas • Braitenbergo mašiną galima modeliuoti naudojant įvairaus tipo signalus • Analoginius • Dvejetainius • Daugiareikšmius • Miglotosios logikos • Kvantinius
Kvantiniai skaičiavimai • Klasikiniai kompiuteriai skaičiavimams naudoja bitus, kurių reikšmė gali būti 0 arba 1. • Kvantiniai kompiuteriai skaičiavimams naudoja kubitus (qubits), kurių reikšmė gali būti: • 0 arba • 1 arba • 0 ir 1 superpozicija • Teorinis pagrindas: kvantinė mechanika (fizika)
Miglotosios logikos blokas vykdikliai ML atmintis Jutikliai F/Q Kvantinių skaičiavimų blokas Q/F Kvantinė atmintis Hibridinė architektūra su ML ir kvantinės logikos posistemėmis APLINKA
Breitenberg‘o mašinos algoritmas (Java) float l = MINIMAL_SPEED; float r = MINIMAL_SPEED; /* turn away from obstacles */ l = l + GetProximitySensor(FRONTLEFT) - GetProximitySensor(FRONTRIGHT); r = r + GetProximitySensor(FRONTRIGHT) - GetProximitySensor(FRONTLEFT); /* turn towards light sources */ r = r + GetLightSensor(LEFT) - GetLightSensor(RIGHT); l = l + GetLightSensor(RIGHT) - GetLightSensor(LEFT); /* normalize speed to [-1 ; +1] */ l = l / (4f + MINIMAL_SPEED); r = r / (4f + MINIMAL_SPEED); /* set the motors */ SetMotorSpeed(LEFTMOTOR,l); SetMotorSpeed(RIGHTMOTOR,r);
MotorTest.java import josx.platform.rcx.*; class MotorTest { static final int STOP = 0; static final int RUN = 1; static final int FLOAT = 2; static int mode = STOP; static int power = 0; public static void main(String [] args) { setupButtonListeners(); while (true) { if (mode == RUN) { Motor.A.setPower( power ); Motor.A.forward(); } else if (mode == STOP) { Motor.A.stop(); } else if (mode == FLOAT) { Motor.A.flt(); } } } ... (button listener code not shown)
LightTest.java import josx.platform.rcx.*; class LightTest implements SensorConstants { public static void main(String [] args) throws InterruptedException { Sensor.S1.setTypeAndMode (SENSOR_TYPE_LIGHT, SENSOR_MODE_PCT); Sensor.S1.activate(); while (true) { int lightReading; if (Button.VIEW.isPressed()) { lightReading = Sensor.S1.readRawValue(); } else { lightReading = Sensor.S1.readValue(); } LCD.showNumber( lightReading ); } } }
Aggressive.java class aggressive implements SensorConstants { public static void main(String [] args) { int minBright = 100; final int gain = 12; Sensor.S1.setTypeAndMode (SENSOR_TYPE_LIGHT, SENSOR_MODE_PCT); Sensor.S1.activate(); Sensor.S3.setTypeAndMode (SENSOR_TYPE_LIGHT, SENSOR_MODE_PCT); Sensor.S3.activate(); for (int i = 0; i < 100; i++) { if (Sensor.S1.readValue() < minBright) {minBright = Sensor.S1.readValue();} else if (Sensor.S3.readValue() < minBright) {minBright = Sensor.S3.readValue();} Thread.sleep(20); } Motor.A.forward(); Motor.C.forward(); while (true) { int motorASpeed = (Sensor.S3.readValue() - minBright) / gain; int motorCSpeed = (Sensor.S1.readValue() - minBright) / gain; setMotorSpeed(Motor.A, motorASpeed); setMotorSpeed(Motor.C, motorCSpeed); } }
Aggressive.java (continued) protected static void setMotorSpeed(Motor m, int motorSpeed) { if (motorSpeed < 1) { m.flt(); // important LCD.showNumber(-1); } else { if (motorSpeed > 7) { motorSpeed = 7; } m.forward(); m.setPower(motorSpeed); LCD.showNumber(motorSpeed); } } }
Įvertinimas • Breitenberg‘o mašina įrodo, kad net ir paprastos architektūros robotas gali turėti sudėtingą elgseną, panašią į primityvių biologinių būtybių (pvz., vabzdžių) elgseną.
Įvertinimas • Braitenberg‘o mašina paprastų elgsenų pagalba leidžia modeliuoti emocijas • Emocijos (sudėtinga elgsena) modeliuojamos kaip paprastų elgsenų (artėti/tolti nuo šviesos šaltinio) sintezė • Tokio tipo sistemą Brooks‘as vadino intelektualia • Emocijos atsiranda savaime, kaip elgesio sudėtingėjimo (evoliucijos) pasekmė
Breitenberg‘o mašinos simuliatoriai • Java applet‘ai • http://www.ifi.unizh.ch/~llicht/newsimu/SimApplet.html • http://www.ai.rug.nl/~gert/applets/braitenbergJRE/ • http://kovan.ceng.metu.edu.tr/~ilke/Braitenberg/BraitenbergEN/.bin/sim.html • http://cs.nmu.edu/~jeffhorn/Classes/MA240/Fall2007/NateLyleSimulator.html
Literatūra (1) • Pagrindinis: • V. Braitenberg. Vehicles: Experiments in Synthetic Psychology. http://books.google.lt/books?id=7KkUAT_q_sQC&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false • R. Pfeifer and C. Scheier.Understanding Intelligence.The MIT Press. https://academics.skidmore.edu/wikis/Fvehicles/images/Pfeifer1996.pdf Kiti: • Taavi Salumae, Iñaki Rañó, Otar Akanyeti, Maarja Kruusmaa: Against the flow: A Braitenberg controller for a fish robot. ICRA 2012:4210-4215 • Iñaki Rañó: An Introduction to the Analysis of Braitenberg Vehicles 2 and 3 Using Phase Plane Portrait. SAB 2012:23-32 • Iñaki Rañó: An Empirical Evidence of Braitenberg Vehicle 2b Behaving as a Billiard Ball. SAB 2010:293-302 • X. Yang, R. V. Patel, Mehrdad Moallem: A Fuzzy-Braitenberg Navigation Strategy for Differential Drive Mobile Robots. Journal of Intelligent and Robotic Systems (JIRS) 47(2):101-124 (2006)
Literatūra (2) • Kvantiniai skaičiavimai robotikoje • M. Lukac and M. Perkowski, "Quantum mechanical model of emotional robot behaviors". Proc. of Int. Symp. on Multiple-Valued Logic, Oslo, May 2007. • M. Lukac, D. H. Kim, Normen Giesecke, Sazzad Hossain and Marek Perkowski, "Quantum Behaviors: Synthesis and Measurement." Proc. of RM Symposium, Oslo, May 16, 2007. • M. Perkowski, "Quantum Robots. Now or Never?". Invited Talk at the 5th National Conference on Informatics. Gdansk, Poland. May 2007.