Styra hårdvara med Linux

Ofta så följer det med mjukvara för att styra hårdvara när man köper olika typer av produkter.

Windows? Absolut!
OS X? I bland!
Linux??

Drivrutiner är något man är van vid om man använder Windows. I princip allt kräver drivrutiner av något slag. Eftersom det inte finns några drivrutiner anpassade för Linux med prylar man köper, så är det lätt att tro att dessa inte fungerar med Linux.

Linux fungerar dock lite annorlunda. Väldigt många ”drivrutiner” är inbyggda direkt i kärnan (kernel). Det är inte ”Samsungs” drivrutin med program för att hantera utskrifter med speciella molnfunktioner och extra mjukvara som skall ”förbättra” upplevelsen av en skrivare. Utan stöd för en protokollstandard eller ett specifikt ”chip” som inte är exklusivt för just Samsungs skrivare.

Linux kan därför hantera en väldigt stor mängd hårdvara helt utan att behöva installera speciella drivrutiner, då många leverantörer använder samma chip för att exempelvis bygga nätverkskort. Det man inte får med, är garantier för att det skall fungera eller de stödprogram som också brukar följa med. Det skulle kunna vara ett enkelt videoredigeringsprogram som följer med ett videokort, eller ett program som lägger till kattansikten på alla som syns i en webbkamera. Väldigt användbart…?

Nåja. I detta inlägg tänkte jag dokumentera lite stöd för GPS och vanliga Kameror direkt i Linux där jag använder terminalen för att kommunicera med dem. Detta kan man sedan klä på med skript och användargränssnitt om man vill.

GPS

Nu för tiden är GPS med USB anslutning det vanligaste, men ofta så simuleras en seriell port på ett eller annat sätt ändå, vilket normalt följer en standard. Såvida man inte heter Garmin.

Garmin har sitt eget protokoll för att kommunicera seriellt även om många mottagare går att ställa in för andra protokoll. Linux har ett inbyggt stöd för garmin_gps men i min erfarenhet så fungerar detta ganska dåligt. Detta är ett känt problem, så många som utvecklar mjukvara för GPS bygger in eget stöd för Garmin i sina program. Därför är stödet i kärnan oftast ”avstängt” från start.

Har man ett system där man vill prova Garmin GPS och det inte verkar fungera direkt, så kan man prova att slå på stödet för Garmin i kärnan.

sudo modprobe garmin_gps

För att slå av stödet i kärnan så ger man ett motsvarande kommando.

sudo modprobe -r garmin_gps

Jag har sällan haft speciellt god framgång med Garmin GPS, så här använder jag andra lite enklare GPS mottagare i form av ”loggers” som även kan fungera som datoransluten GPS via USB (Qstarz XT-1000).

När jag ansluter denna så fungerar det direkt!

Jag använder gpsd och gpsd-clients som installeras på vanligt sätt. Sedan behöver jag faktiskt inte göra någonting då gpsd känner av att det finns en GPS på USB porten och börjar servera positionsdata till systemet.

skarmbild_2017-03-05_08-26-13

Det är bara att starta en gpsd klient som cgps eller xgps och börja titta på data.

Kamera

Nu är jag inte så intresserad av att titta på GPS data på skärmen, utan jag vill kunna georeferera bilder i kameror som inte har inbyggd GPS.

Va! Går det?

Ja det kan det göra, om den kamera man ansluter följer en viss standard där det finns stöd för positionering inbyggt. Något som kan skvallra om detta är att kameran kan fjärrstyras från en app där bilder geotaggas från telefonens positionering.

Programmet gphoto2 kan hantera över 2300 kameramodeller och de flesta av dessa via Picture Transfer Protokol – PTP (länk).

Skärmbild_2017-03-05_08-50-48.png

Den kamera jag använder går att skriva GPS information till på adress 0xd801, vilket inte verkar vara återanvändbart för andra kameramodeller, så man får forska lite.

Jag kan nu via gpsd hämta positionsdata med i mitt fall gpspipe och sätta samman den informationssträng som beskrivs i bilden ovan. Skicka strängen till kameran med gphoto2 och sedan använda ännu ett kommando via gphoto2 för att fånga en bild och ladda ner bilden via kabeln till datorn.

Den hämtade bilden har då gpstaggar i EXIF informationen.

Det finns massor med små Linuxdatorer, som RaspberryPi där det går att ansluta såväl GPS som kamera via USB, eller som till och med har inbyggd GPS. Jag har byggt ett system baserat på RaspberryPi med en knapp som fångar bilden och där samtliga bilder sparas till ett anslutet USB minne i stället för i kamerans internminne.

Man skulle kunna tänka sig att ha en liten ansluten dator med GPS som kontinuerligt skriver positionsdata till kameran, medan foton fångas som vanligt i kameran, med skillnaden att dessa bilder nu blir geotaggade.

En del kameratillverkare har egna lösningar som utför i princip detta. Exempelvis för Nikon finns det GPS mottagare som fästs i blixtskon och som ansluts med kabel till kameran. Nikons egen version kostar runt 2’500 kr så är det bara just denna funktionalitet man är ute efter så finns det kommersiella lösningar för många kameramodeller, men inte till min.

Slutsatser

Det går att göra väldigt mycket med Linuxsystem och hårdvara! Men man får jobba lite för det. Vad kan det däremot vara värt att skapa ett skräddarsytt system som löser just den där speciella arbetsuppgiften som annars hade tagit så väldigt lång tid?

  1. Synka tid i kamera och GPS
  2. Ta alla bilder
  3. Logga alla positioner
  4. Läs över bilder och loggar till dator
  5. Använd mjukvara för att ”synka” bilder mot position
  6. Hoppas att inte synkningen är fel.

Jag behöver bara utföra steg 2 i listan ovan.

Annonser

Taggar:, ,

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: