Wegens aanhoudende discussie over opencpn op de raspberry heb ik een poging gedaan een installatie te simuleren.
Voorlopig beperkt dit zich tot opencpn, maar zygrib enzo zullen later ook nog wel aan bod komen om uit te zoeken of dit bordje nu aan boord een praktisch nut kan hebben of niet.
Let wel op, dit is een persoonlijk verhaal met persoonlijke keuzes. Dit is geen bijbel maar alvast, happy reading. Hier gaan we.
Er wordt veel geschreven en gediscussieerd over het gebruik van een Rasperry Pi aan boord.
Wat is een Raspberry eigenlijk?
Als je een pi koopt, koop je eigenlijk niet meer dan een printplaatje waar alles op zit. Een volledige pc die op 1 printje past lijkt toch te mooi om waar te zijn.
Even inzoomen waarom dit interessant kan zijn voor de botenwereld.
Eerst en vooral, de prijs. Op dit ogenblik kost een Rasperry Pi (model
$35 + shipping costs. Op zich is dit erg goedkoop. Daar moet nog wel een keyboard, muis, scherm, gpsmuis,… bij. Echter het totaalplaatje blijft echter zeer goedkoop.
If you pay little, you get little. Dus ook zal je ‘t moeten doen met 512MB ram, een arm gebaseerde processor die standaard op 700Mhz loopt en een gpu (grafische processor) die krachtig genoeg is om HD op een tv toestel af te spelen.
Dan krijg je nog een paar usb poorten en basicly dan hebben we de belangrijkste componenten wel gehad.
Op
www.raspberrypi.org/ vinden we dan een plaatje hoe het ding er eigenlijk echt uitziet.
Image courtesy of Switched On Tech Design (
www.sotechdesign.com.au)
Inderdaad, het bordje heeft geen harde schijf, geen aan/uit knop etc. De software gaat op de SD card, die kan je ook zelf maken/voorbereiden en aan/uit, dat is eenvoudig, gewoon stroom of geen stroom.
Als we ‘t over stroom hebben, hebben we het ook over de grootste troef van dit bordje. Het verbruik. Op dit moment heb ik nog geen pi ter beschikking maar forums, internet zijn heel lovend over het verbruik.
Raspberry Pi loopt op 5v micro USB. Maximaal kan de Pi 1A verwerken, maar dan moet je ‘m wel voeden met een usb hub die aan de stroom hangt.
Kunnen we nu ook effectief iets doen met dit bordje? Er is al veel over geschreven en gebabbeld maar een consensus is blijkbaar moeilijk te vinden.
Op dit moment heb ik geen Pi (na nieuwjaar wel ☺ ) dus heb ik een emulator op mijn pc die de arm processor simuleert.
Daarvan zijn massa’s guides te vinden op internet over hoe een emulator te bouwen en zou ons hier te ver brengen.
Als OS voor de PI-simulatie heb ik voor raspbian gekozen. Waarom? Persoonlijke voorkeur. Dit is een gestripte en voor arm gebaseerde pi debian linux distributie. De anderen zullen waarschijnlijk ook wel werken, echter (nog) geen ervaring mee.
Hieruit zien we dat als we de Pi opstarten in emulatie, dat hij wel degelijk gebruik maakt van de arm architectuur en ook raspberry arm kernel.
Nu OpenCpn. Out-of-the-box, vergeet het. Dat is echt een no-go. Dus moeten we onze versie zelf bouwen.
Eerste stap is altijd de handleiding lezen. Dus die vinden we hier:
opencpn.org/ocpn/compiling_source_linux
Staat veel bruikbaar in. Bvb de prerequisites. Die zijn sowieso nodig, dus die kunnen gewoon overgenomen worden en dat werkte ook direct. Geen problemen hier. Alles zat netjes in de linux repository. Misschien dat hier en daar nog optimizaties mogelijk zijn, moet verder bekeken worden. Nu focussen op “getting it running”.
Git clone is ook vrij standaard, geen problemen tegengekomen. So far so good, dus de source code is binnen.
Eigenlijk is het niet moeilijk, builden heb ik (in laatste poging) gedaan voor met native flag en nog een paar andere.
Uiteindelijk is de build volgens de opencpn site vrij rechttoe rechtaan en na de installatie zelf, start het programma ook op. Klinkt veel belovend!
Na de opstart moet je de kaarten toevoegen. Ondertussen zal iedereen wel weten hoe dit werkt, dus gaan we niet dieper op in.
Ik beschik over een versie CM93 kaarten (1,4GB) en vanaf deze geselecteerd werden gebeurt er … niks. Geen kaarten, overzoom, inzoomen, … niks. Logfiles blijven leeg en tonen enkel dat de kaarten goed ingelezen worden. Wat is hier toch aan de hand.
Verder uitzoeken leert dat cpu verbruik gigantisch de hoogte in gaat vanaf de kaarten gelezen worden. Dus dat wijst richting de code. De manier van zoeken zal ik jullie besparen, maar voor deze kaarten zat het probleem in cm93.cpp. Eigenljk zat er geen fout in, ik zou de code ook zo schrijven, maar na een waarde vast te zetten ipv dynamisch op te halen, kreeg ik na een hercompilatie plots een kaart te zien na ongeveer 1 seconde. Traag maar werkbaar.
Volgende test. Detail toevoegen. Ik selecteer in OpenCpn volgende opties:
Dit lijkt ook te werken aan redelijke snelheid, dus gaan we zoomen om bvb een haven te kunnen aanlopen. Want schaal 1754100 is nu niet echt bruikbaar. Echter, vanaf er dieper gezoomd dient te worden, crasht heel opencpn er gewoon volledig uit. Eerst geprobeerd met swapfiles etc maar desondanks dat voor een goeie werking de swap van het systeem toch groter moet zijn dan de standaard 100MB (ik heb deze vergroot naar 1GB) en overclocken etc, niks helpt. Dit moet dus ook weer in de code zitten. Zoals gewoonlijk, niks in de logs, geen dumps,… op zoektocht dan maar.
Na een lange zoektocht blijkt dat veel van de “problemen” in de wxwidgets zitten die opencpn gebruikt. OpenCpn heeft minstens 2.8 nodig. Heb de originele versie niet bijgehouden, maar sinds 11 november 2013 is versie 3 “current en stable”. Er is niks dat op performance degradatie kan wijzen, dus het kan enkel beter worden. Na een nachtje builden op de emulator zijn de widgets ook geupgraded naar de laatste versie.
Echter opencpn heeft hardcoded verwijzingen naar de versies van deze widgets. Deze moeten dus vervangen worden en een paar methods moeten ook aangepast in een 3 tal cpp-files. Eigenlijk voornamelijk slordigheden in de programmatie. Bvb checks die overbodig zijn, casts die ontbreken, dat soort dingen.
Anyhow, na aanpassingen in de code de opencpn opnieuw gebuild (duurt een kleine 2uur op emulatie) en inderdaad! We krijgen kaarten te zien en kunnen zoomen binnen de seconde! Dit is traag maar bruikbaar.
Missie geslaagd? Niet volledig. Dit is verre van af. Deze installatie maakt bvb nog geen gebruik van de OpenGL. Dit zorgt voor foutmeldingen bij ‘t opstarten. Mits juiste glx-versie natuurlijk wel op te lossen.
Volgende uitdaging is de gpsd ook aan de praat krijgen, echter zal dat volgens mij niet lukken op emulator (alhoewel ☺ ) maar eerst deze build eens op een echte Pi proberen. Na de glx problemen zijn opgelost.
Samengevat, de Raspberry Pi is een leuk stuk hardware! De arm-achitectuur maakt het natuurlijk net dat ietsje moeilijker.
Is het mogelijk opencpn aan werkbare snelheid te krijgen? JA! En eens niet zo erg moeilijk als je ‘t weet.
Is het voor iedereen weggelegd? Ik zou zeggen neen. Er zijn veel eenvoudiger manieren om navigatie op een energiezuinige pc te zetten. Dit werkt nu, maar hoe gaat dit zich gedragen als het gepatched/upgegraded wordt? Deze installatie lijkt in niks op de builds die OpenCpn zelf aanlevert.
Dat neemt niet weg dat het een zeer leuk knutselprojectje is en als toevoeging op de navigatie kan het zeker dienen en als overzichtskaart zou ik het zelfs bij mij aan boord durven gebruiken. Echter enkel als aanvulling, nooit als primaire navigatie. Daarvoor is (op dit moment) nog teveel knutselwerk mee gemoeid om in geval van, je leven ervan te laten afhangen.