PROJEKTRAPPORT. Grupp 2 Version 0.1 2014-05-13. Granskad Alla 2014-05-13 Inspekterad Alla 2014-05-13 TDDD77



Relevanta dokument
Institutionen för datavetenskap Department of Computer and Information Science

Filhanterare med AngularJS

LiTH Autonom styrning av mobil robot Projektplan. Martin Elfstadius & Fredrik Danielsson. Version 1.0

LiTH. WalkCAM 2007/05/15. Testplan. Mitun Dey Version 1.0. Status. Granskad. Godkänd. Reglerteknisk projektkurs WalkCAM LIPs

Preliminär specifikation av projekt

Kravspecifikation. LiTH Segmentering av MR-bilder med ITK Anders Eklund Version 1.0. Status

LIPs Daniel Axehill ChrKr Projektdirektiv_Saab_v3 CKr

BESKRIVNING AV PROCESSMETODEN SCRUM

Projektplan. LiTH Segmentering av MR-bilder med ITK Anders Eklund. Version 1.0. Status. Bilder och grafik projektkurs, CDIO MCIV LIPs

Cargolog Impact Recorder System

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

Goda råd till de som ska utföra ett liknande projekt (från KMM 2016)

Exempel på verklig projektplan

Introduktion till programmering och Python Grundkurs i programmering med Python

LiTH Segmentering av MR-bilder med ITK Efterstudie MCIV. Anders Eklund. Status

Utveckling av ett grafiskt användargränssnitt

Projektplan, Cykelgarage

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Projektdirektiv Oskar Ljungqvist Sida 1. Kund/Examinator: Daniel Axehill, Reglerteknik/LiU

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Före Kravspecifikationen

Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

TDDC74 - Projektspecifikation

Programmering i C++ Kompilering från kommandoraden

GRUPP5. Projektplan. DigiMergo Editor. Version 0.2. Martin Bodin Status. Status Namn Datum Granskad Martin Bodin Godkänd

Labbrapport - LEGO NXT Robot

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Efterstudie. LIPs. LiTH Autonom styrning av mobil robot Martin Elfstadius. Version 1.0. Status. TSRT71-Reglertekniskt projektkurs

Projektet. TNMK30 - Elektronisk publicering

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Robotgräsklippare PROJEKTPLAN. Robotgräsklippare. Version 1.1. Status. Granskad. Godkänd. Robotgräsklippare.

Projektplan. LiTH Reglering av Avgaser, Trottel och Turbo Fredrik Petersson Version 1.0. Status. Reglerteknisk Projektkurs RATT LIPs

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Projektplan. LiTH AMASE Accurate Multipoint Acquisition from Stereovision Equipment. Johan Hallenberg Version 1.0

SLUTRAPPORT WEBBPROJEKT 1

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Webservice & ERP-Integration Rapport

Uppdragsbeskrivning. Paddel-appen Utmärkta kanotleder. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.

Linköpings universitet 1 TDP029. Systemutveckling. Systemutveckling. Vanliga faser. Fler faser. Systemutvecklingsmetod

TPFD - TestPlan Före Design BESKRIVNING AV AKTIVITETER

TDDI02. På denna föreläsning: Programmeringsprojekt, Föreläsning 1. Kursinformation Vad är Software Engineering? Hur går ett projekt till?

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

Universe Engine Rapport

Undervisningen i ämnet mobila applikationer ska ge eleverna förutsättningar att utveckla följande:

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Föreläsning 2. Operativsystem och programmering

Projektuppgift.

Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson

Kravspecifikation för hårdvaruprojekt i kursen Datorsystemteknik, HT2005. Temperaturvakt med loggningsfunktion

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Konstruktion av en radiostyrd legobil. Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia

Mina listor. En Android-applikation. Rickard Karlsson Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.

Projekt Fake för Virtutech

Idrottsapen. 1. Inledning. 2. Mål och syfte. 3. Projektbeskrivning

Labrapport över Rumbokningssytemet Grupp:1

HAND TRACKING MED DJUPKAMERA

SCRUM. Vattenfallsmodellen. Analys. Design. Kod. Test. Rational Unified Process Agile. Kallas också linjär sekventiell modell.

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning

LiTH, Reglerteknik Saab Dynamics. Testplan Collision avoidance för autonomt fordon Version 1.0

Laborationsrapport av robotprogrammering

HejKalmar app. Projektrapport. Webbprojekt I

Kurs-PM fo r HI1028, Projektkurs inom programvaruutveckling, VT16

TDDI02. Programmeringsprojekt, Föreläsning 1. Filip Strömbäck. Med utgångspunkt i tidigare slides av Jonas Lindgren

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg niklas.broberg@chalmers.

Laboration i datateknik

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

SKOLFS. beslutade den -- maj 2015.

Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling

PROJEKT ALBYLEN. Datum: 25 mars AV: Magnus Lindgren, Mattias Jonsson, Alexander Paskota, Jimmie Yngvesson, Erik Nilsson

SCRUM. Marcus Bendtsen Institutionen för datavetenskap

Undervisningen i ämnet programmering ska ge eleverna förutsättningar att utveckla följande:

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund Marcus Widblom Senast ändrad: 13 / 05 / 08

SKOLFS. beslutade den XXX 2017.

Introduktion till programmering. Programspråk och paradigmer

Efterstudie. Redaktör: Jenny Palmberg Version 1.0. Status. LiTH Fordonssimulator. Granskad Godkänd. TSRT71 Jenny Palmberg

Robotar i NXc. En laboration med Mindstormrobotar. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

