Raspberry Pi ruudulla

Minä kun harrastan noita Raspberry Pi-tietokoneita niin tulee aina välillä varusteltua. Kirjoitin aiemmin kakkosmallin tehokkuudesta – se on jo varsin tehokas pikku taskupalvelin, vetäen vertoja low-end pilvipalvelimille. Yleensä olen nähnyt nämä IoT-laitteet tiedonkerääjinä, sensoreina, ja kontrollereina – ne tarjoavat palveluita ja niiden käyttöliittymät ovat esim. mobiilisoftia.

Nyt tuli kuitenkin hommattua jotain erilaista: 2.7″ tft näyttö jolla voi näyttää esim. xwindows näkymää, JavaFX käyttöliittymää, linux konsolia, tai mitä mieleen juolahtaa.

Raspi ja näyttö

Tuliko mainittua että se on kosketusnäyttö? Luo vähän puhtia ajatuksiin esim. olohuoneen mediapömpelistä. Ja varsin kätevä myös kun mystisestä syystä linukka kuolee tai menee outoon tilaan – ellei nyt logien kauhomisesta niin innostu. Ja se JavaFX… Nam.

Näitä näyttöpatentteja on ollut ennekin, mutta tämä Adafruitin näyttö on kyllä harvinaisen kätevä ja nopea asentaa.. Ainoa huono juttu, että se syö signaalipinnejä, käytännössä peittäen ne kaikki. Mutta sen alla on myös liitäntä cobblerille jota kautta voi ainakin osan ottaa uudestaan käyttöön.

Vielä ei paljon hajuakaan siitä mitä aion tehdä tällä, mutta kiinnostava se on joka tapauksessa. Tykkään pi-laitteista. Ne ovat halpoja, helppoja, ja inspiroivia.

Ja tuolla se siis on: https://www.adafruit.com/products/1601

IoT ja Asimovin kolme lakia

Yksi asia mikä on mietityttänyt jo jonkin aikaa on Internetin otusten tietoturva, ja myös etiikka. Olen samanaikaisesti hieman innoissani tulevaisuudesta jossa asioiden älyllistyminen ja verkottuminen tuo kosolti mahdollisuuksia joita emme vielä edes täysin tajua tai osaa edes kuvitella. Toisaalta asioista tulee monimutkaisempia, ja alttiimpia väärinkäytölle. Robotiikan tehtävä on helpottaa ihmisten elämää arjessa, ja osa sitä tarkoittaa rutiinitehtävien siirtämistä koneille, tehtävien automatisointia, jossa ihminen painaa nappia ja kone tekee monimutkaisen prosessin.

P1000644

Me elämme jo robotiikan aikakaudella. Yksi elämää helpottava robotti on pyykinpesukone. Samaan voi laskea toki auton – sähköhevosen, ja onpa noita oikeita robottipölynimureitakin jo olemassa. Mikä ero on sitten nykypäivän robotiikalla ja tulevaisuuden IoT:lla? Kaksi asiaa, itsenäinen äly ja päättelykyky, ja langattomat verkot. Ensimmäisen myötä valta ja vastuu kasvaa, ja toinen voi potentiaalisesti avata reittejä vihamielisille tai ilkikurisille tahoille. On eri asia, jos mato tunkeutuu palvelinhuoneeseen ja louhii tietoja tietokannasta tai kaataa koneen ylikuormittamalla jotain sen osaa – ja taas eri asia kun pätkä ohjelmakoodia ottaa auton renkaiden ohjauksen haltuunsa – tai ruohonleikkurin – tai pelkästään kosolti voimaa omaavan hydraulisen käsivarren. Eikä edes tarvitse lähteä kehittyneisiin robotiikkaprojekteihin joita on parhailaan käynnissä pelastustarkoituksiin tai sotateollisuuden tarpeisiin – mainittakoon esim. DARPA ja Boston Dynamics projektit.

