Agent Space on Raspberry Pi and Acrob with line-following and obstacle avoiding behavior-based robot.(Anton Blahunka, Martin Reiberger)

From RoboWiki
Jump to: navigation, search

Úvod

Cieľom projektu bolo navrhnút a vytvoriť architektúru Agent Space implementovanú v JAVE, ktorá beží Raspberry Pi a ovláda správanie robota Acrob. Architektúra agent space sa využíva pri tvorbe rozsiahlych a výpočtovo náročných procesov, ktoré ovládajú správanie robota. Výkon procesora a pamäťový priestor sú pri robotovi Acrob značne obmedzené, a preto je v projekte ako "mozog" použitý minipočítač Raspberry Pi, na ktorom je Agent Space implmenetovaný. Našou úlohou je navrhnúť a vytvoriť nasledujúce správanie robota:

  • robot sa bude pohybovať v bielom bludisku, ktore bude ohraničené čiernou čiarou. Túto čiaru má sledovať pomocou infračerveného senzora a keď príde na okraj bludiska, otočí sa.
  • robot sa bude vyhýbať prekážkam, ktoré bude sledovať ultrasonickým senzorom.
  • robot sa snaží ísť za svetlom, čiže pri pohybe merá infračerveným senzorom intenzitu svetla a snaží sa otáčať za čím väčšou intenzitou svetla

Raspberry Pi

Raspberry Pi je počítač veľkosti kreditnej karty. Je dokonca možné ho používať iba zo zapojeným ethernetovým káblom prípadne cez dokúpený WiFi modul, no a samozrejme je potrebné dodať mu elektrickú energiu. Je to schopný malý počítač, ktorý môže byť použitý pre mnoho vecí, ktoré váš stolový počítač robí, ako sú tabuľky, spracovanie textu a hry, a to v oveľa menšom a energeticky nenáročnom prevedení.Dokáže prehrať FullHD video a dajú sa na ňom programovať či už programy a hry.Tu ale jeho využitie nekončí, vďaka programovateľným GPIO konektorom je ho možné použiť ako mozog centrály pre inteligentný dom, na stavbu robotov,do automobilu ako palubný počítač a mnoho iného.

Image: 250 pixels


Postup riešenia projektu

Inštalácia JAVA a RXTX package pre linux

Pomocou nasledujúcich príkazov v command-line nainstalujeme JAVU

  sudo add-apt-repository ppa:webupd8team/java
  sudo apt-get update
  sudo apt-get install oracle-java7-installer

Následne je potrebné nainstalovať RXTX knižnice, ktoré slúžia na komunikáciu Pi s Acrobom prostredníctvom sériového portu. -Inštalácia balíčkového systému librxtx-java

  $ sudo apt-get install librxtx-java
 

Vytvorenie komunikácie cez serial port

Pomocou USB-MiniUSB kábla prepojíme Pi a Acroba. V linuxe, bežiacom na Pi, nám pribudne /dev/ttyUSB0, čo je sériový port na komunikáciu medzi Pi a Acrobom.

Zdrojový kód pre komunikáciu

V nasledujúcom zdrojovom kóde je main.java trieda, ktorá vytvára obojsmerný komunikačný kanál.

   public class Main {
   public static void main(String[] args) {
      Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
      String wantedPortName = "/dev/ttyUSB0";
      SerialPort port = null;
      CommPortIdentifier portId = null;
      InputStream is = null;
      OutputStream os = null;
      while (portIdentifiers.hasMoreElements()) {
             CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement();
             if (pid.getPortType() == CommPortIdentifier.PORT_SERIAL && pid.getName().equals(wantedPortName))
                    System.out.println(pid.getName());
                        {
                           portId = pid;
                           break;
                        }
             }
             if (portId == null) {
                    System.err.println("Could not find serial port " + wantedPortName);
                    System.exit(1);
             }
             try {
                    port = (SerialPort) portId.open("agent", 10000);
             } catch (PortInUseException e) {
                    System.err.println("Port already in use: " + e);
                    System.exit(1);
             }
             try {
                    port.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
             } catch (UnsupportedCommOperationException e) {
                    System.out.println("Unsupported comm port operation");
             }
             try {
                    is = port.getInputStream();
             } catch (IOException e) {
                    System.err.println("Can't open input stream: write-only");
                    is = null;
             }
             try {
             os = port.getOutputStream();
             } catch (IOException e) {
                    System.err.println("Can't open output stream");
                    os = null;
             }
      }
  }

Komunikácia prebieha obojstranne. Acrob vytvára packet ktorý obsahuje štyri bajty, prvy je oddeľovací symbol a ďalšie tri reprezentujúce hodnoty senzorov: ultrazvukový senzor vzdialenosti, infračervený senzor na sledovanie čiary, infračervený senzor na sledovanie intenzity svetla. Po odoslaní packetu Acrob čaká kým nedostane odpoveď. Pi packet spracuje, vyhodnotí a následne odošle packet obsahujúci 3 bajty: oddelovaci bajt, hodnoty pre ľavé a pravé koleso späť Acrobovi, ktorý čaká na odpoveď.

Image: 250 pixels


Agent Space

Agent space [1] je architektúra, pre systém, ktorý ovláda robota. Systém sa skladá z reaktívnych agentov, ktoré komunikujú nepriamo cez tzv.space. Agent vykonáva cyklus sense-select-act. Voľba akcií je realizovaná obyčajným kódom bežiacim v jedinom vlákne, ktorý nemá žiadnu špeciálnu formu ani nepoužíva nejaký špeciálny komponent

  • Zvolené akcie sú iba reakciou na stav prostredia a vnútorný stav agenta
  • Vnútorný stav agenta zodpovedá tým premenným, ktorých obsah pretrváva medzi dvomi, po sebe idúcimi prechodmi cez cyklus sense-select-act


Trieda Space.java

Obsahuje "tabuľku premenných", ku ktorým pristupujú všetci agenti.

Trieda Agent.java

Natrieda všetkých agentov. Je oddedená od triedy Thread a zabezpečuje striedanie ostatných agentov.

Trieda AgentKoleso.java

Je oddedený od triedy Agent a ovláda pohyb kolies. Prebieha v ňom komunikácia medzi Acrobom a Pi

Trieda AgentSvetlo.java

Je oddedený od triedy Agent a spracováva hodnoty svetla zo Space a vyhodnocuje ich pre agenta AgentRozhnodni

Trieda AgentRozhnodni.java

Vyhodnocuje údaje ktoré mu distribuovali ostatný agenti do triedy Space. Určuje akciu, ktorú má robot vykonať


Zdrojové súbory

Fotodokumentácia

Image: 250 pixels

Image: 250 pixels


Video: Acrob na prekážkovej dráhe

Zdroje

  1. Lúčny A.: Open implementation of Agent-Space architecture. In: Cognition and Artificial Life'12 (Kelemen, J. - Nahodil, P. eds.), ČVUT Praha, 2012
  2. Robot Acrob
  3. Raspberry PI
  4. Parallax PING))) Sensor
  5. Parallax QTI light sensor