1. (3p) Inom MDI-området framhåller man att människor lär sig via metaforer. Hur menar man att detta går till?

Uppdragsbeskrivning. Google Glass. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.

Introduktion till programmering med hjälp av Lego Mindstorm

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

Laboration i datateknik

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

Några grundläggande begrepp

Projektmetodik II. HF1005, Informationsteknik och ingenjörsmetodik för Datateknik. Projektarbete

Javautvecklare. Utbildningsfakta. 400 YH-poäng, 2 år

ANVÄNDAR MANUAL. SESAM 800 RX MC Manager

Webbserverprogrammering

Systemskiss. LiTH AMASE Accurate Multipoint Acquisition from Stereovision Equipment. Jon Månsson Version 1.0

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Inledande programmering med C# (1DV402) Introduktion till C#

Kravspecifikation Fredrik Berntsson Version 1.1

Slutrapport YUNSIT.se Portfolio/blogg

Synkronisering av kalenderdata

TDDC74: Projekttitel

Introduktionsmöte Innehåll

1. Mätning av gammaspektra

Transkript:

PROJEKTRAPPORT Grupp 2 Version 0.1 Granskad Alla 2014-05-13 Inspekterad Alla 2014-05-13 2014-05-13 TDDD77 Grupp 2

PROJEKTIDENTITET Grupp 2, 2014/VT, Bertilsson Mät & Flyg Linköpings tekniska högskola Namn Ansvar Telefon E-post Erik Bertilsson Teamleader 072-3177011 eribe420@student.liu.se Daniel Andersson Specialist 070-6758430 danan391@student.liu.se Alfred Axelsson Testledare 070-3391961 alfax262@student.liu.se Viktor Danielson Analysansvarig 070-5542900 vikda992@student.liu.se August Ernstsson Arkitekt 076-7710605 auger887@student.liu.se Anders Gustafsson Dokumentansvarig 070-7765866 andgu611@student.liu.se Simon Mehari Utvecklingsledare 076-1875608 simme562@student.liu.se Hampus Tjäder Kvalitetssamordnare 070-2611617 hamtj020@student.liu.se Kund och kontaktperson: Magnus Gårdestig, magnus.gardestig@liu.se Kursansvarig: Kristian Sandahl, B 3B:470, 013-28 19 57, kristian.sandahl@liu.se Handledare: Alexander Widerberg, 076-347 16 40, alexander.widerberg@liu.se Kandidatprojekt i programvaruutveckling i Projektrapport

Förord Till att börja med vill vi rikta ett stort tack till alla involverade personer. Utan dessa hade projektet inte varit möjligt att genomföra. Först och främst är vi tacksamma för möjligheten att genomföra detta projekt samt för det goda samarbetet och det vänliga tillmötesgåendet från vår beställare Magnus Gårdestig. Vi vill även tacka vår handledare Alexander Widerberg som med sin kompetens väglett och stöttat oss genom hela projektet. Kandidatprojekt i programvaruutveckling ii Projektrapport

Innehåll 1. Introduktion... 1 1.1. Bakgrund... 1 1.2. Motivering... 1 1.3. Syfte... 1 1.4. Mål... 2 1.5. Frågeställning... 2 1.6. Definitioner... 2 1.7. Rapportens struktur... 3 1.8. Avgränsningar... 3 2. Teori... 4 2.1. Gammaspektrometri... 4 2.2. Trådlös kommunikation... 4 2.2.1. AV-länk... 4 2.2.2. Digital modulation... 5 2.2.3. Synkronisering... 5 2.2.4. Kanalkodning... 5 2.3. Utvecklingsmetodiker... 6 2.3.1. SEMAT... 6 2.3.2. Scrum... 6 2.3.3. Extreme Programming... 7 3. Metod... 8 3.1. Arbetsmetoder... 8 3.1.1. SEMAT... 8 3.1.2. Scrum... 8 3.1.3. Extreme Programming... 8 3.2. Iterationer... 8 3.2.1. Förstudie... 9 3.2.2. Utveckling... 9 3.3. Utvecklingsmiljöer, verktyg och programmeringsspråk... 10 3.4. Prototypning... 10 3.5. Testning... 11 3.6. Kandidatarbete... 11 4. Systembeskrivning... 12 4.1. Arkitektoniska mål... 12 Kandidatprojekt i programvaruutveckling iii Projektrapport

4.1.1. Moduluppbyggnad... 12 4.1.2. Paketindelning... 12 4.1.3. Anpassningsmöjligheter... 12 4.2. Val och begränsningar... 12 4.2.1. Utvecklingsmiljö och API... 12 4.2.2. Gammaspektrometer... 12 4.2.3. Radiokommunikation... 13 4.2.4. GPS... 13 4.3. Moduluppdelning... 13 4.4. Datainsamlingsmodul... 13 4.4.1. Beroenden... 13 4.4.2. Programstruktur... 13 4.4.3. Arkitektur... 14 4.5. Kommunikationslänk... 14 4.5.1. Beroenden... 14 4.5.2. Programstruktur... 14 4.5.3. Arkitektur... 14 4.6. Markenhet... 15 4.6.1. Beroenden... 15 4.6.2. Användargränssnitt... 15 4.6.3. Programstruktur... 16 4.6.4. Arkitektur... 16 5. Gruppens tekniska erfarenheter... 16 5.1. Utvecklingsmiljö och verktyg... 16 5.1.1. Utveckling i C#... 16 5.1.2. Utveckling i C... 17 5.1.3. Prototypning i Python... 17 5.2. Hårdvara... 18 5.2.1. Gammaspektrometern Kromek GR1... 18 5.2.2. AV-länk... 18 6. Gruppens processrelaterade erfarenheter... 19 6.1. Planering... 19 6.1.1. Aktiviteter... 19 6.2. Dokument och standarder... 19 6.3. Inspektioner... 20 6.3.1. Inspektion av dokument... 20 Kandidatprojekt i programvaruutveckling iv Projektrapport