Tietoturvan osalta asia on oikeastaan helpompi. Me olemme oppineet tekemään palvelimista yltympäriinsä suojattuja  – etenkin jos niissä kulkee rahaa tai luottamuksellisia tietoja. Mikään suojaus ei ole sataprosenttinen – mutta IoT puolella on merkittävästi suojausta parannettavissa ihan soveltamalla jo opittuja periaatteita luottamuksellisuuden, autentikoinnin, autorisoinnin, ja ohjelmistopäivitysten suhteen. Hyvä muistaa myös DDoS-hyökkäykset ja niiden seuraukset suunnittelussa. Tuntuukin siltä, että kun elämme ensimmäisen sukupolven innovaatioaaltoa, nämä asiat ovat vain jotenkin unohtuneet, tai niitä ei kiireessä ehditä tehdä – ennen kuin jotain vakavampaa tapahtuu ja on pakko huomioida tietoturva. Jos selaa vuoden verran taaksepäin uutisia, löytää useitakin tarinoita laitteiden tietoturva-aukoista jotka ovat alkeellisia, helposti hyödynnettävissä, ja monesti jo hyödynnettu. Tämä alue on kuitenkin otettavissa haltuun sille joka haluaa – ja tulevaisuudessa ei ole varaa olla haluamatta.

Chuck Norris ei pelkää muistivuotoja. Muistivuodot pelkäävät Chuck Norrisia.

Mielenkiintoisempi kysymys on sitten laitteiden etiikka. Kun päätäntävaltaa siirretään ihmiseltä koneille, tulee moraalisiakin kysymyksiä vastattavaksi. Ja ennen niitä muutama harmaan alueen toiminnallinen kysymys. Ne tulevat heti mietintään kun laitetta ei käytä ihminen sormi aktiivisesti napilla. Jos auto pysäköi itsenäisesti, ja ohjelmointivirhe saa sen kolhimaan toista autoa, tai eläintä, tai ihmistä – kenen vastuulle se menee? Tämä on vielä helpomman pään kysymys. Vaikeammaksi menee kun täytyy tehdä valintoja. Itseohjautuva auto ajaa moottoritiellä satasta, ja havaitsee eläimen tiellä. Jarrutusmatka ei riitä hallittuun pysäytykseen. Säästetäänkö kaikkea elollista ja tehdään lukkojarrutus, otetaan riski että auto lähtee luisuun ja ihmishenki on vaarassa? Vai priorisoidaanko pienikin riski ihmishengelle yli kaiken muun? Tämäkin menee yhä mielenkiintoisemmaksi jos tielle astuukin yllättäen toinen ihminen. Auto on ilmiselvä esimerkki ja vaikuttaa aika tieteistarinalta – mutta parin vuoden päästä itsenäisesti pysäköivät autot ovat markkinalla, ja varmasti vuosikymmenen sisään itsenäisesti ajavat – niitä on jo muun liikenteen seassa useammassa maassa. Ollaan melko kaukana vielä keinoäly-humanoidi-roboteista, mutta itsenäistä päättelyä analogisen sensoritiedon pohjalta nopeissa tilanteissa tehdään jo nyt.

Hazelcast Lego-Pi cluster

Tämän blogautuksen otsikossa viittaankin useimpien tuntemiin Isaac Asimovin robotiikan kolmeen sääntöön, jotka tieteiskirjallisuudessa nähtiin aikanaan loogisiksi tavoiksi ratkaista näitä ongelmia: Itsenäinen päättelykyky sallitaan, mutta se rajoittuu aina kolmeen rikkomattomaan sääntöön jotka ohjelmoinissa otetaan huomioon, ja näillä pääsäännöilläkin on keskinäinen prioriteetti. Näitä sääntöjä on sittemmin lisäilty ja modifioitu, ja tokkopa näillä pärjätäänkään nykymaailmassa, mutta mielenkiintoista ajatusten ruokaa joka tapauksessa:

  • A robot may not injure a human being or, through inaction, allow a human being to come to harm.
  • A robot must obey the orders given it by human beings except where such orders would conflict with the First Law.
  • A robot must protect its own existence as long as such protection does not conflict with the First or Second Laws.

Hyvä kuitenkin muistaa että IoT ei ole vain autoja. Tulevaisuudessa tulee olemaan älykelloja, älyvaatteita, älyreppuja, äly-uuneja, älypesukoneita, älykyniä, älyvaloja, älyvedenlämmittimiä, älykameroita, älykoptereita, ja kaikkea muuta älytöntä ja ihanaa. Ja kun sanon tulevaisuudessa, tarkoitan nyt. Sitä mitä on kymmenen vuoden päästä en osaa rehellisesti edes kuvitella. Mutta äly ja verkot mahtuvat jo kaikkialle, ja ne tulevat olemaan kaikkialla mihin mielikuvitus voi ne viedä. Ja mitä tulee tietoturvaan tai älyn etiikkaan, voimme oppia nämä asiat kaikki kantapään kautta, tai yrittää kerrankin olla fiksuja jo alusta alkaen ja tehdä ne mahdollisimman oikein.

Tulevaisuutta ei voi estää – vaikka haluaisikin – sen voi vain kohdata.

Solitalla on myös meneillään Think Tank IoT-teemalla, joten jos aihe ja muut näkökulmat muutokseen kiinnostavat laajemminkin, tuosta voi navigoitua eteenpäin: http://www.solita.fi/ajankohtaista/solitan-viides-think-tank-ryhma-pureutuu-teollisen-internetin-murrokseen/

Edit: Hauskasti osuva artikkeli tähän liittyen: http://www.tekniikkatalous.fi/tekniikka/google-korjasi-robottiautojaan-osaavat-nyt-rikkoa-liikennesaantoja-6000962

IoT: Go home PI, you’re drunk!

Internet of Things on kiehtonut omaa mieltä jo pitkään ennen kuin termi edes keksittiin: Se on pääosin se asia joka nykypäivän communicator/mobile device kategorian laitteissa ja älypuettavissakin kiehtoo. Älykkäiden verkottuneiden laitteiden mahdollisuudet ja uhat. Nyt tuli sitten aika pistää äly pyörille.

2015-07-05 17.27.22

Nykypäivänä on helpompaa kuin koskaan näperrellä ja prototypoida näiden parissa: Raspberry Pi tietokoneet ovat halpoja ja niihin saa kiinnitettyä oikeastaan mitä vain mielikuvitus loihtii. Olen itse rakennellut niihin aiemmin kokeilumielessä full stack raskasta Java EE ratkaisua, milloin MySQL kannan, milloin MongoDB:n kera ohjaamaan kodin automaatiota. Tuli kokeiltua sekin miten Glassfish sovelluspalvelin pyörähtää käyntiin: Ihan hienosti, jopa ihan ykkösgeneraation Raspissa.

Tällä kertaa halusin kokeilla jotain uutta. Muutama vuosi takaperin JavaOne seminaarissa osallistuin autokilpailuun jossa koodailtiin autoihin algoritmia jolla ne ajaisivat lujaa mutta pysyisivät radalla. Siitä jäi ajatus itämään. Hiljattain tutkin Lego Mindstorm EVO paketteja, mutta ne tuntuivat rajoittuneilta, ja kalliilta kokeiluun nähden. Niihinkin löytyy toki nykyään BrickPi-laajennus jolla voi laittaa Raspberryn käskemään EVO kontrollereita ja sensoreita. Mutta itselleni haaviin jäi GoPiGo-alusta. Moottorit, pieni kontrolleri joka kytkeytyy suoraan Pin kylkeen, virtapaketti joka toimii pattereilla ja irrottaa laitteen virtapiuhan tyranniasta. Go, Pi, Go, feel the wind in your electronic hairs! 😉

2015-07-05 17.27.05

Eli tilaukseen napsahti, ja ei kun testailemaan. GoPiGo web sitelta sai latailla valmiin imagen joka pohjautui jo tuttuun Raspbianiin, ja toimi ihan ok, kunhan viritin sen langattomaan kotiverkkoon ja kävin läpi alustusrutiinit. Sieltä löyty esimerkkejä mm. Pythonilla, Javalla, ja testailin niiden avulla että olin koonnut kaiken oikein ja piuhat olivat paikallaan. Mutta kuten sanottua, tällä kertaa oli tarkoitus tehdä jotain uutta.

