keskiviikko 28. huhtikuuta 2010

Propeller-mikrokontrolleri

Kuten olen jo kertonut ( lojban-blogi ) olen alkanut kehittää tutkimusympäristöä käsitteellisen ajattelun, "alisymbolisen ajattelun" ja aistihavaintojen välisen suhteen luonteen selvittämiseski. Tutkimusympäristö on pieni, itsekseen liikkuva ja ympäristöään aistiva robotti. Homma jakaantuu selvästi kahteen erilliseen kehityskohteeseen:
1. Robotti, sen mekaniikka, elektroniikka ja ohjelmisto.
2. Pieni ARM-pohjainen linux-kortti, jossa toimii varsinainen "ajatteleva ohjelmisto".

Koska en halua kovasti panostaa kohtaan 1., valitsin kehityksen lähtökohdaksi mielestäni parhaan valmiin perustan tarjoavan, kohtuuhintaisen robotti-rakennussarjan: Parallaxin Stingray.

Mutta koska laitteisto on kiinnostava ja Stingrayn P8X32A, Propeller, mikro-ohjain hyvin poikkeuksellinen ja jopa edistyksellinen, lienee parasta kertoa lähemmin mistä on kysymys ja mitä olen oppinut. Stingray-robotti on "keskikokoinen" harrastelijarobotti. Pienimmät ovat nyrkinkokoisia (viivanseurantakoneita) ja suurimmat lastenvaunujen kokoisia. Stingray on n. 28x37cm ja 15cm korkea. Siinä on kahden DC-moottorin differentiaalikäyttö (kuten esim pölyimuriroboteissa), ei siis kääntyviä pyöriä kuten RC-autoissa (joita myös harkitsin pohjaksi). Ohjainkortti sisältää jänniteregulaattorit, kaksois-H-siltamoottorinohjaimen, sarja-EEPROM-muistin, USB-liitäntäpiirin (IDE-liitäntä), rinnakkais-IO-puskurit ja tietysti P8X32A-mikro-ohjaimen. DC-moottoreille on siis suoraan liittimet ja 24 bittiä digitaalista IO:ta mahdollistaa erilaisten antureiden (esim ultraääni-sonarit) ja toimilaitteiden (esim servot) melko ongelmattoman sähköisen liittämisen. Tarvittava ohjelmisto on oma tarinansa.

P8X32A-Propeller-mikro-ohjain sisältää kahdeksan 32-bittistä suoritinta ja 36 ktavua RAM-muistia, johon ohjelma ladataan, joko suoraan ulkoiselta USB-väylältä (UART-välivaiheen kautta), tai EEPROM-muistista. Kahdeksan suoritinta toimivat eräänalisessa symmetrisessä SMP-arkkitehtuurissa. Niillä on pieni oma muisti ja yhteinen isompi muisti. Keskinäinen kommunikointi tapahtuu yhteisen muistin, IO:n kautta tapahtuvan synkronoinnin ja semaforilogikan avulla. Tämä ei ole ihan helppoa sille, joka ei ole rinnakkaisajatteluun tottunut. Mutta opettavaista on!

Erikoista suorittimissa on, että niillä ei ole perinteisiä keskeytyksiä: jokaisessa suorittimessa voi toimia vain yksi taski, ohjelmasäie. Mutta ohjelman ei tarvitse pollata mitään, vaan asettua odottamaan jotakin tapahtumaa, ajanhetkeä tai IO-muutosta. Konsepti on outo, mutta toimiva: reaaliaikavaste on todella nopea, ja kahdeksalla suorittimella pääsee niin pitkälle kuin pienehköllä muistillakin: kokoonpano on melko tasapainoinen.

P8X32A-mikro-ohjainta voi ohjelmoida (päävaihtoehto) SPIN-skriptikielellä, assemblyllä tai C:llä. C-ympäristöä en ole kokeillut. SPIN-tulkki syö aika paljon suorittimien tehosta, mutta säästää muistia ja se merkitsee minulle. SPIN on olioperustainen, ei oikea olio-orientoitunut kieli: siis esim periytymistä ei tueta, mutta luokkia ja niiden instansseja kyllä.

Stingray-robotti, P8X32A-mikro-ohjain ja SPIN-ohjelmointikieli olisivat erinomainen tapa päästä alkuun ohjelmointi- ja robottiharrastelussa, oppia ja sisäistää heti alkuun kaksi hyvin tärkeää asiaa: olioajattelu ja rinnakkaisajattelu. Multicore-toteutukset ovat lähitulevaisuuden keskeinen haaste). Siis myös oppilaitoksiin ympäristö sopisi loistavasti. Mutta nopeiden, rinnakkaisten ajoitusten ohjelmointi ei ole helppoa ja minä totesin pian tarvitsevani apua. Simulaattori olisi kova juttu, mutta kun sellaista ei ole tarjolla, ostin 16-bittisen Zeroplus-logiikka-analysaattorin. Se on edullinen USB-liitännäinen, PC:tä käyttöliitäntänään käyttävä laatikko. Siitä on ollut merkittävä apu esim. moottoreiden PWM-ohjauksen ja ultraääni-sonarin ohjauksen toteutuksessa.

Näyttää nyt siltä, että minulla on melko pian projektisuunnitelman mukainen robotin "aivorunko", matelijanaivot tavoitteen mukaisessa kunnossa ja voin vielä hieman leikkiä esim toteuttamalla jonkinlaisen yksinkertaisen SLAM-algoritmin SPIN-kielellä ja siten hankkia kokemusta todellisen "alisymbolisen mallin" myöhäisempää toteuttamista varten.

Ei kommentteja:

Lähetä kommentti