6.3.2. Inspektion av kod... 20 6.4. Arbete i grupp... 20 6.4.1. Möten... 20 6.4.2. Arbetsfördelning... 21 6.4.3. Närvaro... 21 6.4.4. Konflikter... 21 6.5. Kundrelation... 22 6.6. Tredje part... 22 6.7. Utvecklingsmetodik... 22 6.7.1. Extreme Programming... 22 6.7.2. Versionshantering... 23 6.7.3. Prototypning... 23 6.7.4. Testning... 23 7. Individuella bidrag och erfarenheter... 24 7.1. Daniel Andersson... 24 7.1.1. Erfarenheter... 24 7.1.2. Diskussion... 25 7.2. August Ernstsson... 27 7.2.1. Erfarenheter... 27 7.2.2. Diskussion... 29 7.3. Erik Bertilsson... 30 7.3.1. Erfarenheter... 30 7.3.2. Diskussion... 32 7.4. Alfred Axelsson... 33 7.4.1. Förstudie... 33 7.4.2. Erfarenheter som testledare... 34 7.5. Viktor Anderson... 35 7.5.1. Erfarenheter... 35 7.5.2. Diskussion... 36 7.6. Simon Mehari... 37 7.6.1. Status och rapport... 37 7.6.2. Arbetsuppdelning... 38 7.6.3. Hinder och svårigheter... 38 7.6.4. Inlärt... 38 7.7. Hampus Tjäder... 40 7.7.1. Erfarenheter... 40 Kandidatprojekt i programvaruutveckling v Projektrapport

7.7.2. Diskussion... 41 7.8. Anders Gustafsson... 43 8. Diskussion... 44 8.1. Metod... 44 8.1.1. Scrum... 44 8.1.2. SEMAT... 44 8.1.3. Parprogrammering... 44 8.1.4. Iterationer... 44 8.1.5. Aktivitetshantering... 44 8.1.6. Rummet... 44 8.1.7. Visual Studio... 45 8.1.8. Prototyp... 45 9. Slutsats... 46 9.1. Återkoppling till syfte och frågeställningar... 46 Referenser... 47 Kandidatprojekt i programvaruutveckling vi Projektrapport

Dokumenthistorik Version Datum Utförda förändringar Utförda av Granskad 0.1 2014-05-13 Dokumentet skapat Alla Alla Kandidatprojekt i programvaruutveckling vii Projektrapport

1. Introduktion Följande arbete är ett examensarbete på kandidatnivå utfört av en grupp på åtta studenter vid Tekniska högskolan vid Linköpings universitet. Roll Primär Sekundär Teamledare Erik Bertilsson Anders Gustafsson Analysansvarig Viktor Danielson Erik Bertilsson Dokumentansvarig Anders Gustafsson August Ernstsson Arkitekt August Ernstsson Simon Mehari Hårdvaruspecialist Daniel Andersson Viktor Danielson Utvecklingsledare Simon Mehari Daniel Andersson Testledare Alfred Axelsson Hampus Tjäder Kvalitetssamordnare Hampus Tjäder Alfred Axelsson Tabell 1: Medlemmar och roller 1.1. Bakgrund Sveriges beredskap vid spridning av joniserande, radioaktiva eller nukleära ämnen leds av Stra lsäkerhetsmyndigheten. Sju beredskapslaboratorier spridda över landet bista r med mätresurser och stra lskyddsexpertis. Beredskapslaboratoriet i Linköping har utvecklat ett mätsystem för obemannad luftburen radiometri, för detektion och identifiering av strålkällor. Mätsystemet är monterat på ett autonomt luftburet fordon och består av en gammaspektrometer, en liten Windowsdator och ett datorprogram för att visualisera mätdata. Detta system gör det möjligt att mäta strålkällor i svår terräng och på platser där det sedan tidigare är känt att skadlig strålning förekommer utan att utsätta personal för några risker. 1.2. Motivering Då en människa inte kan avgöra om ett ämne är radioaktivt är det svårt att identifiera strålkällor utan hjälp av mätutrustning. Denna typ av utrustning finns idag tillgänglig på marknaden. Det krävs dock att en människa måste vara i direkt kontakt med utrustningen för att utföra en mätning. Detta gör det problematiskt att genomföra en mätning i svår terräng samtidigt som det utsätter personal för direkt kontakt med eventuella strålkällor. 1.3. Syfte Syftet med examensarbetet är att lära sig att genomföra ett programutvecklingsprojekt under realistiska förutsättningar och därigenom få erfarenheter som är relevanta för yrkeslivet. Projektets syfte är att utveckla ett system för obemannad luftburen mätning av radioaktiv strålning, så kallad gammaspektrometri, bestående av en detektor tillsammans med en enkortsdator som fästs på en obemannad luftfarkost. Denna del av systemet kommunicerar sedan via en kommunikationslänk med en persondator på marken. Datorn kör ett program med ett grafiskt gränssnitt som används för att analysera mätdata. Kandidatprojekt i programvaruutveckling 1 Projektrapport

