Viimane projekt, millest siin kirjutasin (Arvutist juhitav, mobiilse võrguga auto) sai küll mingil etapil “valmis” aga peale mida jäi asi kohe ka nurka seisma. Võtan siin korraks viimase seisu sellega kokku ja siis teen kohe postituse uuest, seekord päriselt valmis projektist.

Uus auto platvorm

Ühesõnaga, autoprojekt. Ei jõudnudki siin kajastada, et mispärast see üldse ette võetud sai. Niisiis siit ta tuleb:

Esimene plaan oli, et teeks enese harimiseks lihtsalt midagi lõbusat: lammutaks puldiga auto laiali ja teeks niimodi, et seda saaks arvuti teel juhtida. Loomulikult kaamerapildi abil. Idee sündis muide poes, Prismas, juhuslikult eksinuna puldiga autode riiuli juurde. Krabasin (ok, ostsin) auto kaasa ja läksin koju ehitama. WiFi pulka kodust ei leidnud aga oli üks 3G USB modem üle. Sellest arenes idee, et ohoh, teekski siis nii, et mitte WiFi, vaid 3G – näiliselt: jäta auto metsa ja juhi ise kodust. Mis edasi juhtus, saab juba varasematest postitustest näha. Kuhu aga projekt lõpuks jõudis, millest siin kajastada ei jõudnud?

Vahepeal ütlen GStreamer FTW! Tänaseni kõige optimaalsem lahendus Raspberry pealt kaamerapilti edastada. Kui keegi on täna küsimuse ees, et millega hardware accelerationi tuge kasutada ja Raspberryst kaamera pilti saata, siis, vähemalt veebruar 2017 seisuga, ärge nähke vaeva: midagi Gstreamerist asjalikumat veel ei ole. Õnneks on mõned lahendused work in progress.

Idee edasine versioon tekkis töökaaslasega spontaanselt tekkinud ajurünnakul. Teha sarnaseid autosid 4-5tk, ehitada neile oma rada, asendada 3G ikkagi kiire WiFiga ja lasta inimestel üle veebi nendega mängida. Ehk siis nagu arvutimäng aga päris graafikaga ja päris füüsikaga. Põnev! Selleks saigi VÄGA kriitiliseks omaduseks seatud videopildi as-realtime-as-possible edastamine. Ei taha keegi mängida nii, et kurvi pööramist peab alustama sekund varem ja kui maha magad, kütad autoga seina. Teine, natukene vähetähtsam omadus, mida paraku tollaste vahenditega lahendada ei saanudki, oli seda kõike teha brauseriaknas: nõnda sai küll alustatud ja asi ka esialgselt toimima aga videopildi viivitusest veebitehnoloogiatega jagu ei saanud.

Tehniliselt: Ilmselgelt jäi lukku üle UDP pildi saatmine, TCP overhead on saatanast. Pildi edastamine ja juhtimine läbis sellise teekonna: Auto saadab pildi serverisse saksamaal, klient avab ühenduse serveriga, võtab vastu pildi ja edastab läbi serveri autole käske. Klient tähendas tollal sisuliselt .NET rakendust mis tõmbas taustal käima Gstreameri instantsi ning avas suhtluse serveri ja kliendi vahel. UDP video jaoks ja TCP stream käskude jaoks. Tekkis eraldi Gstreameri aken videoga, mille viivitus muuseas oli isegi läbi saksamaa serveri, alla 80 millisekundi. Rakenduse enda aken jäi kuulama klaviatuuri sisendit (nooleklahvid juhtimiseks, SHIFT nupu all hoidmine aeglase sõidu jaoks). Serveris kogu backend Node.JS ja autos kogu juhtimine samuti Node.JS peal. Toimis! Tehniliselt täiesti suurepäraselt toimis. Nagu päris. Küll eraldi allalaetava rakenduse abil, mitte läbi brauseri, aga toimis.

Vaimustus läks aga üle, kui leidsin ennast mõttelt, et neid masinaid oleks vaja 4-5tk teha, et ideega edasi minna. Esiteks hakkas mind kohutavalt häirima selle odava auto platvorm – pöördemehhanism… ah, mis pöördemehhanism… kogu auto platvorm oli jamps! Hakkasin eBays surfima ja uut platvormi otsima. Mitte midagi asjalikku ei leidnudki. Et sõitmine toimiks nagu vaja, peaks olema platvorm natukene kõrgem, tagaveoline ja korraliku pöördemehhanismiga. Kõik odavamad olid kas 4×4 robotiplatvormid, kus pööramine toimub ühe poole rataste vastupööramisega ja mis ei sobi kuidagi või siis samasuguse juustuse esisilla ehitusega, nagu minu praegune. Kõik kallimad olid aga sellise hobiprojekti jaoks liiga kallid ja disaini poolest keerulised, et sinna viisakalt Raspberry ja kolakas akupank veel peale aretada.

Kaks aastat hiljem leidsin siiski midagi, mis võiks juba natukene lubada:

Uus auto platvorm

Pole veel proovidagi saanud aga nüüd juba mõtlen, et ILMSELT tahaks saada ka vedrustust või siis vähemalt optilise stabilisaatoriga kaamerat. Eksole. Ei tea. Kui kokku saab, eks selgub. Kui on vaja, siis läheb asi jällegi liiga kalliks.

Äkki tuleks asi Open Source projektiks muuta ja Donate nupp lisada? ;)