Joten päädyin viritykseen, jossa ytimen muodostaa node.js palvelin. Viritin sen automaattikäynnistymään Raspin myötä. Automaattikäynnistys tapahtuu ihan init.d scripteillä, ja apuna käyttelin forever + nodemon yhdistelmää, jotta prosessi päivittää itsensä kun koodeja päivitetään, ja myös jos se sattuisi kaatumaan.

Palvelin initialisoi GoPiGo osan, ja kiinnittää pari tapahtumankuuntelijaa, mm. varoittamaan jos virta käy vähiin pattereissa. Ja lataa html-sivun jonka kautta raspia voi ohjailla. Tuossa vähän maistiaista miltä sen pään koodi näyttää:

socket.on('status', function(msg){
  $('#messages').append($('<li>').text(msg));
});
$('#forward').click(function() {
  socket.emit('command','move forward');
});
$('#backward').click(function() {
  socket.emit('command','move backward');
});

Halusin rivakkuutta ohjaukseen joten websocketeilla mennään. Tarkemmin, socket.io nykyisellä inkarnaatiolla. Käyttöliittymä on tässä kohtaa karu – pelkkää html:ää ja jquerya. Vähän kutkuttaisi päästää Aurelia irti tässä kohtaa. Käytännössä siis websocket kanavalla liikkuu kahteen suuntaan tavaraa: status viestit menevät ’status’ kanavalle, ja näytetään ’client’ päässä. Komennot lähetetään ’commands’ kanavalle, ja voivat olla esim. mene eteenpäin, pysähdy, käänny, laita ledejä päälle, jne.

Ja sehän toimii. Hienosti. Jopa ihan Android kännykästä käsin. Sillä oli kiva kiusata kissoja ja koiraa 😉

2015-07-05 17.33.55

2015-07-01 22.21.13

Mitähän hittoa tällä sitten tekee? No ei yhtikäs mitään. Mutta mielenkiintoinen harjoite taas keveiden pikku älylaitteiden maailmassa, nodejs tuntuisi olevan mukavan keveä ratkaisu tämäntapaiseen hommaan, ja Raspberry Pi tuntuu Noden kanssa tarjoavan kaikki tarpeelliset palaset että prosessin saa pyörimään luotettavasti ja itsenäisesti.

Seuraavia askelia:

– pistä UI päähän jotain fiksumpaa ja helpompaa kehitysframeworkia, esim. Aurelia.

– Kiinnitä pakkaan sensoreita, esim. mikroaaltotutka, kamera, servoja.

– Opeta robotille Asimovin kolme periaatetta ettei käy kuin Volkswagenin tehtailla

– Laita laite tuomaan kylmä olut kun se aistii sille tarpeen.

– Ja ampumaan raketteja devaajan päähän joka taas /&%/&% rikkoi sen buildin! Tässä voidaan vähän joustaa Asimov-periaatteiden kanssa.

http://www.dexterindustries.com/GoPiGo/projects/python-examples-for-the-raspberry-pi/raspberry-pi-controlled-office-cannon/

Esineiden Internet

JavaOne 2013 seminaarin yllättävä teema IoT – Internet of Things jäi jylläämään päähän seminaarin jälkeen – eniten ehkä siksi että vaikka olen aina ennustellut monipuolisempien päätelaitteiden tulemista, en ymmärtänyt että sitä ei tarvitse enää odotella – se on jo täällä.

2013-09-23 09.40.24

Mutta näin teema avasi silmät siihen miten IoT on jo läsnä, olemassa, ja sitä käytetään isojenkin yritysten toimesta isoissa asioissa. Sen puitteissa on myös kunnon vanhan ajan innovaatiota, sitä paljon kuulutettua sykettä, ja nykyään on hauskoja aloittelijapaketteja joilla pääsee vauhtiin kokeilemaan ideoitaan. Tässä on vanhaa kunnon propellihattu-menoa. Ja kaiken keskelle Java EE 7 serveri kaikkine hienouksineen. 😉