1.4. Mål Då dagens system anses vara för tungt har ett lättare mätsystem efterfrågats för att få längre batteritid och därmed möjliggöra längre mätningar. Vid längre mätningar ställs högre krav på systemets räckvidd. Utöver detta önskas även ett nytt datorprogram med grafiskt gränssnitt där data uppdateras och presenteras i realtid. 1.5. Frågeställning Kan man bedriva ett mjukvaruprojekt med en metodik bestående av delar ur SEMAT, Scrum och Extreme Programming? För att bedriva ett mjukvaruprojekt krävs att hela gruppen använder en för uppgiften relevant metodik, samt att alla medlemmar vet hur det fungerar. Vi vill undersöka om det går att välja delar ur flera olika metodiker för att skapa en kombination som passar för mjukvaruutveckling. Går det att bygga ett datorsystem för gammaspektrometri som väger under 100 gram? Genom att ha ett litet och lågviktigt system går det att applicera systemet i många olika miljöer och situationer. Det befintliga systemet anses väga för mycket och behöver därför bytas ut för att förlänga batteritiden i systemet och möjliggöra mätningar över längre sträckor än tidigare. 1.6. Definitioner Definitioner som används i rapporten listas i tabell 2. UAV.NET Windows Forms GMap.NET API GCC Clang XML N42 FPV SDI pico-itx Unmanned Aerial Vehicle: obemannad luftburen farkost. Ett ramverk för att bygga och exekvera program i Windows. Bibliotek för att programmera grafiska gränssnitt i.net-ramverket. Ett.NET-bibliotek för kartor. Application Programming Interface: gränssnitt för att programmera mot annan programvara. GNU Compiler Collection: en samling av kompilatorer för olika programmeringsspråk. Kompilator för C-relaterade språk. Extensible Markup Language: ett märksspråk för att strukturera information. XML-baserat dataformat för strålningsdetektorer. First Person View. Spectrum Dose Index. Ett storleksformat för moderkort. Kandidatprojekt i programvaruutveckling 2 Projektrapport

FFT FFTW WAV MAVLink C Fast Fourier Transform: en effektiv algoritm för att beräkna diskret Fouriertransform. Fastest Fourier Transform in the West: implementation av FFT. Wave-format för ljudfiler. Micro Air Vehicle Link: kommunikationsprotokoll. Ett strukturerat och imperativt programmeringsspråk. C# Ett objektorienterat programmeringsspråk. C++/CLI Python Make ROI NaI Ett objektorienterat programmeringsspråk. Ett interpreterat programmeringsspråk. Kompilerings- och länkningsvektyg. Range Of Interest. Natriumjodid SEMAT Software Engineering Method and Theory Tabell 2: Förkortningar och definitioner 1.7. Rapportens struktur Rapporten börjar med att beskriva bakgrunden för projektet, varför det bör genomföras och vilka frågeställningar som finns. De förutsättningar som finns, de viktigaste teoretiska delarna samt gruppens metod för att bedriva projektet och skriva rapporten beskrivs också tidigt i rapporten. Efter detta kommer systembeskrivningen, som är en beskrivning av det resulterande systemet som gruppen har utvecklat. Här beskrivs de viktigaste aspekterna av systemet. När resultatet är behandlat fortsätter rapporten med de erfarenheter som har samlats under projektets gång. Först beskrivs de erfarenheter som gruppen tillsammans har fått under projektet, samt diskussioner kring dessa. Efter det kommer de individuella bidragen, där varje medlem i projektgruppen beskriver sina respektive erfarenheter. I slutet av rapporten diskuteras metoden som har använts samt resultatet. Rapporten tar sedan upp slutsatserna som har dragits utifrån frågeställningarna och syftet med projektet. 1.8. Avgränsningar Denna rapport beskriver det mätsystem som har utvecklats. Detta mätsystem har utvecklats för att kunna placeras på vilken typ av obemannat fordon som helst. Detta projekt behandlar inte det obemannade fordonet eftersom detta inte är en del av mätsystemet. Mätsystemet kräver för full funktionalitet att fordonet följer MAVLink-protokollet. Kandidatprojekt i programvaruutveckling 3 Projektrapport

2. Teori Projektet som genomfördes berörde många olika ämnen som krävde att gruppens medlemmar studerade bakomliggande teori. 2.1. Gammaspektrometri Gammaspektrometri är ett stort och komplicerat ämne; vi kommer därför endast att gå igenom den, för vår rapport, viktigaste teorin och de viktigaste termerna. Gammastrålning består av fotoner som utstrålas av olika ämnen. Varje radioaktivt ämne utstrålar fotoner av en specifik energi. Med hjälp av en gammastrålningsdetektor kan man mäta fotoner som strålas ut. Detektorn registrerar alla fotoner som träffar den och bestämmer fotonens energi. Detektorn registrerar fotoner i ett energiintervall och delar in detta intervall i kanaler. Varje kanal representerar alltså en del av det totala energiintervallet. Detektorn mäter fotoner under en viss tidsperiod och skickar information om hur många fotoner som detekterats i respektive kanal. Denna information bildar ett spektra som kan representeras med en graf, se figur 1. Figur 1: Exempel på antal detekterade fotoner för varje kanal. I figur 1 syns hur ett spektrum kan se ut. X-axeln visar kanalnummer och Y-axeln visar antalet fotoner som har detekterats. För vissa applikationer kan det vara överflödigt att behandla hela spektrat. För att visa strålning från ett visst ämne kan det vara intressant att visa antalet detekterade fotoner i några specifika kanaler. Detta kan göras med en ROI anpassad för just detta ämne. Olika detektorer har skillnader i känslighet. För att åtgärda detta utförs energikalibrering på mätdata. Detta görs genom att mäta ett ämne med kända energitoppar och sedan kalibreras detektorns kanaler för att motsvara rätt energi. 2.2. Trådlös kommunikation Trådlös kommunikation var en viktig del av projektet. Flera områden inom informationsteknik innehåller teori för arbetet. 2.2.1. AV-länk AV-länk är en vanlig typ av kommunikationsutrustning för FPV-tillämpningar. AV-länken består av sändare och mottagare som kommunicerar med smalbandiga radiovågor, men är för användaren en Kandidatprojekt i programvaruutveckling 4 Projektrapport

