Harjoitustyö 2018¶
Tekoäly ja Esineiden Internet ovat tunnistettuja (lähi)tulevaisuuden teknologisia megatrendejä. Kurssihan nyt ratsatsaa muutenkin teknologian aallonharjalla, mutta otamme vielä askeleen kohti älykkäitä jokapaikan tietotekniikan ympäristöjä ja toteutamme puettavan tietotekniikan tekoälysovelluksen SensorTagin avulla.
Kunto++¶
Tehtävänä harjoitustyössä on tunnistaa tekoälymenetelmin kulkeeko SensorTag-laitteen käyttäjä portaita vai hissiä käyttäen ylös/alas. Termi tekoäly saattaa tässä vaiheessa säikäyttää.. mutta työssä tarvitsee vain toteuttaa lyhyt algoritmi, joka käsittelee SensorTagin anturidataa. Tästä lisää alla..
Kun laite on tunnistanut että käyttäjä käytti portaita, se kertoo tästä käyttäjälle kannustavasti ja lähettää (kuuluvuusalueella) oleville muille laitteille kannustavan viestin.
Vaatimukset¶
Työn kannalta ei ole merkitystä sillä, missä sovellus toimii, kunhan sitä pystyy demoamaan palautustilaisuudessa. Varminta on tietysti tuunata sovellus toimivaksi Tietotalon portaissa ja hississä.
Harjoitustyössä on laitteeseen toteutettavassa ohjelmassa oltava seuraavat ominaisuudet, jotta työ hyväksytään:
- Ohjelmassa tulee olla minimaalinen käyttöliittymä.
- Dataa kerätään ensisijaisesti kiihtyvyysanturilla (MPU9250), mutta laitteen muitakin antureita voi käyttää.
- Liikkumistavan tunnistusalgoritmin on kyettävä tunnistamaan laskennallisia eroja valitussa skenaariossa: hissillä ylös/alas vs portaita ylös/alas. Suuntaa ylös/alas ei tarvitse tunnistaa, vaan voi valita jommankumman, josta tunnistetaan portaat vs hissi.
- Ohjelman on informoitava käyttäjää tunnistusalgoritmin tuloksesta laitteen näytöllä.
- Ohjelman on lähetettävä ja vastaanotettava viestejä. Vastaanotetut viestit tulee näyttää ruudulla. Viestin maksimipituus on 16 merkkiä.
- Ohjelman toteutuksen on perustuttava tilakoneeseen.
Ajatuksena työssä on, että kokeillaan SensorTag:n käyttämistä irti työasemasta itsenäisenä laitteena, ainakin työn testausvaiheessa. Ohjeistus SensorTagin käyttöönottoon patterin kanssa löytyy täältä.
Tekoäly.. que?¶
Nykyään tekoäly, erityisesti pilvipohjaisessa massadata-analyysissä, perustuu tilastollisen laskennan menetelmiin, joilla tehdään päätelmiä laajoista aineistoista. Kurssilla emme käsittele tekoälyä emmekä massadataa sen syvemmin, vaan tosiaan tunnistamme erilaisia piirteitä SensorTagin anturien tuottamasta datasta. Niiden laskennassa tilastomatematiikasta on hyötyä. Piirteiden avulla voimme sitten luokitella mihin kategoriaan mitattu suoritus kuuluu.
Työ ei edellytä ihmeempää tilastotieteen osaamista ja liikkumistapa voidaan (henkilökunnan testien mukaan) tunnistaa yksinkertaisista anturidatasta lasketuista piirteistä, kuten:
- Kynnysarvo/raja-arvojen (engl. threshold) ylityksistä / alituksista.
- Piirteistä: keskiarvo, varianssi, keskihajonta, ...
- Esimerkkialgoritmit näiden laskemiseksi löytyvät helposti netistä, esim varianssille.
- Laatimalla malli/profiili (okei tämä on jo haastavampi juttu) liikkumistavoista ja vertaamalla mitattua dataa siihen, vaikkapa korrelaation avulla.
- ... you name it.
Luokittelun (joka itsessään on sekin iso tutkimusalue täynnä erilaisia menetelmiä) voi kurssilla tehdä ohjelmaan erilaisten vertailujen avulla.
Mikään ei tietenkään estä opiskelijoita kehittämästä vielä hienostuneempia menetelmiä liikkumistavan tunnistamiseen, mutta käytänössä menetelmät 1. ja/tai 2. riittävät.
TÄRKEÄÄ! Koska kurssin opetussisältöön ei kuulu tilastotiede eikä tekoäly, niin harjoitustyössä käytettyä liikkumistavan (portaat/hissi) tunnistusalgoritmin laatua ei arvostella, mutta sen tulee jollain osoitetulla tavalla reaalimaailman testitilanteessa tunnistaa anturidatasta mainittujen liikkumistapojen eroja. Työtä koskee alempana annetut arvosteluperusteet.
Testidataa¶
Henkilökunta on Tietotalossa liikkuessaan kerännyt valmiiksi testidata-aineiston, jota työssä voi käyttää alustavan tunnistusalgoritmin toteuttamiseen. Testidata on kerätty SensorTagin kiihtyvyysanturilla MPU9250. Tiedostoissa datan formaatti on
[aikaleima, acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z]
.Alla kuvissa aikaleima (mittausajanhetki) x-akselilla ja kiihtyvyysanturin eri suunnat (X,Y,Z) y-akselilla ajan suhteen. Lisää testidataa on tulossa!
1. Käyttäjä pysyi paikallaan liikkumatta
2. Käyttäjä liikkui alas Tietotalon hissillä
3. Käyttäjä käveli Tietotalon portaat alas
Hox! Huomaa myös annetussa testidatassa oleva asentoanturin (gyro) esimerkkidata! Siitä voi olla hyötyä lisäominaisuuksien toteuttamisessa..
Lisäominaisuuksia¶
Harjoitustyön pistemäärää voi nostaa toteuttamalla työhön lisäominaisuuksia, joista alla esimerkkejä:
- 1 pisteen ominaisuuksia (Käyttöliittymässä lisäjuttuja)
- Käyttöliittymässä menurakenne
- Käyttäjä/laite voi lähettää erilaisia viestejä
- Laitteen kaiutin tuottaa ääntä
- Kannustetaan käyttäjää tekstillä / ledeillä / tms
- ...
- 2 pisteen ominaisuuksia (Monipuolista laitteen ominaisuuksien käyttöä)
- Käytetään (ruudulle tms) muiden sensorien dataa
- Näytöllä pikseligrafiikkaa
- Näytöllä animaatiota
- Tunnistualgoritmi toimii "reaaliajassa" mittauksen aikana (online-tilassa) eikä mittauksen jälkeen (offline)
- ...
- 3 pisteen ominaisuuksia (Merkittävää lisätoiminnallisuutta)
- Ohjelma tunnistaa käyttäjän liikkeitä tarkemmin: askeleet, yms (nämä lasketaan siis ym. tunnistusalgoritmin päälle, jota itseään ei arvostella).
- Ohjelma tunnistaa muitakin liikkumismuotoja: pyöräily / bussimatkailu.
- Analyysin apuna oikeasti käytetään muita sensoreita (ts. ominaisuus ei toimi ilman datan fuusiota).
- Näiden EI tarvitse liittyä liikkumistavan tunnistukseen, myös täysin omia juttuja voi keksiä ja muu sensoridata on käytössä.
- ..
Jokainen toteutettu toiminnallisuus lasketaan vaan kerran.
Omien toiminnallisuuksien pistemäärien arvioinnissa käytämme opetushenkilökunnan työkokemusta sulautettujen ohjelmoinnista.
Yleisiä vinkkejä¶
Yllättävästi moni asia on kerrottu ja moneen kysymykseen vastattu luentomateriaalissa. Siihen kannattaa perehtyä kunnolla! Vaikka tämä onkin ohjelmointikurssi, niin manuaali pitää silti lukea..
Harjoitustyön toteutusta kannattaa lähteä purkamaan Rakenteellinen ohjelmointi-lisämateriaalin avulla. Näin saadaan isokin ongelma palasteltua helpommin toteuttaviin osasiin.
- Hyvin suunniteltu on 90% tehty!
- Pahin virhe mitä voi tehdä, on jättää asiat viimetinkaan.
- ..aloittelija ei varmasti saa työtä viikossa tehdyksi!
- Kannattaa vilkaIsta mitä kaikkea toiminnallisuutta standardikirjastot ja RTOS:n eri kirjastot tarjoavat valmiiksi. Nämä kirjastot helpottavat ohjelmointia suuresti.
- Koodatessa voi olla hyödyllistä koodata vaikeat kohdat ensin pc:llä. Myös algoritmien tms testaaminen PC:ssä voi olla helpompaa. Sitten kun koodi on toimivaa, sen voi siirtää laitteelle.
- Kannattaa käyttää toistorakenteissa, ehtolauseissa yms välitulostuksia, joissa tulostaa konsoli-ikkunalle (System_printf + System_flush) muuttujien arvoja tms oleellista tietoa. Tämä nopeuttaa merkittävästi virheiden metsästystä ohjelmasta. Myös koodissa yleisesti / funktioiden sisällä voi olla välitulostuksia, ne auttavat lisäksi löytämään loogisia virheitä ohjelman suoritusjärjestyksessä. Tyyppiesimerkki ongelmasta joka selviää nätisti välitulostuksilla on silmukkarakenteet, joissa tulostatte konsoli-ikkunaan kaikkien muuttujien arvot.
- Ja terveisiä työelämästä! Myös sularien/ohjelmoinnin ammattilaiset käyttää välitulostuksia / logeja ohjelman toiminnasta, koska niiden avulla viimeistään löytyy 99% virhepaikoista.
Tärkeää on muistaa, että jos jäätte jumiin, käykää harjoituksissa kysymässä!! Tässä jos jossain ei kannata viivytellä.
Tehtäväkohtaisia vinkkejä¶
Päivitämme tänne vinkkejä sitä mukaan kun harjoitustyön toteutus etenee ja tiedämme lisää..
- Luentomateriaalissa on esimerkki tilakoneesta, jota voi kannattaa soveltaa harjoitustyössä.. (suora copy & paste SensorTagiin ei tässä toimi tv. evil teacher).
- Ohjelma kannattaa jakaa taskeihin niin, että yhdessä on viestintä, toisessa näytön päivitys, kolmannessa sensoridatan lukeminen, jne.
- Käyttöliittymään kannattaa toteuttaa Mittaus päälle/pois-toiminto.
- Esimerkki MPU9250-anturin käytöstä löytyy opiskelijoiden tiedostonjaosta.
- Sensoridataa kannattaa tietysti kerätä taulukkoon, josta sitä on helppo käsitellä.
- Huomioikaa tässä taulukon koko tavuina, jotta se mahtuu laitteen muistiin! Käytössä on noin 20kB muistia, jonne siis pitää kaiken muunkin tavaran mahtua.
- Selvittäkää mittausta varten sopiva näytteenottoväli (engl. sample rate) eli kuinka tiheään dataa kannattaa sensorilla kerätä. Mittausarvo kerran sekunnissa on selvästi liian hidas liikkeen mittaamiseen, mutta taas 100 mittausta sekunnissa lienee jo liikaa?
- Yllä kuvissa ja testidatassa näkyvän mittausajanhetken saa kysyttyä RTOS:n funktiolla
Clock_getTicks()
. - Anturidataa voi tarvittaessa siistiä (suodattaa) vaikkapa laskemalla liukuvaa keskiarvoa. Mutta tästä kannattaa ensin kysyä henkilökunnalta, jos ei tiedä mitä on tekemässä..
- Laitteen komponenttien alustuksista ei pidä laittaa main-funktioon vaan taskeihin. Tämä siitä syystä, että osa tarvitsee BIOS:n toiminnallisuutta, joka käynnistyy vasta main:n lopussa
- Se patterihan kuluu loppuun, jos laitteen jättää yöksi päälle. Toteuta koodiin virtanappi ja ihan ensimmäiseksi ei tietenkään kannata lähteä patterin kanssa pelailemaan. Uuden patterin saa toki hakemalla harjoituksista.
Toteutusjärjestys¶
Alla ohjeellinen (henkilökunnan mielestä toimiva) toteutusjärjestys harjoitustyölle:
- Tunnistusalgoritmin toteutus C-kielellä työasemassa annetun testidatan avulla. Tässä vaiheessa ei ole vielä tarpeen koodata riviäkään itse laitteella.
- Sensoridatan keruu laitteella ja algoritmin toteutus laitteeseen.
- Käyttäjän informointi ja viestien lähetys/vastaanotto.
- Lisäominaisuudet.
Ohjeita datan keräämiseen¶
Omatoiminen testidatan keräys tunnistusalgoritmille onnistuu parhaiten läppärin avulla. Tai sitten voi vaan tulostella "livenä" sensorin mittausarvoja ruudulle ja seurata sitä liikkuessa. Näitä varten voi laatia pienen testiohjelman, joka vain kysyy antur(e)ilta dataa ja tulostaa sen konsoli-ikkunaan. Testin jälkeen datan saa talteen copy & paste-toiminnolla konsoli-ikkunasta vaikkapa tekstieditoriin / M$ Exceliin / tms.
Kun käynnistätte ohjelmanne, MPU9250 kalibroituu itsekseen. Tässä vaiheessa laitteen tulisi olla liikkumatta tasaisella pinnalla, lattian tms kiinteän pohjan päällä.
Tärkeää dataa kerätessä on tehdä keräys aina samalla tavalla, eli käyttäjä ja anturi samassa asennossa, jne. Tämä sen takia että eri mittauksissa kerätty data olisi vertailukelpoista!.
Kerätyn datan voi visualisoida tarvittaessa vaikkapa jollain Python-kirjastolla, gnuplot:lla, Excelillä tai vastaavalla ohjelmistolla.
Harjoituksissa annamme käyttöön lainaläppäreitä, joilla datan keräystä voi tehdä itse, mutta alkuun pääsee ylläolevalla testidatalla.
Työsuunnitelma¶
Työparin tulee osana harjoitustyötä tehdä toteutuksesta ensin oma suunnitelma. Suunnitelmia ei näytetä julkisesti muille, tarkoitus on että autatte itseänne lopputyön tekemisessä. Suunnitelman tekeminen voi tuntua turhalta, mutta aiemman opiskelijapalautteen perusteella se todellakin laittaa ajatukset liikkeelle, miettimään mitä työssä oikeastaan pitää tehdä!
Suunnitelmassa ei tarvitse mennä kovinkaan tarkasti toteutukseen, korkea abstraktiotaso riittää. Asiat voi kertoa ranskalaisilla viivoilla lyhyesti. Suunnitelman koko max yksi a4. Suunnitelma ei ole mitenkään sitova, ts. todennäköisesti se elää työn toteutuksen edetessä..
Tästä linkistä Esimerkkisuunnitelma.
Sisältö:
- Hahmotelma mitä laitteen näytöllä näkyy sekä mitä oheislaitteita käytetään (painonapit, sensorit, jne)
- Lyhyesti kuvattuna mitä toiminnallisuutta ohjelmassa on: nimet eivät riitä, oleellista on mitä missäkin toiminnallisuudessa tehdään
- Taskit, omat funktiot, ...
- Tietorakenteet, vakiot, globaalit muuttujat, ...
- Tilakone, joka toteuttaa harjoitustyön
- Helpoin esittää kuvana
- Tilakone riittää ohjelman päätasolla, alemmille abstraktiotasoille ei tarvitse mennä
- Mietityt lisäominaisuudet
- Arvio siitä, mitkä osa-alueet harjoitustyössä ovat työläitä (omasta mielestä)
Suunnitelman palautus¶
Suunnitelman palautus viimeistään 14.10.. Suunnitelma on jokatapauksessa pakollinen osa harjoitustyötä ja jos sitä ei palauta ajoissa, vähennetään harjoitustyön pistemäärästä 3p. Riittää, että toinen työparista sen palauttaa Lovelaceen, mutta molempien nimet on oltava suunnitelmassa. Kurssin henkilökunta käy suunnitelman läpi ja lähettää siitä tarvittaessa palautetta.
Hox! Lopputyön toteutuksen saa toki aloittaa ennen suunnitelman esittelyä!
Hox! Suunnitelmia saatetaan käyttää myöhemmin akateemisessa tutkimuksessa lähdemateriaalina, tällöin ne tehdään nimettömiksi ja tunnistamattomiksi. Voitte halutessanne kieltää oman suunnitelman käytön tutkimusmateriaalina, mainitsemalla siitä suunnitelmassa.
Työn palautus¶
Harjoitustyön deadline on Maanantai 19. Marraskuuta klo 23:59 2018.
Harjoitustyön koodit palautetaan allaolevaan palautusboxiin ennen deadlinea. Tämä palautettu koodi on arvosteltava koodi. (Lisäksi, tallennus Lovelaceen on tehtävä, koska Suomen laki vaatii säilyttämään kurssisuoritukset vähintään 6kk ajan.)
Työn arvostelu tehdään ryhmittäin palautustilaisuudessa alkaen Tiistai 20.11. Kurssin etusivulla sisällysluettelossa löytyy varauskalenteri.
- Tarkistus vie noin 15min per ryhmä
- Ryhmän molempien opiskelijoiden oltava paikalla
- Poissaoleva ei saa arvosanaa, ennenkuin on selvittänyt osuutensa työhön
- Ohjelman toiminnallisuus ja koodi esitellään opettajalle. Opettaja kyselee toteutuksesta.
- Lopputyöstä saatu pistemäärä kerrotaan ryhmälle.
Arvostelu¶
Harjoitustyön pistemäärä max 30p muodostaa 50% kurssin arvosanasta. Toiset 50% tulevat siis Lovelacen C-kielen harjoitustehtävistä.
Arvosanaan 1 riittää, että harjoitustyöstä on minimissään toimiva versio ja kasassa on 50% yhteenlasketuista maksimipisteistä. Myös molemmista osa-alueista (C-kielen harjoitukset ja harjoitustyö) tulee olla suorituksia.
Pisteytys:
- Suunnitelma: 0 / -3p
- Vaadittu perustoiminnallisuus ohjelmassa: 10p
- Koodissa isoja bugeja tai puuttuu toiminnallisuus: -2p per bugi/puute
- Ryhmän kertoessa kuinka bugi/puute korjattaisiin : -1p
- Koodin rakenne ja luettavuus: 0-5p
- Ohjelman tilakone on toteutettu vähintään luentomateriaalissa kuvatulla tavalla: 2p
- Koodin rakenne on järkevä ja modulaarinen (funktioita käytetty): 1p
- Koodissa on kuvaavia funktioiden ja muuttujien nimiä: 1p
- Koodi on sisennetty siististi ja järkevästi kommentoitu: 1p
- Lisäominaisuuksia 0-15p
- Ylläkuvattuja tai muita vastaavia lisäominaisuuksia: n * 1-3p
FAQ¶
- Voiko työn tehdä yksin?
- Voi, syystä kuten esim. käy töissä, asuu muualla kuin Oulussa, tms. Työmäärä on sitten isompi ja langattoman tiedonsiirron toteutuksessa voi tulla hankaluuksia. Hox! Yksin tekeminen on mahdollista kunhan laitteita on riittävästi kaikille.
- Pyrimme mahdollisuuksien mukaan auttamaan myös ulkopaikkakuntalaisia lopputyön suorituksessa, olkaa ajoissa yhteydessä henkilökuntaan sähköpostitse. Ulkopaikkakuntalaisilta vaaditaan kuitenkin ihan täsmälleen sama kurssisuoritus, joten he joutuvat esittelemään työn paikanpäällä Oulussa.
- Voiko työn tehdä isommassa ryhmässä kuin pari?
- Voi, kun ryhmän koko on max 3 opiskelijaa. Mutta ryhmän tulee toteuttaa lopputyöhön lisäominaisuuksia 5 pisteen verran.
- Saako jutella kaverin kanssa?
- Työstä saa tietenkin keskustella harjoituksissa jne, mutta joskun kaksi ryhmää palauttaa saman koodin, saatatte syyllistyä plagiointiin. Tästä syystä yhteistyötä tehneet ryhmät tulee ilmoittaa koodin kommenteissa tms.
- Raja menee siinä, että tehtävästä saa keskustella, mutta koodi pitää kuitenkin itse tehdä!
- Voiko työn palauttaa myöhässä?
- Ei kannata, sakotamme arvosanassa (rankalla kädellä).
- Jos työ on myöhästymässä perustellusta syystä, olkaa ajoissa etukäteen yhteydessä henkilökuntaan, niin katsotaan tilanne.
- Saako jonkun muun (tai netistä löytynyttä) koodia käyttää?
- Samalle kurssille osallistuvien koodia ei saa käyttää, vaikka ilmoittaisi lähteenkin. Ts. toisten lopputyöstä koodia ei saa kopioida omaan työhön.
- Muutoin saa, kunhan ilmoittaa mistä koodi on haettu: www-sivu tms, muutoin saatatte syyllistyä plagiointiin.
- Mites tuo plagiointi?
- Yliopistolla on ohjeet miten plagioinnin kanssa menetellään. Noudatamme niitä.
Anna palautetta
Kommentteja tehtävästä?