Harjoitustyö 2024. Salaiset viestit¶
Huom! Materiaali päivittyy kurssin aikana lisäten selvennyksiä sisältöön Myös kurssin edetessä lisäämme vinkkejä ongelmakohtiin ja muuta tietoa. Joten tarkistakaa sivun sisältö aika ajoin!
Päivitetty viimeksi: 16.11.2024
- Tarkennus liittyen virheeseen serial client -sovelluksessa, joka ei tunnista kolmea merkkiä viestin lopussa. Sovellus hyväksyy vain yksittäisiä sanoja.
Edellinen versio:
- 1.10.2024. Alkuperäinen versio.
- 13.10.2024. Tarkennettu toimitettavia tehtäviä.
- 30.10.2024. Tarkennus liikkeen ja asento käsitteeseen liittyen.
- 06.11.2024
- Lisätty tietoa symbolien tulkinnan tarpeesta (katso Vaatimukset-osio)
- Tarkennettu sarjaliikenneohjelman lähetys- ja vastaanottoformaatin odotuksia (katso Työasemaohjelma-osio)
- Päivitetty vaatimukset-osio. MPU on pakollinen, mutta pisteiden ja viivojen määrittelyssä ei ole pakko käyttää liikkeitä. Voit käyttää painiketta.
- Lisätty demovideo.
- Lisätty sarjaliikenneohjelman lähdekoodi.
Johdanto¶
Opiskelijat työskentelevät hallituksen tiedusteluvirastolle. Tehtävänäsi on kehittää viestintälaite, joka mahdollistaa viestin lähettämisen toiselle agentille käyttämällä piilotettuja vuorovaikutuksia laitteen kanssa. Tässä projektissa SensorTag toimii viestintävälineenä.
Oppimistavoitteet¶
Projektissa opiskelijat oppivat käyttämään SensorTag-laudan oheislaitteita TI-RTOS reaaliaikaisen käyttöjärjestelmän avulla. Perustasolla opiskelijat osaavat tunnistaa tiettyjä liikkeitä laitteen MPU-sensorilla ja lähettää merkin eri liikkeiden perusteella ulkoiselle laitteelle UART-väylän kautta. UART:ia käytetään myös vastaanottamaan viestejä ulkoisesta lähteestä, joita laite käsittelee jollain tavalla, esimerkiksi käyttämällä laitteen summeria toistamaan ääniä eri pituisina tiettyjen merkkien esittämiseksi.
Projektin vaatimukset¶
Salaiset viestit¶
Harjoitustyössä sinun ja ryhmäsi tehtävänä on toteuttaa Morse-koodiin perustuva viestintäohjelma. Morseaakkoset ovat osa Samuel Morsen vuonna 1838 kehittämää viestintäjärjestelmää, jota aikanaan käytettiin viestien lähettämiseen lennättimen avulla sähköttämällä. Nykyään morseaakkosia ja sähkötystä käytetään enää vain vähän, mutta esimerkiksi Suomen Puolustusvoimien sissiradistit ja radioamatöörit opettelevat ja harjoittavat tätä taitoa.
Harjoitustyönä toteutettava ohjelma siis tunnistaa morseaakkosista koostuvia viestejä muodostavia pisteitä, viivoja ja välilyöntejä eri anturidatan avulla tulkituista liikkeistä tai vaikkapa napin painalluksista. Tuotetut viestit siirretään sitten työasemalla toimivaan ohjelmaan, jossa ne muutetaan takaisin tekstiksi. Kurssin laitteelle toteutetun ohjelman tulisi myös pystyä toistamaan sille lähetetty morseaakkosista koostuva viesti käyttäjälleen.
- HUOM: Sovelluksesi ei tarvitse pystyä kääntämään Morse-koodin ja kirjainten välillä tai päinvastoin.
Jos järjestelmäsi pystyy tekemään tämän käännöksen, se katsotaan lisätyöksi. Siina tapauksessa järjestelmän tulee pystyä koodaamaan ja dekoodaamaan kirjaimet A - Z (ei tarvitse sisältää ä, ö) ja numerot 0-9. Muita symboleita ei vaadita.
Viestiprotokolla¶
Laitteen ja työaseman välillä tapahtuva kommunikaatio noudattaa kansainvälistä morseaakkosjärjestelmää tietyin poikkeuksin ja sovelluskohtaisin tarkennuksin. Nämä poikkeukset on listattu alla.
- Jokainen Morse-aakkosiksi koodattu merkki lähetetään peräkkäisenä sarjana viivoja "-" ja pisteitä "."
- Jokaisen Morse-koodatun merkin (esim "a" => ".-") välillä on yksi välilyönti " "
- Sanojen välillä on kaksi välilyöntiä
- Viesti päättyy kolmeen välilyöntiin
- Jokainen yksittäinen symboli (piste, viiva tai välilyönti) päättyy rivinvaihtoon ("paluu vaaditaan UART:ssa \r\n").
TÄRKEÄ HUOMAUTUS: Sovellus (serial client), jota käytämme testaamiseen, ei tunnista kolmea välilyöntiä viestin lopussa, joten voit lähettää vain yhden sanan. Viesti päättyy kahteen välilyöntiin kolmen sijasta, kuten ohjeissa on ehdotettu.
Esimerkki¶
Jotta yllä mainitut pelisäännöt tulisivat mahdollisimman selkeiksi kaikille, ohessa on esimerkki protokollan käytöstä.
Lähetettävä sana: aasi Muunnetaan sana sarjaksi Morse-koodattuja kirjaimia, jokaisen kirjaimen väliin yksi välilyönti: aasi => .- .- ... .. Lähetetään sana UARTin kautta työasemalle: .\r\n -\r\n \r\n .\r\n -\r\n \r\n .\r\n .\r\n .\r\n \r\n .\r\n .\r\n \r\n \r\n \r\n
Huomaa, että viesti päättyy kolmeen välilyöntiin. Huomaa myös, että ennen \r\n-merkkejä on välilyöntejä, jotka eivät ala pisteellä tai viivalla.
TÄRKEÄ HUOMAUTUS: Sovellus (serial client), jota käytämme testaamiseen, ei tunnista kolmea välilyöntiä viestin lopussa, joten voit lähettää vain yhden sanan. Viesti päättyy kahteen välilyöntiin kolmen sijasta, kuten ohjeissa on ehdotettu.
Työasemaohjelma¶
Kurssin virtuaalikoneeseen on jo valmiiksi asennettu UARTin kautta Morse-muodossa viestejä lähettävä ja vastaanottava ohjelma. Saat sen käynnistettyä joko työpöydällä olevan "Serial Client"-pikakuvakkeen avulla. Mikäli tämä ei toimi, voit käyttää virtuaalikoneen terminaalia ja ensiksi navigoida ohjelman kansioon komennolla
cd serial-client
, jonka jälkeen saat ohjelman käynnistettyä komennolla npm start
.Käynnistyessään ohjelma lukee samassa kansiossa sijaitsevan tiedoston
config.json
, joka sisältää tarvittavat konfiguraatiot eri kehitysalustojen käyttöön. Nyt konfiguraatiotiedostossa on jo valmiina asetukset tämän kurssin laitteille (SensorTag ja Pico W), mutta sinne olisi myös mahdollista sisällyttää muitakin laitteita. Jos asetusten lukeminen onnistuu, ohjelma tulostaa näytölle Config loaded with 2 known devices
, jonka jälkeen se siirtyy odottamaan tunnetun laitteen yhdistämistä.Kun yhdistät ohjelmalle tunnetun laitteen, se siirtyy viestitystilaan, jossa terminaaliin kirjoitetut viestit (poikkeuksena ohjelman komennot) lähetetään yhdistetylle laitteelle UARTin kautta Morse-koodattuna. Laitteelta vastaanotettu Morse-muotoinen data tulostetaan terminaaliin, ja kun siitä havaitaan viestin päättävät kolme välilyöntiä, viesti itsessään muunnetaan tekstiksi ja tulostetaan ikkunaan. Näin voit nähdä lähetetyn viestin, mutta myös viestin muodostavat merkit, mikä voi helpottaa ohjelman debuggaamista.
Tärkeä huomio sarjaliikenneohjelman odottamasta formaatista:
- Selkeyden vuoksi kutsumme symboliksi yksittäistä tietoelementtiä, joka lähetetään sarjaliikennesovellukselle (mukaan lukien rivinvaihtomerkit).
- Jokaisen symbolin tulee päättyä \0-merkillä eli
NULL
-merkillä. Näin ollen odotettu teksti kullekin symbolille sisältää 4 merkkiä: - Pisteelle:
".\r\n\0"
- Viivalle:
"-\r\n\0"
- Välilyönnille:
" \r\n\0"
- Jokainen yksittäinen symboli (piste, viiva tai välilyönti) tulee lähettää yksitellen, joten et voi lähettää esimerkiksi
".-\r\n\0"
tai".\r\n-\r\n\0"
- Kun symboli vastaanotetaan UART:sta, se ei sisällä \0 (
NULL
-merkkiä). Välilyöntejä ei myöskään käytetä kirjainten, sanojen tai viestinnän lopettamisen erottamiseen.
Komennot¶
Kuten sanottu, kaikki ohjelmalle syötetyt, ohjelman tukemia merkkejä sisältävät viestit lähetetään UARTin kautta Morse-koodattuna laitteelle, poikkeuksena ohjelman komennot. Näitä komentoja voit käyttää ohjelman suorituksen ohjaamiseen.
.clear
tyhjentää terminaalin näytön.exit
lopettaa ohjelman suorituksen
Asennus omalle tietokoneelle¶
Lähdekoodi ja ohjeet ohjelman asentamiseen ja suorittamiseen opiskelijan tietokoneella löytyvät osoitteesta serial-client GitLab -projekti.
Demo¶
Seuraava video havainnollistaa odotetun toiminnan. Pystysuuntainen liike lähettää viivan, ja painikkeen painaminen lähettää välilyönnin. Kolme peräkkäistä välilyöntiä näyttää kirjoitetun viestin. Kirjoittamalla sisältöä sarjaliikenneohjelmaan lähetetään Morse-signaali, joka toistetaan SensorTag-laitteessa.
Vaatimukset¶
- Ohjelmassa tulee olla minimaalinen käyttöliittymä. Toteutus esim. painonapeilla, ledeillä ja äänimerkeillä
- Ohjauskomennot (pisteet, viivat ja välilyönnit) tulee havaita joko ennalta määritellyistä painalluksista, MPU9250-anturista (kiihtyvyysanturi ja gyroskooppi) kerätystä datasta tai molempien yhdistelmästä.
- Ohjelman täytyy tunnistaa vähintään kaksi erilaista asentoa tai liikettä käyttämällä MPU9250-anturia. Voit myös yhdistää painalluksia liikkeisiin ja muihin tilatietoihin, mikä mahdollistaa monimutkaisempien komentojen toteutuksen. Asennon tai liikkeen muutosta voidaan käyttää joko:
- Lähettämään yksi perussymboleista: piste, viiva tai välilyönti
- Laukaisemaan symbolin tai kokonaisen viestin lähetyksen
- Lähettämään ennalta määritellyn viestin, kuten SOS, Mayday tai vastaava.
- HUOM Mikä on asento ja mikä on liike?
- Asento tarkoittaa, että laite pidetään tietyssä staattisessa asennossa ja orientaatiossa. Yleensä tarvitaan vain yksi yksittäinen näyte kiihtyvyysanturilta.
- Liikkeessä laitteella on alkuasento ja loppuasento: esimerkiksi laitteen nostaminen ylös, pudottaminen alas ... Liikkeet voidaan toteuttaa myös kolmiulotteisesti eri suuntiin. Tässä tapauksessa täytyy kerätä ja käsitellä useita kiihtyvyysanturin / gyroskoopin arvoja.
- Ohjelman on lähetettävä viesti työasemalle, kun komento on tunnistettu
- Ohjelman on informoitava käyttäjää tunnistetusta komennosta äänimerkillä tai ledillä
- Ohjelman on vastaanotettava viestejä työasemalta ja reagoida niihin joko LEDeillä tai summerilla (Morse-koodi on näytettävä käyttäjälle).
- Ohjelman toteutuksen on perustuttava tehtäväpohjaiseen toteutukseen kurssin reaaliaikakäyttöjärjestelmällä sekä tilakoneeseen
- Voit käyttää lisäantureiden tunnistusta esimerkiksi lähettääksesi tiettyjä viestejä (esim.
HOT
, jos lämpötila > kynnysarvo).
- HUOM: Sovelluksesi ei tarvitse pystyä kääntämään Morse-koodin ja kirjainten välillä tai päinvastoin.
Jos järjestelmäsi pystyy tekemään tämän käännöksen, se katsotaan lisätyöksi. Vähimmäisvaatimuksena on, että järjestelmän tulee pystyä koodaamaan ja dekoodaamaan kirjaimet A - Z (ei tarvitse sisältää ä, ö) ja numerot 0-9. Muita symboleita ei vaadita.
Kohti parempaa arvosanaa¶
Harjoitustyön pistemäärää voi nostaa toteuttamalla työhön lisätoiminnallisuuksia, joista alla esimerkkejä. Listaa täydennetään vielä:
- 1 pisteen ominaisuuksia: Käyttöliittymässä lisäjuttuja
- Käyttöliittymässä jonkinlainen menurakenne painonappeja ja äänimerkkejä käyttäen.
- Ilmoitetaan ohjelman tilan muutoksesta äänimerkeillä tai ledeillä (esim. saapuva viesti)
- Käyttöliittymän omat ominaisuudet (per toteutus)
- Yli kolmen liikkeen tunnistaminen.
- Lisäanturin hyödyntäminen.
- Datan kerääminen lisäliikkeitä varten.
- Morse-koodin / latinalaisen aakkoston käännös
- ...
- 2/3 pisteen ominaisuuksia: Monipuolista laitteen ominaisuuksien käyttöä
- Erilaisia monimutkaisempia liikkeitä käyttäen useita suuntia, eri antureita, painonappeja, tilatietoa, ym, liikkeiden tunnistamisessa apuna (per toteutus).
- Kaiutin soittaa musiikkia.
- Virherajojen käyttö liikkeen tunnistuksessa.
- Monimutkaiset tunnistusalgoritmit.
- Kattava datan kerääminen ja analysointi.
- Edistyneiden synkronointimekanismien, kuten muteksien tai semaforien, käyttö.
- Näytön käyttö.
- Kaksi SensorTag-laitetta viestivät langattomasti keskenään.
- ...
Jokainen toteutettu toiminnallisuus lasketaan vain kerran. Toiminnallisuuksien pistemäärien arvioinnissa käytämme maalaisjärkeä sekä opetushenkilökunnan työkokemusta sulautettujen järjestelmien ohjelmoinnista.
Anturidata harjoitustyössä¶
Seuraavassa ohjeita miten anturidatan keräämiseen ja tulkintaan pohjautuen kannattaa komentojen tulkinta toteuttaa ohjelmassa.
On kaksi vaihtoehtoa datan havaitsemiseksi MPU:lla:
- Asennon/orientaation havaitseminen: laite on liikkumaton. Tämä antaa vähemmän pisteitä.
- Liikkeen havaitseminen: laitetta pidetään kädessä, ja käsi tekee tietyn liikkeen, joka tunnistetaan.
Ohjauskomentojen toteutus laitteen liikkeenä, sitä kädessä pitäen, on ryhmän itsensä vapaasti päätettävissä. Mahdollisia vaihtoehtoisia toteutustapoja ovat ainakin seuraavat:
- Laitteen liu'utus pöydänpintaa pitkin
- Laitteen kallistus ja/tai liike
- Laitteen hyppyytys (=käy välillä ilmassa) pöydänpintaa pitkin
- Laitteen liikuttelu ilman tukea "3D:nä" ilmassa.
Yleisiä ohjeita ohjauskomennon tulkitsemiseen:
- Kannattaa määrittää kuinka voimakkaasti ja kuinka pitkä ajallisesti yksi komento on.
- Esimerkiksi onko liike pieni nykäisy vai yhden sekunnin mittainen, hidas liike pöydän pinnalla valittuun suuntaan?
- Anturidatan keräystaskissa aikaväli, ts. kuinka usein anturilta kysytään dataa.
- Esimerkki: kerran sekunnissa ehkä liian hidas aikaväli laitteen liikkeelle, mutta entäpä jos dataa ottaa talteen 5 tai 10 kertaa sekunnissa?
- Ohjauskomennon tulkitsemiseen ei tarvitse toteuttaa kovinkaan hienostunutta algoritmia. Riittää, kun analysoi esimerkiksi kiihtyvyysarvojen muutoksia ajan funktiona. Kts esimerkkidata alla.
- Harjoitustyö ei edellytä lukiotasoa syvällisempää matematiikan osaamista, joten ohjauskomentojen tunnistusalgoritmin laatua ei arvostella. Tietysti saa toteutuksen tehdä itse niin hienoksi kun haluaa.
- Ohjelman tulee kuitenkin reaalimaailman testitilanteessa tunnistaa liikekomennot.
- Ohjauskomentojen ketjuttaminen on ok, eli jatkuvasta/pitkäkestoisesta liikkeestä voi tulkita useammankin komennon.
Komennon tulkitseminen¶
1. Työ kannattaa aloittaa siten, että kerää MPU9250-anturilla oman datasetin aikasarjana talteen, samalla kun käsin liikuttaa laitetta. Keräys kannattaa toteuttaa niin, että tekee vain yhden liikkeen kerrallaan ja tallentaa sen omaan tiedostoonsa.
- Mittaustuloksiin on syytä liittää aikaleima mukaan, jotta pystyy laskemaan ajallista kestoa.
- Anturi antaa kurssikirjastomme avulla kuusi eri mittausarvoa per datan kysely, jotka ovat:
- Kiihtyvyys (acceleration) x-, y- ja z-akselit, yksikkönä painovoima g
- Asentomuutos (gyroscope) x-, y- ja z-akseleilla, yksikkönä kulmanopeus
Kun dataa kerätään taulukkoon, saadaan lopputuloksena 7-ulotteinen taulukko. Taulukossa data saattaa näyttää esimerkiksi seuraavalta:
aika, acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z
0, 0.0029, -0.0063, -1.0115, 1.1215, -0.4578, 0.3204
11, 0.0133, 0.0291, -0.9753, 0.0229, -0.0458, -0.2060
19, 0.0028, 0.0964, -1.0406, 5.2948, -14.09, 19.0735
30, -0.085, 0.2474, -1.8069, -1.833, 0.0992, 15.4953
41, -0.20, 0.3864, -2.2000, -6.180, 29.9924, 70.5643
Huomaa, että luvut on normalisoitu painovoiman mukaan. Siten 1 tarkoittaa 9,8 m/s².
2. Tuloksena kerätystä datasta voidaan visualisoida eri akselien suhteen mitä datassa tapahtui minkäkin liikkeen / komennon suorituksen aikana, ja tätä kautta hahmottaa miten tunnistus kannattaisi tehdä ohjelmallisesti.
Visualisoimalla nähdään helposti siis millaista anturidata on komennon eri vaiheissa, kun laite liikkuu:
- Riittääkö pelkkä liike ja sen keston mittaaminen? Miten liike näkyy datassa?
- Pitääkö komennossa lähteä ja päätyä johonkin asentoon?
- Minkä verran "virhettä" (esim. liikettä muiden akselien suuntaan) komennon suorituksessa sallitaan?
- jne..
3. Datasetin keräämisen ja visualisoinnin jälkeen ohjauskomento voidaan tunnistaa datasta hyvinkin yksinkertaisesti:
- Liikkeen kesto eri akselien suhteen
- Valitun kynnysarvon ylitys/alitus jonkin akselin suhteen
- Aikasarjalle voidaan laskea erilaisia piirteitä kuten keskiarvo, varianssi, keskihajonta, ym, joilla voidaan erottaa komentoja toisistaan (ja halutessa hienosäätää komennon tunnistusta).
- Tästä voi olla myös hyötyä, jos haluaa ketjuttaa komentoja tai toteuttaa monimutkaisempia komentoja (niitä lisäpisteitä?)
- Koska anturidataa saadaan kolmella akselilla (x, y ja z), sitä voi myös käsitellä 2- tai 3-ulotteisena vektorina, jolla on esimerkiksi suunta ja pituus..
- Ihan mitä vaan matikankirjasta / netistä löytyy / tekoälykurssilla kerrotaan.
- Muistakaa mainita koodissa lähteet.
Valmista testidataa¶
Henkilökunta on kerännyt valmiiksi pienen testidata-aineiston erilaisista kädessä olevan laitteen liikkeistä, jota työssä voi käyttää alustavaan komennon tunnistamiseen. Tässä mainitut tavat liikuttaa laitetta eivät välttämättä ole se ainut, helpoin, saati paras tapa toteuttaa komentoja kurssin laitteella.
Testidata on kerätty SensorTagin kiihtyvyysanturilla MPU9250. Tiedostoissa datan formaatti on
[aikaleima, acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z]
. Data on mitattu siten, että laite on ollut liikkumatta paikallaan mittauksen alussa ja sitten on tehty liike ylös kahdella eri tavalla. Kuvissa data visualisoitu x, y, ja z-akseleille (eri väreillä) ajan suhteen sekä kiihtyvyys- (g) että asentoanturilla (kulmanopeus). 1. Anturidata laitteen ollessa liikkumatta paikallaan:


2. Anturidata, kun laitetta nopeasti nykäistään pöydällä suuntaan ylös kaksi kertaa:


3. Anturidata, kun laite nostetaan irti pöydältä ja siirretään suuntaan ylös:


Omaa testidataa¶
Omatoiminen testidatan keräys onnistuu helpoiten niin, että toteutatte laitteeseen ihan aluksi erillisen datankeräystaskin erillisenä ohjelmana tai taskina, joka ihan vaan kerää liikeanturin dataa taulukkoon valituin aikavälein. Lopuksi ohjelma tulostaa taulukon rivi riviltä kehitysympäristöön, josta se on helppo copy & pasteta editoriin ja/tai tiedostoon. Datan voi visualisoida vaikkapa jollain Python-kirjastolla (köh köh matplotlib) tai ohjelmalla kuten gnuplot:lla tai M$ Excelillä.
Tärkeää omaa testidataa kerätessä on tehdä liike aina samalla tavalla, eli käyttäjä ja anturi samassa asennossa, jne, ja ehdottomasti vain yksi liike kerrallaan. Tämä sen takia että visualisoinnissa näkee selvästi miten datassa tapahtui. Lisäksi eri mittauksissa kerätty data on tällöin keskenään vertailukelpoista eri mittauksien välillä. Ja huomataan, että eri ihmisten kädenliike on yleensä niin erilainen, että esimerkiksi yo. testidata ei suoraan teidän omaan komennon tunnistukseen. Anturi on niin tarkka että pienetkin eroavaisuudet saadaan kiinni.
Vinkkejä harjoitustyöhön¶
Yllättäen moni asia on jo kerrottu ja kysymyksiin vastattu luentomateriaalissa. Materiaaliin kannattaa siis perehtyä kunnolla..
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!
- Isohko virhe mitä voi tehdä on jättää asiat viimetinkaan ..aloittelija ei varmasti saa työtä viikossa tehdyksi!
- Kannattaa vilkaista mitä kaikkea toiminnallisuutta C-kielen standardikirjastot ja RTOS:n eri kirjastot tarjoavat valmiiksi. Valmiit kirjastot kun helpottavat ohjelmointia suuresti, liittyen esimerkiksi merkkijonojen käsittelyyn..
- Koodatessa voi olla hyödyllistä koodata vaikeat kohdat ensin pc:llä. Myös liikkeentunnistus-algoritmien tms testaaminen PC:ssä on kertaluokkaa helpompaa. Sitten kun koodi on toimivaa, sitten vasta toteutuksen voi siirtää laitteelle ja testata siinä.
- Kannattaa käyttää toistorakenteissa, ehtolauseissa, yms, välitulostuksia, joissa tulostaa konsoli-ikkunalle (System_printf(..) + System_flush(..) tai printf(..)) muuttujien arvoja tms oleellista tietoa ohjelman etenemisestä. Tämä nopeuttaa merkittävästi virheiden metsästystä ohjelmasta.
- Tyyppiesimerkki ongelmasta, joka selviää nätisti välitulostuksilla on silmukkarakenteet, joissa tulostatte konsoli-ikkunaan joka iteraatiossa eri muuttujien arvot. Töissäkään pomo tuskin arvostaa, jos käytätte asioiden pähkäilyyn paljon aikaa, kun ne selviäisi hetkessä lisäämällä koodiin debuggitietoa..
- Tärkeää on muistaa, että jos jäätte jumiin, kysykää!! Kurssihenkilökuntahan on palkattu teidän avuksi..
Työkohtaisia vinkkejä¶
Päivitämme tänne vinkkejä sitä mukaan kun harjoitustyön toteutus etenee ja tiedämme lisää..
- Ohjelma on syytä jakaa taskeihin niin, että yhdessä on viestintä, toisessa äänien toistamiseen, kolmannessa sensoridatan lukeminen, jne.
- Käyttöliittymään kannattaa toteuttaa Komennon tunnistus päälle/pois-toiminto.
- Esimerkki MPU9250-anturin käytöstä löytyy Git-varastosta.
- Sensoridataa kannattaa tietysti kerätä taulukkoon, josta sitä on helppo käsitellä aikasarjana.
- Huomioikaa tässä taulukon koko tavuina mihin olette keräämässä dataa, jotta se mahtuu laitteen muistiin! Käytössä on noin 20kB muistia, jonne siis pitää kaiken muunkin tavaran mahtua.
- Anturidataa voi tarvittaessa siistiä (esimerkiksi poistaa kohinaa) vaikkapa laskemalla liukuvaa keskiarvoa tai muuta menetelmää käyttäen. Se harjoitustehtävä..
- Testidataan mittausajanhetken saa kysyttyä TI-RTOS:n Clock-kirjaston funktiolla
Clock_getTicks()
- Laitteen komponenttien alustuksia ei pidä laittaa
main
-funktioon vaan taskien alkuun. Tämä mm. siitä syystä, että työssä halutaan tehtäväpohjainen toteutus ja osa komponenteista tarvitsee RTOS:n toiminnallisuutta joka käynnistyy vasta main:n lopussa. - Luentomateriaalissa on esimerkki tilakoneesta, jota kannattaa soveltaa harjoitustyössä.. suora copy & paste SensorTagiin ei tietenkään toimi.
- Jos käytätte SensorTagia patterin kanssa / ilman USB-piuhaa) niin se patterihan kuluu loppuun. Varsinkin jos laitteen epähuomiossa jättää. Toteuttakaa koodiin virtanappi. Uuden patterin saa toki hakemalla harjoituksista.
- Syksyllä 2024 SensorTagin näytön käyttämistä harjoitustyössä mietitään, johtuen siitä ettei niitä välttämättä ole tarpeeksi kaikille ryhmille. Mikäli laitteet näyttöineen riittävät, niiden käyttö harjoitustyössä voidaan ottaa huomioon ja arvostelua muutetaan siltäosin. Opiskelijoille, joilla on laite ilman näyttöä, mietitään korvaava ratkaisu.
Toteutusjärjestys¶
Alla ohjeellinen (henkilökunnan mielestä toimiva) toteutusjärjestys harjoitustyölle. Eli ensin toteutetaan vaadittu toiminnallisuus ja sen jälkeen voi lähteä hakemaan parempaa arvosanaa toteuttamalla lisäominaisuuksia.
- Työsuunnitelma, jonka ei tarvitse olla lopullinen, mutta ryhmä hahmottaa mitä oikein ollaan tekemässä. (Suunnitelmahan saa muuttua, kts. alla)
- Laitteessa sensoridatan keruu ja analyysi komentojen tulkitsemista varten.
- Tunnistusalgoritmin toteutus C-kielellä ensin työasemalla kerättyyn dataan perustuen.
- Toimivan algoritmin siirto laitteeseen, toiminnallisuuksien testaus livenä.
- Käyttöliittymän tuunaus, viestien lähetys/vastaanotto sarjaliikenteenä.
- Lisäominaisuudet.
Palautettavat¶
- Työsuunnitelma. Toimitettava viimeistään: 2024-10-25 23:59
- Harjoitustyö. Toimitettava viimeistään: 2024-11-24 23:59
- Päiväkirja. Vähintään yksi päiväkirjamerkintä viikossa. Toimitettava viimeistään: 2024-11-24 23:59
- Välikoe. Suoritettu: 2024-11-25 20:59
- Harjoitustyön arviointitapaaminen. Ajat saatavilla viikoille 48 - 51.
Harjoitustyön arvostelu¶
Työn arvostelu tehdään ryhmittäin palautustilaisuudessa deadlinen jälkeen. Tilaisuus järjestetään työasemaluokassa.
- Tarkistus vie noin 30 min per ryhmä.
- Koko ryhmän on oltava paikalla joko luokassa tai etänä. Poissaoleva(t) ei saa arvosanaa, ennen kuin on selvittänyt osuutensa työhön.
- Ohjelman toiminnallisuus ja koodi esitellään opettajalle. Opettaja kyselee toteutuksesta.
- Opettajat käyttävät opiskelijoiden ennen deadlinea toimittamaa koodia. Opettajat käyttävät samaa kehitysympäristöä kuin se, joka on asennettu virtuaalikoneisiin koodin kääntämiseen ja suorittamiseen.
- Opiskelijoiden tulee pystyä vastaamaan kysymyksiin, jotka liittyvät toteutetun sovelluksen toimintaan. Kaikkien opiskelijoiden tulee pystyä vastaamaan tällaisiin kysymyksiin. Opiskelijoilta voidaan myös kysyä teoreettisia kysymyksiä, jotka liittyvät kurssiin.
- Jos opiskelija ei pysty vastaamaan peruskysymyksiin, jotka liittyvät ohjelman rakenteeseen tai erilaisiin toteutuspäätöksiin, HÄN EI VOI LÄPÄISTÄ TÄTÄ KURSSIA (Harjoitustyön arvosana olisi 0).
- On välttämätöntä, että toteutettu sovellus kääntyy, se voidaan ladata SensorTagiin ja se toimii perustoiminnallisuuden osalta. Muussa tapauksessa projektityö arvostellaan numerolla 0 ja opiskelija/t ei/eivät voi läpäistä kurssia.
Pisteytys¶
Harjoitustyön pistemäärä on enintään 30p, joka muodostaa 50% kurssin arvosanasta
Harjoitustyön pisteytys:
- Suunnitelma: 2 pistettä -> Sama arvosana kaikille tiimin jäsenille
- Projekti: 20 pistettä -> Sama arvosana kaikille tiimin jäsenille
- Henkilökohtainen päiväkirja: 1,5 pistettä
- Kysymykset projektin arvioinnin aikana: 2,5 pistettä
- Osuus projektiin: 6 pistettä jaetaan ryhmän jäsenten kesken. Päätös tehdään yhdessä opiskelijoiden kanssa loppupalaverin aikana.
- Kysely teoreettisista/käytännön toteutuksen näkökohdista: 2 pistettä
Tarkemmat arviointikriteerit löytyvät suunnitelman, ohjelmakoodin ja päiväkirjan palautuslaatikosta. Tarkista arviointikriteerit vastaavasta palautuslaatikosta.
Loppuarvosana
Toiset 50% kurssiarvosanaan tulevat aiemmista C-kielen harjoitustehtävistä (max 30p), joten maksimiyhteispistemäärä on 60p.
Toiset 50% kurssiarvosanaan tulevat aiemmista C-kielen harjoitustehtävistä (max 30p), joten maksimiyhteispistemäärä on 60p.
Hyväksytyn suorituksen vaatimukset
- Projekti kääntyy ja se on ladattu SensorTag-laitteeseen.
- Projekti pystyy tunnistamaan vähintään kaksi erilaista asentoa/liikettä ja lähettämään dataa UART-väylän kautta.
- Projekti pystyy tuottamaan 3 erilaista komentoa (. - välilyönti).
- Tilakone on toteutettu ja siinä on vähintään kaksi tehtävää.
- Opiskelija osaa vastata peruskysymyksiin projektin toteutuksesta ja käytetyistä teoreettisista näkökohdista.
- Vähintään 70 % oikein valikoe-kysymyksistä.
- Opiskelija on osallistunut projektin toteuttamiseen. Ei pelkästään suunnitteluun tai testaukseen.
- Vähintään 16 pistettä projektiosasta.
Erityisvaatimukset niille, jotka tavoittelevat arvosanaa 1 kurssilla¶
Jos haluat arvosanan 1, sinun tulee mainita tämä selkeästi päiväkirjasi alussa. Jos valitset tämän vaihtoehdon, et saa pisteitä, vaan saat ainoastaan HYVÄKSYTTY / HYLÄTTY, mikäli seuraavat kriteerit täyttyvät:
- Vähintään 16 pistettä C-harjoituksista
- Projekti kääntyy ja se on ladattu SensorTag-laitteeseen
- Projekti pystyy tunnistamaan vähintään kaksi erilaista asentoa/liikettä ja lähettämään dataa UART-väylän kautta.
- Opiskelija osaa vastata peruskysymyksiin projektin toteutuksesta.
- Opiskelija on osallistunut projektin toteuttamiseen. Ei pelkästään suunnitteluun tai testaukseen.
- Vähintään 60 % oikein välikokeesta.
- Kooditiedoston alussa tulee olla kommenttiosio, joka sisältää seuraavat tiedot:
- Käytettävien tehtävien määrä, kunkin tehtävän toteuttava funktio, kunkin tehtävän pääparametrit ja selitys siitä, mitä kukin tehtävä tekee.
- Käytettyjen keskeytysten määrä. Jokaiselle keskeytykselle tulee määritellä: keskeytyksen lähde, keskeytyksen käsittelijä ja lyhyt kuvaus kustakin keskeytyksestä.
- Luettele, kuinka monta sarjaviestintäprotokollaa käytät. Kuvaile, mitkä laitteet ovat mukana viestinnässä, ja lyhyt kuvaus siitä, miten data siirretään.
FAQ¶
- Voiko työn tehdä itsekseen?
- Jos on oikeita syitä yksintekemiselle niin olkaa yhteydessä opettajaan.
- Voiko työn tehdä isommassa ryhmässä kuin pari?
- Työn voi tehdä 2-3 hengen ryhmässä. Aiempina vuosina kolmen hengen ryhmien piti tehdä lisätehtäviä, mutta syksyllä 2023 tämä käytäntö ei ole voimassa. Neljän hengen ryhmät eivät ole sallittuja.
- Koodi toimi kotona, mutta ei harjoitustyön arvostelun aikana. Voinko kokeilla omalla tietokoneellani? Voinko näyttää sen etänä kotoa?
- Ei. Tarkista, että koodi toimii kurssin virtuaalikoneille asennetussa kehitysympäristössä ennen palauttamista.
- Saako työstä jutella kaverin kanssa?
- Saa tietenkin keskustella harjoituksissa, illanistujaisissa, 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.
- 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), ettette syyllisty plagiointiin.
- Voinko käyttää tekoälyä?
- Kyllä, kunhan kerrot koodissasi, mitä tekoälyä olet käyttänyt, mitä kehotteita ('prompt') olet käyttänyt ja miten olet muokannut koodia tekoälyn antaman vastauksen perusteella.
- Mites plagiointi?
- Yliopistolla on ohjeistus miten plagioinnin kanssa menetellään. Noudatamme niitä.
Väliaikainen koodin jakopaikka¶
Voit käyttää tätä palautuslaatikkoa koodin jakamiseen tiimin jäsenten kesken. ÄLÄ KÄYTÄ TÄTÄ PALAUTUSLAATIKKOA VALMIIN HARJOITUSTYÖN PALAUTUKSEEN. TÄSSÄ PALAUTUSLAATIKOSSA OLEVAA KOODIA EI ARVIOIDA