svart la da med in- och utgångar i form av analoga ljud- och bildsignaler. I figur 2 visas en typ av AVlänk. Figur 2: En AV-länk 2.2.2. Digital modulation För att skicka digital data över en analog kommunikationslänk måste någon form av modulationsteknik användas som representerar bitar med vågformer. Exempel på typer av modulationstekniker är fasmodulering som varierar bärvågens fas och amplitudmodulering som varierar bärvågens amplitud. En enkel form av amplitudmodulering är på/av-modulering som växlar amplituden mellan ett och noll. 2.2.3. Synkronisering Ett problem inom trådlös kommunikation är synkronisering av sändare och mottagare. Tidssynkroniseringen är mycket viktig och känslig, i storleksordningen millisekunder, för att skickade meddelanden ska tolkas rätt på mottagarsidan. För att synkronisera med denna precision skickas en synkroniseringspuls vars utseende är känd i både sändare och mottagare. Den mottagna signalen korreleras mot en tidsförskjuten version av synkroniseringspulsen, och den tidsförskjutning som ger högst korrelation är tidsskillnaden mellan sändare och mottagare. En viktig del är att välja rätt synkroniseringspuls. Pulsen ska ha egenskapen att dess mångtydighetsfunktion (i princip autokorrelationen av pulsen) ska ha en tydlig topp i origo och ett lågt värde i övrigt. Vitt brus är ett exempel på signaler med en sådan mångtydighetsfunktion. 2.2.4. Kanalkodning När data skickas över en kommunikationskanal kommer det att utsättas för brus och andra yttre störningar. För att motverka detta används felskyddstekniker som lägger till redundans i data som skickas. På så sätt kan en viss mängd felaktiga informationsbitar tolereras, eftersom det ursprungliga innehållet kan återställas från de bitar som är korrekta. Andra tekniker kan endast upptäcka att fel har inträffat, alltså inte åtgärda dem. Användande av felskyddsteknikerna kallas för kanalkodning. Kanalkodning kan inte göras perfekt, i den mening att ett obegränsat antal fel kan hanteras. Det går dock att göra kanalkoderna godtyckligt bra i denna mening, åtminstone i teorin, enligt kanalkodningssatsen inom informationsteknik. Kandidatprojekt i programvaruutveckling 5 Projektrapport

En enkel variant av kanalkod är (7, 4)-Hammingkod, vilket är en form av paritetskod som tar fyra meddelandebitar och lägger till tre stycken paritetsbitar. Hammingkoden presterar långt ifrån den teoretiska gränsen, men är enkel att implementera och snabb att beräkna. 2.3. Utvecklingsmetodiker För att styra utvecklingsarbetet användes delar av flera utvecklingsmetodiker. Utvalda delar beskrivs senare i dokumentet. Följande tre utvecklingsmetodiker berördes i projektet. 2.3.1. SEMAT SEMAT lägger en grund för hur mjukvaruutveckling bör bedrivas. SEMAT fokuserar på några utav de grundläggande processerna som bör följas under ett mjukvaruprojekt, men behandlar inte alla delar som krävs för att bedriva ett projekt. SEMAT bör därför kombineras med någon annan utvecklingsmetodik för att bilda en komplett plattform att utgå ifrån. En stor del av SEMAT är Alphas. Alphas är ett sätt att mäta olika delar av projektets och gruppens status. Det finns sju olika Alphas med ett varierande antal tillstånd, se tabell 3. Alpha Antal tillstånd Beskrivning Opportunity 6 Omständigheterna som möjliggör projektet och hur de inblandade tjänar på att slutföra det. Stakeholders 6 De personer och organisationer som påverkas av projektet. Requirements 6 Vilka krav produkten måste uppfylla för att godkännas av projektgruppen och beställaren. Architecture 6 Hur långt den tekniska lösningen har kommit, först i utveckling och sedan i bruk. Team 5 Hur projektgruppen arbetar och vad som bör förbättras för att arbeta effektivt. Work 6 Hur arbetet går och vad som bör förbättras i arbetsprocesserna. Way of working Tabell 3: Beskrivning av Alphas 6 Användandet av olika processer och verktyg för att förenkla arbetet. Genom att kontinuerligt mäta projektets och gruppens status i dessa Alphas kan gruppen se vad som bör förbättras. I varje nivå finns konkreta mål att arbeta mot för att avancera till nästa nivå. 2.3.2. Scrum Scrum är en mjukvaruutvecklingsmetodik där olika arbetsuppgifter delas inom utvecklingsgruppen och utförs parallellt under en Sprint. En Sprint är en iteration och har bestämd eller planerat tid som anses räcka för att utföra en viss uppgift. Tidslängden för en Sprint kan variera mellan olika projekt men vanligtvis pågår en Sprint i en månad. Under planering av en Sprint diskuterar gruppen vad som ska levereras och sedan hur det ska utföras för att få en färdig produkt och kunna nå målet. Gruppen börjar vanligtvis med att identifiera aktiviteter. Sedan bryts aktiviteterna ner till mindre aktiviteter, Kandidatprojekt i programvaruutveckling 6 Projektrapport

under flera iterationer, så att det går att utföra en aktivitet under en dags period. Aktivitetslistan kallas för Sprint backlog och därifrån delas aktiviteter ut inom gruppen och utförs parallellt. För att kunna uppdatera resten av gruppmedlemmarna med vad som händer i arbetet hålls regelbundna möten. Dagliga Scrummöten är möten där varje medlem uppdaterar resten av gruppen om vad som har gjorts sedan senast, vad man planerar göra näst och problem som inträffat. 2.3.3. Extreme Programming Extreme programming, eller kort XP, är en agil process för mjukvaruutveckling. Inom XP används användarhistorier som en central del för att planera arbetet. I dessa beskrivs vad en typ av användare vill göra för att lyckas utföra en handling. Planeringen delas upp i tre nivåer där den första täcker in några månader, den andra täcker kommande iteration och den sista planerar konkreta uppgifter för pågående iteration. Planer anses temporära och görs om vid behov. XP utgår från testdriven programmering där tester skapas först och utvecklingen fokuserar på att klara testerna. För att säkerställa en hög nivå på koden används parprogrammering samt två nivåer av tester, enhetstester och acceptanstester. Kandidatprojekt i programvaruutveckling 7 Projektrapport

3. Metod Utvecklingsmetoden som har använts i detta projekt är en iterativ och agil metod som är en kombination av SEMAT, Scrum och Extreme Programming. För att hitta lämpliga lösningar utvecklade gruppen olika prototyper, som sedan utvärderades för att ta fram den slutgiltiga produkten. För att göra detta använde sig gruppen utav flera olika programmeringsspråk och utvecklingsverktyg. 3.1. Arbetsmetoder För att kunna arbeta på ett sätt som gruppen kände sig bekväm med valdes vissa aspekter från ett antal välkända metodiker. Gruppen valde att använda delar ur bland annat SEMAT, Scrum och Extreme Programming. Gruppen valde ut de delar som är lättast och effektivast att arbeta med, och som medlemmarna kände sig trygga med. Under projektets gång tog gruppens medlemmar stort individuellt ansvar för att arbeta de timmar som krävdes, och det lämnades också stor frihet i att arbeta var man själv tyckte passade bäst. Gruppen hade dock ett rum där medlemmarna haft möjlighet att arbeta. Rummet var disponerat helt och hållet till projektgruppen som kunde utnyttja det ostört under dagtid. Gruppen har dock haft svårt att utnyttja rummet på kvällar och helger, då det har varit låst. 3.1.1. SEMAT Under projektets gång användes Alphas som kommer från SEMAT. Dessa alphas användes för att mäta projektets status. Syftet med detta var att på ett enkelt sätt se vilka Alpha-tillstånd som borde ligga i fokus. Inför varje iteration satte gruppen upp mål för Alpha-tillstånden, samt motiverade varför dessa nivåer borde uppnås. Efter iterationen utvärderades Alpha-tillstånden för att se om gruppen kom upp till de mål som hade satt upp, samt varför de nåddes eller ej. 3.1.2. Scrum Från Scrum valde gruppen att använda metoden att ta huvudaktiviteter och bryta ner dem i mindre aktiviteter för att sedan ordna dem i en aktivitetslista. Dessutom valde gruppen att använda dagliga och veckovisa Scrummöten. De dagliga Scrummötena tillämpades inte, men varje vecka hölls längre möten där gruppen gick igenom hur arbetet har gått och vad medlemmarna hade gjort. 3.1.3. Extreme Programming Från Extreme Programming valde gruppen att använda parprogrammering. Under utvecklingen delades arbetet upp i mindre grupper, där vissa valde att tillämpa parprogrammering, medan andra valde att inte göra det. 3.2. Iterationer Projektet delades tidigt in i fyra iterationer, som sträckte sig över fyra veckor var. Inför varje iteration skrevs en iterationsplan som berörde följande områden: Milstolpar som skulle uppnås under iterationen. Ett avsnitt som berörde projektets status, uttryckt i Alphas. Här beskrevs projektets status innan iterationen, samt förväntad status efter iterationen. Huvudsakliga mål under iterationen. Vilka arbetsuppdrag som tilldelats, samt till vem. Vilka aktiviteter som skulle färdigställas. Hur gruppen efter iterationen skulle bedöma om denna var godkänd eller ej. En bedömning av iterationen som skrevs efter att iterationen var avslutad. Kandidatprojekt i programvaruutveckling 8 Projektrapport

