Project Pentti
"To boldly go where no webcam has gone before!"
Yleistä projektista
Project Pentti on wlan- tai 3G-yhteyden yli kauko-ohjattava auto.
... älkää kysykö projektin tarkoitusta.
Sana tai pari tekniikasta
Yhteys laitteeseen muodostetaan Internetin (tai paikallisverkon) yli. Yhteysprotokollana toimii TCP/IP, jonka päällä oma satunnainen tekstiprotokolla. Itse ajoneuvossa verkkoliikennettä hoitaa Nokia N810, ja softana häärää hyvin pikaisestä väsätty python-softa. PC-puolella virkaa toimittaa SDL/SDL_net-ohjelma (myös hieman sekalainen värkki.). Itse laitteen ohjausta hallitaan Logitechin Gamepadilla.
Servoja ohjaa PIC16F877/20MHz-mikrokontrolleri, joka on yhdistetty N810:n sarjaväylän kautta. Servoille oikeanlaista signaalia antaa kaksi kontrollerista löytyvää PWM-moduulia. Mikrokontrolleri on hieman ylitehoinen, ja sallisi melko helposti servojen lisäämisen (tosin pitäisi toteuttaa muulla tavalla kuin laitteen pwm-moduulien kautta). Servoina toimii kaksi Hitechin HS-422-lentokoneservoa.
Webcam on logitechin C120, joka käyttää linuxin uvcvideo-ajuria. N810 ei ajuria normaalisti sisällä (kuten ei myöskään käytettyä FTDI:n usb-rs232-muunninta), joten kyseiset moduulit piti kääntää käsin ja ladata laitteelle. Videota streamaa laitteelta uvc_stream-sovellus, ja streami siirtyy mjpeg-muodossa. Nokialaisen USB kontrolleria täytyy käyttää PIO-moodissa, sillä DMA-siirrot ovat rajoitettuja, ja esim. uvcvideo-moduuli ei näillä dma:n rajoituksilla suostukaan toimimaan. Tämä luonnollisesti johtaa siihen, että kaikki siirrot ovat prosessorirajoitteisia, ja toimivin webcamin tarkkuus onkin 320x240, kolmella kuvalla sekunnissa. USB:n kanssa ongelmana oli myös se, että nokialaisessa on vain 1 usb-portti, jonka virtarajoitus host-moodissa on 200mA. Tällä virtamäärällähän ei paljon juhlita, joten oli hankittava erillinen viiden voltin aktiivinen hubi, johon syötetään virtaa samasta akusta josta servot sekä mikrokontrolleri saavat virtansa.
Ongelmia/parannettavaa
- Mikäli N810 ei ole kytketty laturiin, koittaa se kytkeä usb-laitteita virransäästötilaan. Mikäli esim. hubi päästetään kyseiseen tilaan, ei se pääse enää takaisin aktiiviseksi. Ilmeisesti bugi kernelissä (?). Korjaukseksi voisi kelvata se, että syötetään N810:llekin virtaa Pentin omasta virtalähteestä. Ongelmana tässäkin tietenkin se, että syö lisää akkua.
- USB-kontrolleri on rajoitettu DMA-siirtojen osalta, joka rajoittaa webcamin kuvan kokoa ja frameratea.
- Ohjelmistopuoli on raskaasti keskeneräistä. Pitäisi toteuttaa kunnollinen käyttöliittymällä varustettu hallintasofta, joka voisi purkaa kuvastreamia ja skaalata kuvan isommaksi. Voisi samalla myös näyttää muuta tietoa laitteelta (?). Laitteeseenkin voisi tehdä hieman monipuolisemman softan hoitamaan virhetapauksia. Esim. jos kamerasofta pamahtaa, käynnistää se uudelleen. Jos yhteys katkeaa, aloitetaan kuuntelemaan uutta (tai ehkä kuljetetaan laitetta takaisinpäin samaa reittiä niin kauan, että saadaan taas yhteys ?).
- Syö akkua kuin pieni sika!
Sorsat & kernel
Olen tietoinen koodin laadusta. Ei tarvitse sanoa mitään :P
- QT4 asiakasohjelma PC:lle
- QT4 palvelinohjelma servojen ohjaukseen N810:lle
- C-kielinen softa mikrokontrollerille
N810:lle tekemäni kernel-image sekä moduulit löytyvät täältä. EN TAKAA NÄIDEN TOIMIVUUTTA! JOS LAITTEESI HAJOAA TAI KIELTÄYTYY TOIMIMASTA, SE ON OMA VIKASI!
Muuta
Kiitokset #naapurinpoika (@IRCNet) -kanavalle kameran testailussa auttamisesta, sekä Tommi Teistelälle kameran lainaamisesta laitteen videokuvaamiseen Youtubea varten.
Mediaa
Youtubessa:






