Esittely / Tavoite:
Teimme heittokameran protoryypin Savox ThrowCamin. Laite pystyy lähettämään kuvaa ja ylläpitämään ääniyhteyden kohdetilanteen keskeltä. Sen toiminnallisuuksiiin kuuluu lisäksi signaalin ja valonmerkkien avulla paikantaminen, sekä laitteen asennon havaitseminen. Heittokameraa hallitaan kehittämämme sovelluksen kautta, joka näyttää asennon, signaalin vahvuuden, sekä videokuvat.
Lopputulos:
Lopputuloksena laite jossa on 3 kameraa, mikrofoni, kaijutin sekä LED-valot. Laitteella voidaan katsoa, kuunnella sekä valaista ympäristöä ja lisäksi sitä voidaan myös käyttää ohjeiden antamiseen laitteen kaiutinsysteemin avulla. Laitteen runko koostuu PLA-Flex muovista sekä ruostumattomasta teräksestä, jotka yhdessä toimivat lujana ja joustavana materiaalina sekä mahdollistavat laitteen iskunkestävyyden. Kameroiden toiminaa tukee myös pohjapainot, jotka avustavat laitteen asettumista oikeaan asentoo. Laitteen ohjelmisto perustuu VLC-, tkinter- sekä paramiko-pythonkirjastoihin, joista VLC vastaa laitteen mediansiirrosta, tkinter käyttäjäympäristöstä sekä paramiko ohjelman SSH-ominaisuuksista.
Rakenne:
Sisärakenne Runkorakenne
Rakennettuna Ulkorakenne
Ohjelmisto
Laite käytössä:
Suunnitteluprosessi:
Suunnittelu
Suunnittelun alkuvaiheissa oli selvää että meillä oli kaksi vaihtoehtoa: luoda laite, jossa kiinteästi asennetut kamerat kuvaavat ja muodostavat yhdessä kokonaiskuvaa ympäristöstä tai laite, jossa yksi liikkuva kamera kuvaa ympäristöä haluttuun suuntaa, joten päätimme tehdä molemmista laitteista raakasuunnitelmat vertailun helpottamiseksi. Tämän lisäksi pohdimme eri vaihtoehtoja rakenteen muodolle: pallo, kuutio, muna, amerikkalainen jalkapallo, kaksitoistatahoka jne. Lopulta päädyimme yksimielisesti tekemään pallon muotoiseen runkoon, joka olisi helposti heitettävissä, kestävä ja yksinkertainen koota sekä staattisiin kameroihin, jolloin mahdolliset vika-alttiiden ja hauraiden osien määrä saataisiin minimoitua.
Prosessointi
Alkuperäinen tietokoneemme (Raspberry Pi Zero W) ei pystynyt prosessoimaan tarvittavaa määrää dataa. Olimme valinneet sen lähinnä koon perusteella ja vain oletimme sen olevan tarpeeksi tehokas tehtävään. Ongelman ratkaisu oli varsin yksinkertainen, mutta prototyypin koko kasvoi merkittävästi. Vaihdoimme suorituskykyisempään tietokoneeseen (Raspberry Pi 3 B+), joka kykeni jopa 4 kameran videokuvan prosessointiin.
Runko
Käytimme rungon luomiseen 3D-tulostusta sen yksinkertaisuuden sekä monipuolisuuden vuoksi. Lisäksi tulostaminen mahdollisti rungon monistamisen testaus- ja varaosakäyttöön. Itse tulostusmateriaalina toimi PLA-Flex, joka antoi rungolle joustavuutta ja iskunkestävyyttä. Muovisen rungon päälle kiinnitimme tueksi ja suojaksi ruostumattomasta teräksestä pallon puolikkaat. Kokeilimme myös kiinnittää metallikuoreen vaahtomuovia, joka paransi laitteen iskunkestävyyttä huomattavasti.
Ohjelmointi
Tarvitsimme prototyypillemme käyttöliittymän, jolla pystyisi näkemään heittokameran videokuvan, äänen ja muut tiedot sekä hallitsemaan sen toimintaa. Päädyimme toteuttamaan ohjelman Python ohjelmointikielellä Windows-käyttöjärjestelmälle käyttäen Tkinter-, VLC- sekä paramiko-kirjastoja. Laitteeseen ohjelmoimme Python ja .sh-skriptejä, jotka mahdollistavat laitteeseen yhdistämisen laitteen käynnistyksen jälkeen.
4G vs Wifi
Jouduimme myös karsimaan toivottuja ominaisuuksia, kuten 4G yhteyden, jonka sijaan käytimme Wifi yhteyteen päätelaitteen ja heittokameran välille. Suurimpia esteitä aiheutti valmiiden ratkaisujen riittämättömyys ja projektin aikataulu. Valmiille lisäpiireillä tiedonsiirtonopeudet eivät riittäisi tarvittavan datan siirtämiseen sekä ”mokkuloiden” käytön estivät niiden iso koko, joka pitäisi sisällyttää jo valmiiksi isoon runkoon. Näiden lisäksi sisätiloissa 4G yhteys ei toimi yhtä vakuuttavasti, kuin wifi yhteys heittokameran ja kannettavan tietokoneen välillä. Vaikka tämä olisi todennäköisesti korjattavissa datansiirron optimoinnilla ja paremmilla antenneilla, ei aikatauluumme mahtunut niiden kehitystyötä.
Videoprosessointi
Datansiirrossakin päädyimme valmiimpaan ratkaisuun lähinnä ajan rajallisuuden vuoksi. VLC oli mutkattomin integrointi projektiimme ja samalla tarpeeksi suorituskykyinen ohjelmisto tarpeisiimme. Käytimme sitä sekä videon, että äänen lähettämiseen päätelaitteellemme. Kokeilimme vaihtoehtoisia ohjelmistoja ja ratkaisuja kuten Gstreamer ja OpenCV, mutta ne eivät vaikuttaneet tuovan merkittävää etua VLC:n suhteen.
Katvealueet
Huomasimme testeissä, että kameroilla on katvealueita, joita voisimme paikata lisäämällä yhden kameramoduulin lisää. Tämä ei valitettavasti ollut mahdollista käyttämämme yhden piirikortin tietokoneen rajallisuuksien vuoksi USB-kameralla, mutta siihen olisi mahdollista liittää moduuli MIPI-liitännän kautta. Katvealueita voitaisiin myös eliminoida käyttämällä liikutettavaa kamerajärjestelmää.
Asennon havaitseminen
Aloitimme orientaation havainnoinnin gyroskoopilla, johon ajureiden löytäminen kulutti aikaamme. Kun viimein saimme lukemia huomasimme, että gyroskooppi ei ole se mitä halusimme. Tavoitteemme oli saada dataa, jolla päätellä miten päin heittokamera laskeutui. Joten liikkeen havainnoivan gyroskoopin sijaan tarvitsimme kiihtyvyysanturin, joka antaisi valmiiksi digitalisoitua dataa ThrowCam:in prosessoivalle tietokoneelle.
Päädyimme visualisoimaan orientaation kahdella yksinkertaisella kuvalla, joista toinen havainnollistaa laitteen keskiakselin kulman ja toinen näyttää ylemmän kuoren korkeimman kohdan.
Ympäristön valaisu
LED-järjestelmä toteutettiin peräkkäin kytketyillä LED-valoilla ja Python koodilla. Toteutimme viisi erilaista valo-ohjelmaa. Aloitimme päälle ja pois vaihtoehdoilla, joista jatkoimme liikkuviin valoihin, himmenevään/kirkastuvaan ja huomioivasti valoja välkyttävään ohjelmiin.
Laitteen hallinta
Toteutimme laitteen hallinnan SSH yhteydellä päätelaitteelta. Tämä helpotti toteuttamista, koska pystyimme pitämään yksittäiset hallintaan liittyvät ohjelmat erillisinä ja tarpeen mukaan ajettavina. Pohdimme myös vaihtoehtoisena ratkaisuna verkkosivu API:n kautta toimivalla hallinnalla, jolloin laitetta voisi hallita itsensä puolella määritellyn rajapinnan läpi. Emme päätyneet kehittämään kyseistä vaihtoehtoa, koska halusimme kaikkien toimintojen toimivan samasta ohjelmasta, saman käyttöliittymän kautta.
Käyttö:
1. ThrowCam käynnistys
Laitteen käynnistäminen onnistuu sujuvasti Raspberry Pi:n alta löytyvästä virtapiiristä,
ennen käynnistystä on hyvä tarkistaa akun lataus. Kuvasta selviää myös miten laite
uudelleen ladataan. Lataamisen ajaksi virtalähde tulee irroittaa muista moduuleista.
2. Yhteyden muodostus päätetietokoneelta
Ennen ThrowCam-ohjelmiston avaamista,
täytyy käyttäjän yhdistää laitteen omaan wifi-verkkoon
“SavoxPi” siihen asetetulla salasanalla
3. Ohjelmiston käynnistys
Ohjelma voidaan käynnistää ThrowCam-kansiosta löytyvällä pikakuvakkeella taikka suorittamalla “ThrowCam.pyw”
tiedosto. Ohjelmiston käynnistämiseen löytyy apua myös “README.txt”-tiedostosta
Ohjelma yhdistyy laitteeseen ja näyttää laitteesta tulevaa videokuvaa sekä ääntä.
Ennen muiden ominaisuuksien käyttöä täytyy käyttäjän yhdistää vielä SSH-yhteys sekä AUS-yhteys
painamalla vastaavia nappeja kyseisessä järjestyksessä
BuoyCam:
Versio ThrowCamista, johon lisäsimme vaahtomovia,
joka paransi laitteen iskunkestävyyttä huomattavasti.
Lisäksi se on tehty myös vesitiiviiksi,
jolloin se kelluu veden pinnalla kuten poiju.
Linkit:
Ryhmän jäsenet:
Lisenssit:
Ohjelmisto: MIT-Lisenssi
Tämä teos on lisensoitu Creative Commons Nimeä 4.0 Kansainvälinen -lisenssillä