3.2.1. Förstudie Förstudien pågick under två iterationer. Under denna fas gjordes det förberedande arbetet för att senare i projektet kunna fokusera på utveckling av systemet. Tidigt i förstudien kontaktades beställaren för att komma överens om vilka krav som skulle ställas på systemet. För att kunna bestämma hur produkten skulle tas fram krävdes en tydlig kravspecifikation. Kravspecifikationen var viktig då gruppen utifrån denna kunde bestämma både vad som skulle utvecklas och vad som ej var relevant. En stor del av arbetet i denna iteration var att undersöka alternativa lösningar. Projektdirektiven och kravspecifikationen beskrev vad som behövdes göras, men inte hur eller med vilka komponenter (både hårdvara och mjukvara). Utöver detta bestämdes även de processer som användes av projektgruppen, samt vilka individuella ansvarsområden gruppmedlemmarna blev tilldelade. Totalt fem dokument skrevs under dessa två iterationer. Dessa dokument kan ses i tabell 4. Dokument Projektplan Kravspecifikation Systemskiss Testplan Syfte Beskriver hur projektet ska bedrivas. Här finns beskrivningar för de respektive ansvarsområden som tilldelats till gruppens medlemmar, samt vilka processer som ska följas för att projektet ska slutföras. I detta dokument finns även en lista över de aktiviteter som ska genomföras. I detta dokument listas de krav på systemet som gruppen tillsammans med beställaren har kommit överens om. Detta dokument användes för att samla alla lösningsförslag för att sedan sammanställas till en övergripande lösning. Denna övergripande lösning låg till grund för utvecklingen av systemet under utvecklingsiterationerna. Testplanen beskriver vilka komponenter som ska testas, samt hur detta ska ske. Kvalitetsplan Kvalitetsplanen beskriver hur kvalitetsarbetet ska genomföras för att produkten ska hålla en god kvalitet. Tabell 4: Dokument som skrevs under förstudien 3.2.2. Utveckling Eftersom förstudiefasen i projektet tog mycket tid fanns två iterationer kvar för utveckling av systemet. Under de två utvecklingsiterationerna fördelades utvecklingsarbetet över gruppens åtta medlemmar. Eftersom arbetet redan var planerat och förberett kunde merparten av gruppens medlemmar fokusera på utveckling av produkten. Utöver utveckling dokumenterades arbetet och produkten kontinuerligt. De dokument som skrevs under utvecklingsiterationerna ses i tabell 5. Dokument Arkitektur Syfte Arkitekturdokumentet beskriver systemets övergripande konstruktion. Dokumentet uppdateras under projektets gång. Kandidatprojekt i programvaruutveckling 9 Projektrapport

Testfall Testrapport Teknisk dokumentation Beskriver en serie tester som ska göras för att kontrollera att en specifik del av systemet fungerar som det är tänkt. Dessa dokument uppdaterades under testningen för att dokumentera hur varje test gick och vad som eventuellt inte fungerade som det skulle. Testrapporten behandlar alla avklarade tester. I detta dokument beskrivs vilka test som är godkända och vilka tester som ej är godkända. Beskriver grundligt implementationen av den utvecklade produkten. Användarmanual Beskriver hur systemet ska användas av slutanvändaren. Tabell 5: Dokument som skrevs under utvecklingsiterationerna 3.3. Utvecklingsmiljöer, verktyg och programmeringsspråk Under projektets gång användes ett antal olika utvecklingsmiljöer, verktyg och programmeringsspråk. Valen av dessa gjordes baserat på den aktuella modulen, vilka funktioner som krävdes och vilka möjligheter som fanns att tillgå. För att utveckla programmet som körs på markdatorn användes programmeringsspråket C#, med utvecklingsmiljön Microsoft Visual Studio. Det grafiska gränssnittet till detta program utvecklades med hjälp av API:et Windows Forms, som finns inbyggt i Microsofts.NET-ramverk. Den trådlösa kommunikationen, samt insamlingen av mätvärden utvecklades med programmeringsspråket C, tillsammans med kompilatorerna GCC och Clang. För att upprätta en fungerande versionshantering och underlätta utvecklingen valdes versionshanteringsprogramet Git. Gruppen valde att upprätta en Git-server med hjälp av tjänsten Bitbucket, som också har ett web-gränssnitt. Bitbucket har även officiellt stöd för att integreras med JIRA, vilket är det projekthanteringsverktyg som användes under projektets gång. Det finns officiellt stöd för Git i utvecklingsmiljön Visual Studio. 3.4. Prototypning Under utvecklingen av några av de större delarna av systemet användes prototypning. Mjukvaruprototyper användes för att få en konkret idé av den design som utvecklare och andra intressenter har tänkt sig. Genom att tidigt ha något att vissa upp för kunder och framtida användare kunde problem och brister upptäckas innan större delar av mjukvaran utvecklats. Parallellt med förstudiefasen utvecklades en prototyp av systemets grafiska användargränssnitt. Denna utvecklades i C# som en evolutionär prototyp där all programkod användes för vidareutveckling av modulen. Ny funktionalitet och förbättring av användargränssnittet kunde sedan implementeras enklare på den grund som redan var lagd under de tidigare faserna. Även för utvecklingen av kommunikationslänken användes prototypning. Här gjordes istället en kasta-bort prototyp, en prototyp som vid implementation användes enbart som referens och inte byggdes vidare på. Prototypen utvecklades i Python eftersom det är ett snabbt och lättanvänt programmeringsspråk. Python saknar dock prestandan för att användas i slutprodukten och användes därför enbart som just en referens. Kandidatprojekt i programvaruutveckling 10 Projektrapport