Itsellenihän jäi seminaarista käteen yksi Raspberry Pi mikrotietokone. Olen sillä hieman jo leikkinyt, mutta ajanpuutteen vuoksi en ole ehtinyt mitään kovin ihmeellistä tehdä. Kuitenkin, tuohon 30$ laitteeseen olen asennellut langattoman verkon ja säätänyt sen toimimaan headless moodissa eli ilman näyttöä, näppistä tai hiirtä, asennellut siihen Java 7 u 40 SE version, ja ajellut PI4J kirjaston avulla ohjelmia jotka käskyttävät myös sitä mielenkiintoista GPIO porttia johon voi kytkeä kaikenlaisia vimpaimia. Ledivalot vilkkuvat jo iloisesti Javan käskemänä. Tilasin jenkeistä Adafruitin servonohjaus-piirisarjan (vielä kun ehtii kolvata) ja muutaman servomoottorin sen puolen testailuja varten.

Raspberry PI GPIO väylä on sen parasta antia

Originaali ajatukseni on ollut että nämä Internetin esineet ovat huokeita ympäristöään aistivia sensoripaketteja – jotka lähettävät aistimansa prosessoitavaksi keskuskoneelle. Osoittautui että ajatus oli varsin vaatimaton. Laitteet toimivat myös toiseen suuntaan, aistimisen ohella osaavat myös vaikuttaa ympäristöönsä. Koska tämä puoli on itselle uudempi, sinnehän pitää sukeltaa. 😉 Kehitysympäristönä Netbeans ja Maven.

Muutakin kiintoisaa osuu silmiin. Eilen verkkokauppa.com julkaisi tarinaa  etäläsnä-olosta myymälässä liikkuvalla robotilla. Selkeää propellihattuhommaa, ja kiintoisaa. IT viikon päivän aihe on tänään: Robottiautot tulevat, lait puuttuvat. VTT:n suunnalta on tullut julkaisua otsikolla: Esineiden ja asioiden Internet- seuraava teollinen murros.

Remote presence robot

Älykkäät serveriin ja toisiinsa kytketyt tabletteja tai edes älykelloja monimuotoisemmat vimpaimet tulevat ja ovat jo täällä. Tulevaisuuden keittiö tarjoaa ruokareseptejä ja apua kokkaukseen. Tulevaisuuden kotisairaala tarkkailee terveystietojasi kotosalla tai toimistossa ja osaa kiinnittää huomion muutoksiin ja poikkeuksiin. Tulevaisuuden auto osaa pysäköidä itsensä ilman että kuski on edes sisässä – tai navigoida ja ajaa itsenäisesti kohteeseensa. Sanoinko tulevaisuuden? Tulevaisuus on jo täällä, kaikki tämä toimii jo nyt. Ne pitää vain pakata 10x pienempään nättiin muovikoteloon ja lyödä hintalappu päälle.

 

(Mutta huoh, se tietoturva!)

Ja tuossa muutama IoT linkki näistä aiheista mistä puhuin, jos joku haluaa seurata polkuja tai vain sivistää itseään uuteen suuntaan 😉

http://www.youtube.com/watch?v=Holq_Oz6T3Q

http://www.itviikko.fi/uutiset/2013/10/14/verkkokauppacom-testaa-robottivierailuja-kaupassa/201314252/7

http://www.itviikko.fi/teknologia/2013/10/15/robottiautot-tulevat-lait-puuttuvat-emme-aio-olla-jarruna/201314258/7

http://www.vtt.fi/files/news/2013/smart_lightning/Esineiden_ja_asioiden_internet_Ailisto.pdf

http://www.tietoviikko.fi/kaikki_uutiset/esineiden+internet+voi+mullistaa+ruuanlaiton/a933023

http://www.cooking-hacks.com/documentation/tutorials/ehealth-biometric-sensor-platform-arduino-raspberry-pi-medical