3.5. Testning Från och med iteration tre när utvecklingsarbetet inleddes så påbörjades även arbetet med att testa mjukvaran. Testfall skrevs för att det skulle vara tydligt hur tester gick till och för att säkerställa att tester alltid gick till på samma sätt. I varje testfall beskrevs ett antal tester som skulle genomföras, vilka krav som testades och vilka förutsättningar som skulle vara uppfyllda för att genomförda tester skulle godkännas. För varje iteration skrevs nya testfall för att kunna testa ny och planerad funktionalitet. Även redan befintliga testfall reviderades vid behov för att mjukvaran skulle kunna testas bättre. Testfallen användes sedan genom att genomföra testerna steg för steg och anteckna resultaten. För att säkerställa att allt fungerade korrekt gjordes godkända testfall om igen under arbetets gång. Utöver användandet av testfall så genomfördes användartestning av gränssnittsprototypen med möjliga användare. Dessa fick genomföra förbestämda uppgifter och utvärdera prototypen i en enkät. Återkopplingen från dessa tester beaktades under utvecklingsarbetet. 3.6. Kandidatarbete För att skriva ett examensarbete baserat på det projekt som utfördes krävdes av gruppen att erfarenheter och arbete dokumenterades kontinuerligt under projektets gång. Det var också viktigt att alla medlemmar i gruppen hade lika mycket att säga till om vid sammanställandet av rapporten för att få en balanserad bild av projektet. Den viktigaste delen i dokumentationen av arbetet och erfarenheterna var de utvärderingar som gjordes efter varje iteration. Vid dessa tillfällen samlades hela gruppen och diskuterade både hur arbetet gick och vad som fungerade bra och vad som borde förändrats till nästa iteration. Vid sammanställningen av rapporten gick hela gruppen först igenom rapportens disposition och vad som bör finnas under varje rubrik. Varje punkt i innehållslistan diskuterades sedan inom gruppen för att samla erfarenheter och tankar. Punkterna i innehållslistan delades sedan upp mellan gruppens medlemmar, i par om två personer, som skrev innehållet i respektive punkt. Parallellt med att texten i rapporten skrevs kontrollerades och kommenterades innehållet kontinuerligt av övriga gruppmedlemmar för att hålla en hög nivå. Kandidatprojekt i programvaruutveckling 11 Projektrapport

4. Systembeskrivning Följande kapitel beskriver för det första hur systemet planerades, för det andra vilka val och begränsningar som gjordes utifrån planeringen och för det tredje hur det konstruerades. 4.1. Arkitektoniska mål Inför utvecklingens start satte gruppen upp ett antal riktlinjer för hur systemets arkitektur skulle byggas. Det färdiga systemet når i stort upp till dessa mål. 4.1.1. Moduluppbyggnad Systemet delas upp i ett litet antal moduler med tydliga begränsningar och gränssnitt. Moduluppdelningen ökar flexibiliteten under utvecklingsprocessen och ger möjligheter att anpassa eller vidareutveckla systemet genom att byta ut moduler. 4.1.2. Paketindelning Källkoden i de olika modulerna delas ytterligare upp i paket. Paketindelningen ger en tydlig hierarki i kodbasen. All källkod i ett paket är tätt sammanhållen, både tekniskt och semantiskt. 4.1.3. Anpassningsmöjligheter Det ska vara möjligt att byta ut eller lägga till funktionalitet i systemet oberoende av andra moduler. 4.2. Val och begränsningar Utöver projektdirektiv och kravspecifikation konstruerades systemet utefter ett antal val och begränsningar framtagna av gruppen. 4.2.1. Utvecklingsmiljö och API Microsoft Visual Studio och.net-ramverket är valt som grund för de delar av systemet som körs pa Windows 7. Endast dessa delar av systemet har ett GUI. För övriga delar av systemet är valet av API inte av lika stor vikt. 4.2.2. Gammaspektrometer Den modell som används som standard i produkten är Kromek GR1, en NaI-detektor som är en av de minsta pa marknaden, 25 x 25 x 63 mm med en vikt pa 60 gram, se figur 3. Denna detektor ansluts till en dator via USB och har proprietära drivrutiner som beställs direkt fra n företaget. Figur 3: Gammaspektrometern Kromek GR1. Källa: Kromek. Kandidatprojekt i programvaruutveckling 12 Projektrapport

4.2.3. Radiokommunikation Kommunikationen mellan mätdator och markdator sker över AV-länk, eftersom sa dana är vanliga i UAV-sammanhang för att följa en flygning i FPV-perspektiv. Användning av AV-länk som kommunikationsmedel valdes efter önskemål från beställaren. 4.2.4. GPS Positionsdata hämtas fra n en ansluten GPS. Detta betyder att systemet endast fungerar med GPSsystem som följer protokollet MAVLink. 4.3. Moduluppdelning Systemet är moduluppbyggt med tre moduler: markenhet (ME), datainsamlingsmodul (DIM) och kommunikationslänk (KL), se figur 4. Gränserna mellan moduler är främst definierade i mjukvara, eftersom systemet är tänkt att köras pa tva datorer: PC:n pa marken och enkortsdatorn i luften. Program i ME körs bara pa PC:n, program i DIM körs bara pa enkortsdatorn och program i KL körs pa ba da datorerna. Figur 4: Moduluppbyggnad. 4.4. Datainsamlingsmodul Uppdraget för datainsamlingsmodulen är att läsa mätningar fra n gammaspektrometern och paketera detta med metadata (position, tid etc.). Mätningarna sparas lokalt men skickas även vidare till kommunikationslänken. Datainsamlingsmodulen besta r av mjukvara som körs pa en egen dator. Modulen är konstruerad för att köras på en liten enkortsdator (exempelvis Raspberry Pi) och kräver därför inte hög prestanda. 4.4.1. Beroenden För att datainsamlingsmodulen ska vara användbar krävs att följande komponenter och programbibliotek finns tillgängligt. Kromek GR1: Gammaspektrometer (detektor av gammastrålning), modell GR1 från företaget Kromek. libxml: XML-bibliotek i C Linuxdator: En dator med ett Linuxsystem, Raspberry Pi med Raspbian rekommenderas. 4.4.2. Programstruktur På grund av prestandakraven är datainsamlingsmodulen skriven i lågnivåspråket C. Kodbasen är uppdelad i paket. Eftersom modulen strukturmässigt ligger mellan Kromek GR1 och KL, krävs att modulen är anpassad för det. Kandidatprojekt i programvaruutveckling 13 Projektrapport