• No results found

1.2 Beskrivning av problem

N/A
N/A
Protected

Academic year: 2021

Share "1.2 Beskrivning av problem "

Copied!
46
0
0

Loading.... (view fulltext now)

Full text

(1)
(2)
(3)

Sammanfattning

Projektet är utförd åt företaget Airpelago som vill utveckla ett system för att kunder ska kunna styra en DJI drönare över långa avstånd från en dator. Drönare flyger normalt sett med en 2.4Ghz radio kontroll och detta fungerar bara upp till en räckvidd av ca 1 km. Planen var att istället koppla upp drönaren till internet till en server som styrs från datorn.

Utmaningen var att implementera en on-board enhet som kan kommunicera med DJI drönaren och ha kontakt via internet till servern. För att kunna skicka tex GPS kordinater att följa och skicka tillbaka videon från kameran.

Datorstyrningen möjliggör att kunna göra ett användarvänligt och delvis automatiskt system som kan styras av en specifik användare som loggar in. Det är även möjligt att samarbeta och dela ansvar mellan användare. Man kan på ett överskådligt sätt se drönarens kamera och position mm.

Då företagets server hade redan ett bra användargränssnitt redan i form av en hemsida och att DJI drönare är redan färdigbyggda med mängder av funktioner, gick arbetet ut på att göra en länk mellan drönaren och servern för att kunna kommunicera med varandra. För att kunna utveckla egna funktioner och styra DJI drönare har DJI sin egna ​Software Development Kit (SDK) för windows, Android och IOS. Detta möjliggör att kunna använda många av DJI redan inbyggda funktioner tex. return to home eller landa på lämpligt ställe när kvarstående batterikapaciteten är låg, stoppa eller ändra ett uppdrag under ett pågående uppdrag. Lägga in kamerastyrning från webbsidan, eller ha direkta kontroller för kameravinkeln på webbsidan. ​I vårt fall användes Android som en mellanhand som kontakten mellan servern och drönaren. Men i Androidkoden också hur den reagerar om den tappar mottagning och den inte kan styras från internet, då den måste göra några egna beslut.

Detta gjordes i form av en Android enhet som ska sitta på drönaren och vara kopplad till drönaren via WiFi anslutning, samtidigt är den uppkopplad till internet och blir styrd och skickar data till företagets server och hemsida. Både små Android telefoner och raspberry-pi enkapseldator med Android operativsystem testades.

För att fullfölja detta användes Android Studio som programmeringsplattform för applikationen. Ett till problem uppstod, eftersom Android skrivs i Java medans servern och koden som pratar med servern var skriven i Python behövdes en speciell mjukvara

“Chaquopy” som är en mellanhand mellan Java och Python språken.

I denna rapport visas hur tidigare två system som inte har någon koppling till varandra kan kommunicera med varandra och användas till företagets behov av styrning från långa avstånd.

Slutsatsen dras att detta är möjligt, att med hjälp av Android som mellanhand styra en DJI drönare från var som helst i världen via internet.

(4)

Innehåll

1. Introduktion 6

1.1 Bakgrund 6

1.2 Beskrivning av problem 7

1.3 Syfte och mål 7

1.4 Uppgifter och avgränsningar 7

2. Drönare 8

2.1 Översikt 8

2.2 Flygkontrollen 9

2.2.1 Sensorer: 10

2.3 Elektroniskt fartreglage 12

2.4 motorer 14

2.5 kamera 15

2.6 videosändare 15

2.6 radiomottagare 16

2.5 GPS 16

2.6 DJI Spark 17

3. Trådlösa kommunikationer och datornätverk 19

3.1 4G mobil kommunikation 19

3.2 Datornätverk och kommunikation 20

3.2.1 Hypertext Transfer Protocol (HTTP) 20

3.2.2 JSON & Requests 20

3.2.3 TCP/IP model 20

3.2.4 wireless local area networks (WLAN) 21

3.3 Wifi 21

3.2.1 IEEE 802.11/WLAN 21

3.2.2 WiFi för-och nackdelar 21

3.2.3 IEEE 802.11 Kanaler 21

3.2.4 WiFI Protocol Stack Layers (LLC, MAC, PL) 22

4. Metod och Utförande 23

4.1 Programmeringsspråk 23

4.1.1 Java 23

4.1.2 Python 24

4.1.3 Chaquopy 26

4.2 Android och Android studio 27

4.3 DJI och DJI SDK 28

4.4 Airpelago’s användargränssnitt 28

4.4.1 Dronemissioncontrol 28

4.5 Implementering 29

(5)

4.5.1 Android och DJI 29

4.5.2 DJI SDK (system developer tools) 30

4.5.3 Android och Server 34

4.5.4 Pythontoserver.py (Pythonklass) 34

4.5.5 activity_main.xml 34

4.5.6 kopplingen Java-Python-server 34

4.5.7 drönare - wifi - mobil- internet- server 38

5. Resultat och diskussion 39

5.1 Resulterande system 39

5.2 Projektplanen 40

5.2.1 Raspberry Pi 40

5.2.2 Tillvägagångs diskussion 41

5.3 Diskussion om utmaningar 41

5.4 Reflektion på inlärningen 41

6. Slutsats och framtida studier 43

Referenser 44

(6)

1. Introduktion

1.1 Bakgrund

Figur 1.1 “DJI spark” drönaren som användes i projektet [1]

Företaget Airpelago är ett företag från Göteborg och Linköping som har i ett uppdrag att utveckla en demonstrations-platform för drönar relaterade tjänster och för visionen som Sjöräddningssällskapet har för att använda drönare för spaning vid räddnings uppdrag. För närvarande behöver de utveckla grundfunktionerna till detta system.

I situationer där någonting behöver ske på en oförutsägbar och avlägsen plats används ofta mänskliga tillgångar med någon form av flexibel och snabb transport metod, tex helikopter, båt eller bilar. I det kommande åren har teknologin för drönare utvecklas i en rasande takt och det finns starka indikationer på att många av dessa mänskliga element i transporten kommer att minska då drönare kan navigeras autonomt och med hjälp av en människa från en distans. Det här projektet är en del av denna utveckling mot drönar system som ska ge stöd för tex sjöräddningssällskapet som kan snabbt med hjälp av en drönare åka till platser av intresse och med hjälp av drönarens inbyggda kamera live streama det till en operator.

Detta sker då såklart mycket snabbare än om en människa ska ta sig dit då drönaren är lätt, snabb och alltid tillgänglig. DJI tillverkar de bästa och mest avancerade drönaren på marknaden och här blir uppdraget från detta projekt att använda sig utav den funktionalitet

(7)

som kommer med dessa drönare och att få en fungerande länk mellan den och företaget Airpelagos server via 4G internet.

1.2 Beskrivning av problem

Figur 1.2 problembeskrivning i form av block diagram

Drönare flyger normalt sett med antingen wifi eller mer vanligt med en 2.4Ghz radio kontroll och detta fungerar bra fast bara upp till en räckvidd av ca 1 km. Problemet är att styra drönare från längre avstånd, ge den koordinater att flyga till med hjälp av 4G istället för WIFI och radiolänk. Det som behövs är att en dator som ska sättas på drönaren som ska kunna ta emot denna 4G signal och sedan använda kabel anslutning eller WiFi till drönaren på kort distans. På detta sätt kan drönaren styras från oändlig räckhåll så länge det finns en 4G mottagning. Så ett onboard system kommer behövas för att styra och kommunicera med en DJI drönare. Det enda sättet som för närvarande finns, är genom Android med DJIs SDK. Så med en Android enhet på antingen en mobil eller Android operativsystem installerat på en Raspberry Pi. Efter detta, om det finns tid kommer också 4G uppkoppling till detta system att försökas genomföras.

1.3 Syfte och mål

Syftet med detta arbete är att i huvudsak göra det möjligt att kommunicera och kontrollera en DJI drönare med en on-board enhet som också kan styras med en 4G mobil kommunikations länk från ett kontor från långt avstånd.

1.4 Uppgifter och avgränsningar

Vid tidsbrist kommer funktionalitet prioriteras över förfiningar. Såsom att om det är enklare att använda sig av en mobil som är installerat med Android istället för en tex Raspberry Pi

(8)

som också kan ha Android installerat men är en tidskrävande och inte har en officiell metodik att göra det på. Att hela systemet och ideen av projektet fungerar är prioriterat över en snygg gränssnitt och andra optimeringar som kan ske i ett framtida vidareutveckling.

Delmål och uppgifter:

1. lära sig Android studio och göra några enkla test appar.

2. göra en enkel Androidapp som kan få kontakt med drönaren via wifi och utföra ett enkelt kommando tex starta och landa.

3. Lära sig och testa Chaquopy, länken mellan Java och Python.

4. göra en annan app som kopplar upp sig mot servern 5. Kombinera de båda apparna till en.

6. Tester och felsökning.

2. Drönare

2.1 Översikt

En “drönare” använder fyra grundläggande delar för att kunna flyga (hovra), dessa är:

● Motorer

● elektroniskt fartreglage(ESC)

● flygkontroller(FC)

● radiomottagare

● batteri

Flygkontrollen innehåller många sensorer tex en accelerometer som känner av drönarens orientation i luften. Med den datan försöker den stabilisera drönaren genom att ändra hastigheten på motorerna. Nästan alla drönare använder bldc(brushless dc) “outrunner”

motorer som är en trefasmotor med statorn i mitten och rotorn bestående av permanentmagneter på utsidan. För att snurra en sådan motor krävs ett elektroniskt fartreglage, denna tar emot signalen från flygkontrollen och snurrar motorn i den önskade hastigheten. Utöver det kan extra funktioner läggas till, tex GPS, optiska sensorer, strömmätare,kamera, kamerastyrning mm

(9)

Figur 2.1 Enkelt diagram av drönare

2.2 Flygkontrollen

Figur 2.2 - Exploderad vy av drönare [2]

Flygkontrollen är “hjärnan” datorn i drönaren. Den har en kraftig processor och är center av all kommunikation. Den tar in data från sensorer, GPS, radion, kamera och skickar ut data till fartreglagen och video och radiosändaren. En av dess viktigaste uppgift är att hålla och ändra drönarens riktning i luften.

Detta sker genom en proportional-integral-derivative (PID) loop, på flygkontrollen sitter ett gyroskop och en accelerometer. Med dessa kan orientation och acceleration mätas. Från radio-mottagaren kommer data från användaren som är önskad hastighet, position och

(10)

riktning. Med denna data justerar flygkontrollen hastigheten på motorerna så drönaren hamnar i önskad position. När den börjar röra sig ändras såklart värdena från accelerometern och gyroskopet och loopen är sluten.

Ju snabbare denna loop kan köras ju mer precis och stabil kan drönarens rörelser bli. Därför kör man kraftigare och snabbare processorer på flygkontrollern. I dagens läge ligger de snabbaste flykontrollerna som är gjorda för racing på en looptid på 32kHz. Såklart måste då både gyrots och fartreglagens samplingsfrekvens hinna med , eftersom de också är i loopen.

Gyrots samplingsfrekvens:

PID-looptiden begränsas av Gyrots samplingsfrekvens, eftersom Gyrot måste läsa data så fort som eller snabbare som PID-loopen. Gyrots samplingsfrekvens påverkas av 2 saker:

Gyrosensorns typ och anslutningsprotokollet mellan processorn och Gyrosensorn. Just nu det mest populära MPU6000 Gyrot med SPI BUS - protokoll kan ha en samplingsfrekvens på upp till 8 KHz, medan den snabbare ICM-20602 med i2c-protokoll kan köra 32 KHz.

Ett stort problem med gyron är vibrationer. En drönare (se figur 2.2) har fyra motorer och propellrar där det skapas mycket turbulent luft som orsakar mycket vibrationer. Därför är det viktigt att propellrarna är balanserade. Monteringen av flygkontrollen är viktig, de sitter ofta monterade på vibrationsdämpande fötter. DJI mavic pro använder två stycken gyron för att få ett stabilare medelvärde mellan dessa.

2.2.1 Sensorer:

I en DJI flygkontroller finns 4 sensorer (+ ultraljuds sensorerna): IMU(Inertial measurement unit), Kompass, barometer och GPS.

● IMU håller drönarens orientations läge och kan också upptäcka acceleration i olika riktningar.

● Kompassen är riktad, vilket gör att drönaren pekar i rätt riktning och flyger i en rak linje.

● GPS är positionell och håller drönaren på samma ställe, med undantag för användarinmatning från radiosändaren.

● Barometer: Den barometriska sensorn används för att upprätthålla en konstant höjd.

GPS används inte för höjd eftersom det är alltför dålig precision för detta (GPS kan ha många meter fel när det gäller höjd). Den barometriska sensorn har en upplösning på 10 cm, så den används exklusivt för höjddata.

(Förutom en tredimensionell accelerometer innehåller IMU också en MEMS(​microelectromechanical systems​) gyroenhet som mäter rotation, så det är inte bara magnetometern som producerar rotationsinformation.)​MEMS IMUs kan ha 4 till 10 “degrees of freedom” (DoF). En 10 DoF IMU innehåller en 3-axlig accelerometer, ett 3-axlig gyroscop, en 3-axis magnetometer och en barometer. Magnetometern kan användas som kompass.

[1]

(11)

En dåligt kalibrerad eller felaktig kompass är den vanligaste orsaken till en så kallad

"fly-away".

När kompassdatan är felaktig orsakar det en konflikt med GPS vid beräkning av magnetisk norr. Denna motstridiga information stämmer ej överens med vad GPS ser som norr och flygkontrollen kommer att försöka rätta till läget, vilket orsakar det som kallas “ ​Toilet Bowl Effect” eller "TBE". Detta fel ökar systematiskt och cirklarna blir större och större om användaren inte korrigerar från radion.

Ultraljudssensor

En ultraljudssensor är en enhet som kan mäta avståndet till ett objekt genom att använda ljudvågor. Den består av en högtalare (transmitter) och en mikrofon(receiver). Det mäter avstånd genom att skicka ut en ljudvåg ur högtalaren vid en viss frekvens och lyssnar på ekot av den ljudvågen via mikrofonen när den studsar tillbaka. Genom att mäta tiden mellan ljudvågen som skickas ut och ekot som kommer tillbaka är det möjligt att beräkna avståndet mellan ultraljudssensorn och objektet det studsar emot. De små som sitter på drönare kan mäta inom 2cm till 4m.

Figur 2.3 ultraljudsmätare [3]

En kort våg (pulståg) av längden 8 perioder skickas ut, tiden (propagation delay) mäts tills denna vågen kommer tillbaka. Frekvensen 40kHz används för att det är resonansfrekvensen på elementen i högtalaren och mikrofonen. De vanligaste för drönare är HC - SR04 element.

Vissa föremål inte kan detekteras av ultraljudssensorer. Detta beror på hur ljudvågen

(12)

studsar på objektet, tex mot en vägg med vinkel större än 45 grader, då studsar ekot bort från ultraljudssensorn. Det är också möjligt att objektet är för litet för att spegla tillräckligt av ljudvågen tillbaka till sensorn. Andra objekt kan absorbera ljudvågen tex tyg och mattor, vilket innebär att det blir svårt för sensorn att upptäcka dem.

DJI spark som vi jobbar med har endast en ultraljudssensor i fronten och två under medan större modeller har flera runt om. Den använder dessa sensorer för “obstacle avoidance”

och den under för precis och mjuk landning.

Figur 2.5 undersidan av en DJI drönare med ultraljud sensorerna markerade i röd

2.3 Elektroniskt fartreglage

Ett elektronisk fartreglage eller ESC(electronic speed control) är en elektronisk krets som styr och reglerar varvtalet hos en elektrisk motor. En BLDC (motor se figuren) är en synkron trefasmotor så den måste ha en krets som skickar rätt ström till rätt spole i rätt tidpunkt beroende av rotorns position.

Input:

En standard för fartreglage för radiostyrda flygplan har varit att insignalen är en PPM signal med 1-2ms med ca 20ms mellan pulserna. vilket är 50Hz. Senare kom snabbare PPM inputs upp till 400Hz vilket drönare kräver för en snabb pid loop. Nu använder inte snabba fartreglage PPM längre utan andra seriell baserade snabbare protokoll det snabbaste D-shot 1200 som kan supporta upp till 32kHz.

(13)

Output:

För att från batteriet välja vilken spole som ska få ström och hur mycket ström som ska gå i den görs med FET transistorer. Dessa är placerade som i en klassisk trefas koppling. Motorn är antingen kopplad i Y eller delta. Genom att ändra “duty cycle” eller switch frekvensen av transistorerna ändras motorns hastighet.

För att veta vilken spole som ska aktiveras behövs rotorns position vara känd, Detta sker vanligtvis med hall sensorer som känner av rotorns magneter och position. Men en

“sensorless bldc” motor som det sitter på drönare har inga hallsensorer. Endast tre kablar som går in i de tre faserna. Hur gör den då för att veta rotorns position?

Figur 2.6 elektroniskt fartreglage för bldc sensorlös motor [4]

(14)

Figur 2.7 Enkelt diagram av bldc motor [5]

När motorn roterar, varierar “back-EMF” (spänningen inducerad i spolen på grund av att permanentmagneten som passerar förbi spolen och ändrar magnetfältet i den). Man kan på detta vis ​veta vilken position rotorn har.Back-EMF genereras dock bara när motorn rör sig så när den står stilla kan inte fartreglaget veta var rotorn befinner sig, så den börjar med att gissa och skickar ut en startpuls som får rotorn att röra sig, sensorlösa motorer kan hacka och gå lite ojämnt vid låga varvtal då back-Emf är väldigt låg. Men en drönare har så lågt vridmoment vid låga varvtal med en lätt propeller att det inte är några problem att starta motorn. Men en annan applikation tex bil, måste använda sig av hallsensorer för att veta rotorns position. ESC har också sin egen PID loop som ser till att det önskade varvtalet erhålls snabbt hålls kvar där. Saker som motorns och propellerns vikt och tröghetsmoment påverkar detta.

2.4 motorer

Nästan alla drönare använder bldc(brushless dc) “outrunner” motorer som är en synkron trefasmotor med statorn i mitten och rotorn bestående av permanentmagneter på utsidan.

(15)

Figur 2.8 Outrunner BLDC motor [6]

Vid val av en motor och propeller för drönare är en av de viktigaste motor-parametrarna KV-värdet (hur snabbt den snurrar per volt kontra hur mycket vridmoment den har). Detta påverkar val av propellerns storlek , en stor propeller kombinerat med en motorn med högt Kv-värde gör att motorn vill snurra propellern snabbt men den har för lågt vridmoment så den orkar inte snabbt komma upp i det varvtal som önskas, fartreglaget försöker gasa på motorn upp till rätt varvtal och det går en stor ström och motorn kan bli överhettad eller flygtiden försämrad. Om man istället har en motorn med för lågt Kv har den högre vridmoment men varvtalet kan vara för lågt och man får en låg hastighet på drönaren.

2.5 kamera

För att få en stabil video använder alla DJI drönare en gimbal(kamera stabilisator). Dessa har motorer på antingen 2 eller 3 axlar, som kompenserar drönarens lutningar vibrationer och rörelser. Gimbal-kontrollern har ett gyro som mäter kamerans orientation.

Gimbal-kontrollen är kopplad till flygkontrollen som gör att man genom radiosändaren kan manuellt styra kamerans vinkel och rotation. Man kan även programmera in automatiska kamerarörelser.

2.6 videosändare

De flesta drönare använder en liten analog kamera sänder videon med en separat analog videosändare över 5.8 Ghz bandet. En analog videosändare ger minimalt delay ca 10ms, är liten och lätt. Den lämpar sig bra för racing och vanlig flygning, upplösningen på den analoga videolänken är dock begränsad. Därför har DJI en digital videolänk som kan skicka hd-video,

(16)

det är ett ganska stort delay 200ms på videon, eftersom den måste kodas av processorn i flygkontrollen och och dekodas i appen på mobilen som används som skärm i DJI drönare.

Men snabbheten spelar mindre roll när hastigheten är låg och fotografering eller videofilmning är målet. Både DJI radiolänk och videolänk går på antingen 5.8 eller 2,4ghz bandet. Den kan välja automatiskt beroende på var det är minst störningar.

DJI har tre olika överföringssystem som de använder över sina drönare:(alla nvänder 2,4GHz som bärfrekvens) Lightbridge,Lightbridge 2 OcuSync och standard WiFi. OcuSync är nyare än Lightbridge och är bättre, men inte så mycket. WiFi är lite mindre tillförlitligt, eftersom räckvidden är mindre och signalen bryts upp oftare på grund av störningar från alla andra WiFi-enheter. Lightbridge har en räckvidd på ca 5km, Lightbridge 2 ca 7km, OcuSync har också 7km räckvidd men 1080p at 30fps istället för 720p, detta kan vara värdefullt om man analyserar bilden live på skärmen och behöver se små detaljer.

2.6 radiomottagare

DJI använder inte WiFi. De använder radio-överföring som är 2,4 eller 5,8 GHz.

WiFi är en term som används för routrar, tabletter, smarta telefoner och andra uppfattningar som är förknippade med IT och internet etc, och de har vanligen ett intervall på ca 50 m och sänder också på 2,4 och 5,8 GHz, men på grund av andra saker som kostnad, effektkrav, interferens är deras intervall begränsad till ca 50m. Genom att använda telefon som controller kommer räckvidden begränsat till 50m.

Om du använder fjärrkontrollen kommer du att ha längre räckvidd (minst 20 - 40 gånger mer).

2.5 GPS

GPS (Global Positioning System), är ett satellitbaserat radio navigationssystem som levererar position och tid till en GPS mottagare som befinner sig var som helst på jordens yta och är sebar för 4 satelliter eller mer. Berg och hus kan blockera signalen. Det är ägt av USA’s stat och drivs av ​United States Air Force​.

GPS kräver inte att användaren sänder data utan kräver endast en mottagare, och den fungerar oberoende av telefon- eller internet mottagning, År 2000, hade GPS ungefär en fem meter noggrannhet. Den senaste versionen som nu är fullt utbyggt använder L5-bandet.

GPS-mottagare som släpptes år 2018, som använder L5-bandet, kan ha mycket högre noggrannhet, vilket ligger inom 30 centimeter.

drönare använder GPS för:

● hålla sin position stilla i luften

● följa GPS koordinater i “missions”

● “return to home” om batteriet är lågt eller om mottagningen till radion tappas kan den automatiskt återgå till sin startposition.

return to home kan programmeras vanligtvis så att den åker upp på en höjd ca 30m som är ovanför de flesta träd och hinder, åker tillbaka till startpositionen och sedan landar rakt ner.

(17)

För att få en bra precision behöver den se minst ca 10 satelliter vilket den vanligtvis har utomhus.

2.6 DJI Spark

Specifikationer:

Takeoff Weight 300 g

Diagonal Distance (propellers excluded) 170 mm Max Speed 31 mph (​50 kph​) in Sport Mode without wind Max Service Ceiling Above Sea Level 13,123 feet (​4,000 m​)

Max Flight Time 16 minutes​ (no wind at a consistent 12.4 mph (20 kph)) Max Hovering Time 15 minutes (no wind)

Satellite Positioning Systems GPS/GLONASS

Operating Frequency 2.400 - 2.483 GHz; 5.725 - 5.825 GHz

3D SENSING SYSTEM

Obstacle Sensing Range 1-16 ft (​0.2 - 5 m​)

Operating Environment Detects diffuse reflective surfaces (>20%) larger than 20x20 cm (​walls, trees, people, etc​.)

VISION SYSTEM

Velocity Range ≤22.4 mph (36 kph) at 6.6 ft (2 m) above ground Altitude Range 0-26 ft (0 - 8 m)

Operating Range 0-98 ft (​0 - 30 m​)

Operating Environment Detects clearly patterned surfaces with adequate lighting (lux>15) and diffuse reflectivity (>20%)

INTELLIGENT FLIGHT BATTERY Capacity 1480 mAh

Voltage 11.4 V Battery Type LiPo 3S Energy16.87 Wh

Som sett i specifikationen är det en liten drönare, men den är kapabel att flyga i 16 min och upp till 50km/h. Det finns två olika sensorsystem “3d sensing system” som består av en kamera och “vision system” som består av ultraljuds sensorerna” som är till för kortare avstånd, främst vid landning och precis hovring nära marken.

[​https://store.dji.com/guides/dji-spark-highlights/​]

(18)

Figurer 2.6.1-2.6.3 Andra smarta funktioner som “tap and fly” och “track and follow” [7],[8],[9]

(19)

3. Trådlösa kommunikationer och datornätverk

3.1 4G mobil kommunikation

4G i sverige körs det på frekvenserna 450 MHz, 800 MHz, 900 MHz och 2 600 MHz från stora torn med en hög sändningseffekt. ​I 4Gs fall kommer tusentals användare vara uppkopplad direkt till nätverket tex i en stad. WiFi är ett lokalt nätverk som genom en gateway är kopplat till internet, till det lokala nätverket kan enheter kopplas men på en kortare distans tex i ett hus/kontor. 4Gs fördel jämfört med WiFi att den har väldigt lång räckvidd på grund av stora master och därmed kan låta enheter långt borta kunna ansluta sig till nätverket och även då få tillgång till internet. 4G används inte heller som en kommunikationsmedel mellan endast två enheter utan över internet. I projektets fall ska operatören styra drönaren från vilken plats som helst så länge hen är ansluten till internet.

Här kommer 4G smidigt in då servern som operatören använder är uppkopplat till internet med hjälp av 4G.

Figur 3.1 ser vi hur servern får tag på servern genom funktionen def _get_token(). Detta är då inbyggd i kod biblioteket som Airpelago har redan utvecklat för sina tidigare drönare att kunna få tillgång till webbservern.

figur 3.1 - client filens uppkopplings funktion till webbserver.

(20)

3.2 Datornätverk och kommunikation

3.2.1 Hypertext Transfer Protocol (HTTP)

HTTP är ett kommunikationsprotokoll, som säger hur informationen från en webbserver hamnar på en webbsida. När man går in på en webbsida(​HTTP-klient​) skickar den en förfrågan till webbservern om att få informationen för att kunna se webbsidan. Den förfrågan skickas alltid till serverns port nr 80 som är en TCP port, mer om det i nästa avsnitt.

Förfågan inehåller information om vilken fil den vill ha och vilken version av HTTP den använder.

Om den förfrågade filen finns på servern svarar den med ett kort meddelande och filen.

Några förfrågningar kan vara:

GET​ – Ber servern att skicka den utpekade filen till klienten. Det mest använda HTTP-kommandot.

PUT​ – Skickar någon form av information till servern, om man tex laddar upp något eller skriver in text på hemsidan.

POST - ​ändrar något som redan finns på servern.

Rad 124 kollar o den kan få tillgång till hemsidan genom att först testa med HTTP

(​Hypertext Transfer Protocol) och detta är då en äldre och vanliga HTTP version. Om detta resulterar i ett meddelande från hemsidan att den blir en osäker kommunikation mellan dessa alltså att “DMC_INSECURE” så söker den en koppling med att använda “Secure”

version av HTTP, alltså HTTPS. Detta medför en extra lager säkerhet genom kryptering.

3.2.2 JSON & Requests

Vidare i rad 137 skickar applikationen en “request”, eller förfrågan till webbservern med hjälp av json, som är då en Javascript object notation. Med detta skickar den self.drone_id och self.password. Vad dessa gör är att den anropar på drone_id och password som är angivet i Pythontoserver_class och med hjälp av dessa kan den få tillgång till kommunikation till servern.

3.2.3 TCP/IP model

För att komma från en enhet till en annan via internet måste datan veta var den ska. Datan

“routas” via olika internet punkter för att hitta vägen. TCP (transmission control protokol) delar upp datan i paket som den skickar. Varje paket har en ip adress så den vet var den ska och var den kom ifrån. Så i alla routing points skickar routern vidare paketet åt rätt håll genom att avläsa ip adressen. Varje paket är som en bil på vägen, och en router är som en korsning, om det är mycket trafik på en väg kan den välja en annan väg. Det ger en enorm fördel och ett snabbare nätverk. Fördelen med att dela upp det i paket är att man enkelt kan

(21)

använda flera applikationer samtidigt tex streama musik från en applikation medans man använder tex webbläsare, skickar email och skickar direkt medelanden i en chatt.

Tcp’s viktigaste funktion är att återsända paket som tappats eller inte kom fram, för att säkerställa att rätt data kommer fram. Detta gör den genom att när mottagaren mottagit ett paket skickar den tillbaka ett “acknowledgement” som talar om att den har fått paketet. Om sändaren inte får ett acknowledgement inom en viss tid skickar den meddelandet på nytt.

3.2.4 wireless local area networks (WLAN)

Är ett lokalt trådlöst nätverk som länkar flera enheter, det gör att man kan flytta sig runt i hemmet eller kontoret och fortfarande vara kopplad till internet.Genom en gateway kopplas WLAN till internet.

3.3 Wifi

3.2.1 IEEE 802.11/WLAN

Wi-Fi är en typ av WLAN. WiFi är en standard från IEEE 802.11, Det enkla sättet att beskriva vad WiFi gör är att den tillåter ett certifierat sätt för mer än en produkt att kunna kommunicera med varandra eller också till internet. Det finns liknande system som Bluetooth som dock har sämre räckvidd och snabbhet som WiFi erbjuder. Av denna anledning har WiFi kommit att bli använt globalt och en standard för många produkter som har trådlös kommunikation. Wifi är mer känsligt för säkerhetsattacker eftersom vilken som helst inom räckvidden kan försöka ansluta. Därför för att kunna ansluta behöver användare

nätverksnamnet (SSID) och ett lösenord som är till för att kryptera wifi paketen och skydda mot avlyssning.

3.2.2 WiFi för-och nackdelar

En svaghet som WiFi har är att räckvidden, även om den är längre än bluetooth, kan inte komma att jämföras med 3G och 4G. Det betyder alltså i denna projekts fall att en operator från någon annan stad än vad drönaren befinner sig i tex kan inte styra drönaren via WiFi eftersom att räckvidden mät i ett antal meter och inte mil eller kilometer som 3G och 4G kan erbjuda från sitt system med stationer och satelliter. WiFi är dock använt i projektet för närkontakt med drönaren från applikationen eftersom att applikationen och mobilen som har applikationen sitter fast med drönare, alltså i väldigt kort avstånd vilket också gynnar de styrkor WiFi har.

3.2.3 IEEE 802.11 Kanaler

Wifi har så kallat kanalerna 1,6 och 11 till exempel. Det är numrerade frekvens kanaler för att hjälpa till att konstruera ett system där man i världen förstår vilka frekvens olika system

(22)

använder. Så i WiFi används 2.412GHz, 2.437GHz och 2.462GHz. Detta gör att mindre störningar kan ske och WiFi inte störs av andra radiosignaler som tex från 4G, Radio och andra utrustningar. Se figur 3.2 nedan. Man ser också att frekensken har en bandbredd på 22Mhz eller 11Mhz från huvud frekvensen, detta tillåter små avvikelser i signalen och, också att närliggande WiFi signaler kan använda sig av nära med inte exakt lika GHz. Detta skapar dock ökad sannolikhet för störningar med andra system då om det blir för stora avvikelser från huvud frekvensen.

I drönarens fall kommer den i sitt huvud arbets uppdrag inte behöva vara allt för nära stora radiostörningar förmodligen och då mobilen som har uppkopplingen med drönaren befinner sig fysiskt väldigt nära till drönarens WiFi modul kommer signalen vara väldigt stark av svårt att bryta.

Figur 3.2 - Frekvensområden där WiFi används. [10]

3.2.4 WiFI Protocol Stack Layers (LLC, MAC, PL)

För kommunikation med WiFi används IEEE 802.11 protocol stack. Som innehåller 3 väsentliga delar, “Logical link control”, LLC som första lagret. Denna tar hand som “Flow control” och “Error control”. Flow control och Error control tar hand om uppkopplings kvaliteten med hjälp av att bedöma avstånd mellan enheterna, i vårt fall drönaren och mobilen och sedan bestämma paket kvalite och hastighet. Till exempel så kommer snabbare men sämre kvalite paket skickas mellan enheterna om distansen är lång och därmed överföringshastigheten är lägre på grund av luften och utspridningen av signalerna i tre dimensioner. Eftersom att i projektets fall då enheterna är så nära de bara går kommer överföringshastigheten vara väldigt hög och begränsad till kvaliteten och version av WiFi mottagare/sändare som begge använder. Detta resulterar även i att störningarna och korrumperade paketförluster minimeras väsentligt.

Andra lager av protocol stacken är MAC, Medium Access Control, denna steg skickar den data som skall överföras mellan enheterna och säkerställer att de paket som skickar och mottas inte är korrupta och är av bra kvalite. Sista lagret är Physical Layer, PL, den bryter ner det fysiska signalen till signal bitar både som transmittor och mottagare.

(23)

4. Metod och Utförande

4.1 Programmeringsspråk

4.1.1 Java

Sun Microsystems år 1995 lanserade Java som är då en datorplattform samt programmeringsspråk. Java språket används i allt från hemsidor till spel och alla Android applikationer.[2 Java skapades av då frustrerade ingenjörer som ville ha ett alternativ till dåtidens C och C++ programspråk, av anledningen till att det tog upp för mycket minne och hade högre komplexitet. Java använder ett kompilering system med bytekod. Detta har både för och nackdelar då själva kompilerings processen gör den segare än andra kompilerade programspråk men när den är väl kompilerad så körs den ofta snabbare än de som nämnts innan.[3]

Java är används på Android eftersom att den har redan ett stort community av utvecklade online med väldigt stora mängder kod bibliotek och stöd. Just Java har dessutom större säkerhet i form av att appar skapas i en “sandlåda” och gör att att enskilda applikationer som körs på Android plattformen inte kan krascha hela systemet på grund av till exempel

“​buffer-overruns” och misstag med “pointers”. Ett sätt som Java ger ett ökat skydd för grund systemet och operativsystemet är att Java kör applikationerna som kan vara skadliga på VM; Virtuell Maskin. Detta gör att operativsystemets kärna inte kan bli korrupt eller skapas eftersom att alla skadliga programvara ligger på en annan nivå i systemet.

Java syntaxen kan anses vara mer tidskrävande och precis, på grund av att man måste deklarera alla variabel och dess data typ. Ett exempel på detta är den enkla deklareringen nedan:

int number = 20;

Här deklareras först data typen som är av typ “int”. Detta låter Java förstå att variabeln ska sparas av typ int, som är då integer och därmed en siffra utan decimaler. Efter datatyp deklareringen kommer variabel namnet “number” som kan väljas fritt då detta är bara ett namn för att anropa datan. Efter att man har deklarerat datatypen och variabeln ges den en data i form av 20, som då är också av typen int. Detta gör att när man anropar på nummer, så kommer en data av typen int ut. Ett exempel på när detta är viktigt bland annat i vår kod är när vi med hjälp av Chaquopy får data på position i form av latitude och longitude på världskartan. Detta kan till exempel vara 59.33258 som latitude och det är den verkliga latituden av Stockholm.

double tLat = Double.​parseDouble​(stringS[1]);

Här ser vi att tLat (takeoff latitude) är variabel namnet och i datatypen double då man vill ha hög precision i form av fler decimaler och Double. ​parseDouble​(stringS[1]) anropar värdet för atitude från tidigare i koden på MainActivity.Java.

(24)

4.1.2 Python

Python utvecklades av en man vid namn Guido van Rossum år 1991, programmet är Objektorienterad, Imperativ, Funktionell och Procedurell.[4] Python är enklare att förstå och använda sig utav än många motståndares språk på grund av deras syntax. Den är välgjort för servrar, matematiska och statistiska beräkningar och det finns gott om kodbibliotek för programmet, bland annat på stackoverflow. Python olikt Java tex behöver inte vänta på kompilering och täcker både imperativ och objektorienterad paradigmer.

Figur 4.1 - Pythontoserver.py Import functions

I denna figur visar hur Python importerar bibliotek från Pythons standardbibliotek med att anropa på threading och logging som är inkluderat i biblioteket med hjälp av “import”

kommandot. Detta kan man jämföra med Javas likvärdiga kommandon på figur 4.2 som också då är bara “import” och sedan vad som ska importeras.

Figur 4.2 - Pythontoserver.py Import functions

Här ser vi likheter mellan Python och Java. Där de skiljer sig och anledningen till att Airpelagos server till exempel använder sig utan Python programmering där den oftast

(25)

upplevs som ett enklare språk att använda sig utav. Figur 4.3 visar hur Java i MainActivity.Java gör en public void och sedan skapar en loop bland annat. Detta innehåller flera klammer i rätt ordning för att Java ska förstår uppbyggnaden av funktionen.

catch (InteruptionException e) efter Thread.sleep kommandot rad 25 så att för att Java ska förstå att om kommandot tidigare misslyckas att det ska då ge en error även fast detta är orimligt då det inte kan hända.

Så till detta motsvarar Python en betydligt enklare syntax som förbjuder användning av klammer och användning av mellanslag istället för uppbyggnaden av kod struktur, detta är då betydligt enklare att programmera med då det också involverar färre knappslag från tangentbordet och därmed färre mänsklig fel vid kodning. Dessutom finns koden viktigare delar istället för klammer som tar värdefull plats i koden.

def on_start_mission(self,msg):

starT=1 global starT

Detta är en funktion från Python koden i programmet som anropas och ändrar starT variabeln från 0 till 1 och därmed förmedlar till servern att “Mission” är uppladdat och redo att köra. Här ser man också att inga klammer användes, och det finns ingenting som definierar ett slut på funktionen utan det förstår Python av sig själv. PHP är det andra vanligare programmeringsspråket används för web servers, lika enkelt som Python men Python i sådana här sammanhang när den ska kommunicera med Drönare och andra mer tekniska arbeten ger Python en frihet som PHP inte kan ge. Detta till exempel att man kan importera moduler enkelt och automatiskt med Python som är en manuell och längre process i PHP. I projektet används många olika moduler och kodbibliotek för att göra arbetet lyckat, där hjälp Python oss väldigt mycket, exempel på dessa finns i figur 4.1 till exempel.

(26)

Figur 4.3 - Loop funktion från MainActivity.Java.

4.1.3 Chaquopy

Chaquopy är i detta fall en applikation som är riktat åt utvecklare som ska då modifiera denna applikation till sina behov på Android Studio. Den tillåter fri användning av två olika programmeringsspråk att kommunicera med varandra (i detta fall Java och Python) och i en applikation. Med antingen Java API eller Python API kan man skriva applikationen med vald API (Application Programming Interface) språket och lägga till kod i moduler från det andra språket. Chaquopy fungerar då även med Androids inbyggda standard bibliotek där Android Studio är en Java baserad apputvecklingsplattform men med hjälp av Chaquopy integration kan Python filer läggas in i plattformen och kommunicera med Java filer, metoder och funktioner utan förhinder där instruktionerna för detta kan finnas på deras hemsida.[5]

För att försöka förstå precis hur Chaquopy används av systemet är det bra att visa ett exempel på hur Java och Python kan kommunicera med varandra.

Nedan har vi ett exempel från projekt koden från Java respektive Python innuti Applikationen. I detta scenario sker då applikationen startas från början och client.spin skall startas. client.spin är då vad som startar kommunikationen mellan applikationen och webbservern. För att göra detta när applikationen är startad så måste Java koden som först

(27)

startas av Android då anropa på Python koden. Det gör det med att använda Chaquopys inbyddga bilbiotek:

Java(MainActivity.Java)

import com.chaquo.Python.PyObject;

import com.chaquo.Python.Python;

Därefter när PyObject och Python är importerat till applikationen så kan man anropa på Python filerna med hjälp av koden nedan:

Java (MainActivity.Java)

pyobjektet = py.getModule("Pythontoserver");

pyobjektet.callAttr("Pythontoserver_class").callAttr("main");

Vad detta har nu gjort är att använda getModule och callAttr med hjälp av Chaquopys moduler för att kunna anropa funktionen nedan genom att skriva just py.getModule("Pythontoserver") för att först importera modulen, i detta fall vår Pythontoserver filen och sedan när den är importerat som en PyObject så kan vi med hjälp callAttr kalla på själva klassen Pythontoserver och sedan funktionen som vi vill anropa på, alltså main. Nedan ser vi då main som i detta fan är en funktion och är då skrivet i def main() formatet nedan:

Python (Pythontoserver.py) def main(self):

t = threading.Thread(target = self.spin) t.daemon = True

t.start()

self.client.on("set_mission", self.on_set_mission) self.client.on("start_mission", self.on_start_mission)

4.2 Android och Android studio

Android studio är den officiella integrerade utvecklingsplattformen (IDE) för Android applikationsutveckling. Det är ett system gjort för utveckling av applikationer för Android plattformen hittad i majoriteten av världens alla mobila enheter. Den är baserad på IntelliJ IDEA, ett Java baserat integrerad utvecklingsplattform som även använder dess utvecklingsmetoder och kod manipulering.

(28)

Programmet lanserades år 2013 på en Google I/O event och den första stabila versionen släpptes år 2014. Den använder sig utav en Gradle baserat bygg system som kan emulera en stor variation av Android mobiler och i olika Android operativs versioner.[11]

4.3 DJI och DJI SDK

DJI är ett Shenzhen baserat företag startad av Frank Wang som studerade på Hong Kong University of Science and Technology. Med en stor fokus utomlands och kunskap om styrsystem för multirotorer. De tillverkar multirotor drönare, allt från 1 kg för hobbybruk och upp till 11kg för mer professionell filminspelnings till exempel.[7] DJI drönare kan styras via given radio controller 2.4Ghz och även med mobilen via wifi. Mobilen används också som skärm där videon från drönarens kamera visas live.

DJI har mobila SDK(system developer tools) för IOS och Android, med detta kan man via Android Studio utveckla en applikation som kan ta användning av DJI funktioner tex, styra flygkontrollen, se telemetri, sensor data, kamerastyrning, live video feedback, förutbestämda rutter med waypoints och batteriinformation med mera.[8]

Man kan alltså på Android Studio installera deras SDK och använda funktioner som pratar med drönaren och bygga in den i en applikation. De har väldigt avancerade missions som till exempel: “follow me mission” som följer efter controllern/mobilen. “Tapflymission” som tar hjälp av kameran, man trycker på bilden var man vill åka så åker den dit av sig själv.

4.4 Airpelago’s användargränssnitt

4.4.1 Dronemissioncontrol

Då det är en server hos Airpelago som drönaren ska via 4G anslutas till så finns en dedikerad hemsida dronemissioncontrol.com som ansluter sig till en global karta och kan direkt kommunicera med aktiva drönare. Det är då på denna hemsida som länken mellan drönaren ifråga ska kunna kommunicera med servern, detta blir då visuellt på den live kartan som den erbjuder. Figur 1 är ett exempel på hur det kan se ut när en drönare är

aktiv.[14]

(29)

figur 4.4 - Visar hur användargränssnittet kan se ut på hemsidan [15]

Drönaren ska kunnas styra från en kontor från varsomhelst i Sverige och där görs det via hemsidan Dronemissioncontrol.com, där kommer drönaren dyka upp som en gul pil när den blir aktiv och online. Detta kan då styras genom att trycka på den och trycka vidare på knappen “Take Control”. Då detta sker har man då kontroll över drönaren, detta innebär också att inga andra kan ta kontrollen från dig utan att begära om det. När du väl har kontrollen ska man placera ut “Waypoints” som vägleder drönaren till en destination. När valda waypoints är utlagda skall man trycka på “Upload” som överför informationen om att waypoints till drönaren och drönaren blir då redo att börja sitt uppdrag. Man kör igång uppdraget genom att trycka sedan på popupen om att starta “Mission”. se även åter figur 4.4 för hur detta kan se ut.

4.5 Implementering

4.5.1 Android och DJI

Det första viktiga är att se till att kopplingen mellan DJI drönaren, i detta fall DJI Spark har uppkoppling via WiFi till Android applikationen som ska vara grund och botten av kopplingen mellan Airpelago’s server och drönaren. Det genomfördes genom att använda sig utan DJI

(30)

SDK gjorda för mobila enheter som ska kontrollera och kommunicera med DJI drönare. SDK och DJI basic funktioner integrerades till applikationen genom Android Studio.

4.5.2 DJI SDK (system developer tools)

DJI SDK hämtades till Android studio som möjliggjorde att vi kunde använda deras inbyggda klasser metoder och anrop för att styra drönaren. Det första steget är att upprätta en connection mellan drönaren och mobilen. För detta användes DJI klassen

“ConnectionActivity.Java”, som bland annat kollar wifi, mobilens och drönarens tillstånd och öppnar permissions på mobilen som att skriva/läsa data, GPS position, internet med mera.

När den har upprättat en framgångsrik koppling ändrar “Open” knappen färg från grå till blå.

När man klickar på den. (Den har en Click Listener, rad 250). Rad (252) och (252) kollar vilken knapp som trycks och kör sen utifrån det raderna under respektive knapp, i detta fall knappen”btn_open”

​figur 4.5. metoden onClick lyssnare

Då byter den aktivitet(rad 254) till MainAcivity i Java som är själva huvudkoden. Den är linkad med MainAcivity.xml fönstret som då öppnas på mobilen.

(31)

Figur 4.6. appens startsida [12]

Main Activity

Vi började med enkla funktioner som batterispänningen, där metoden var:

1. importera DJI batteriklass.

2 skapa ett batteriobjekt.

3 anropa funktionen i DJI klassen som returnerar värdet.

Värdet sparas i en variabel som skrevs ut i en textruta på mobilskärmen.

Det gjordes samma procedur med ett flight controller objekt som man genom att anropa kan få data och även starta DJI funktioner, Till exempel lade vi till en knapp: “btn take off”. som vid tryck startar flightController.startTakeoff() (rad 368) som gör att drönaren lyfter till en meters höjd och stannar där och hovrar. Den använder automatiskt GPS och nedåtpekande avståndssensorer för att hålla en helt stilla position.

(rad 370) visar ett error meddelande från DJI ifall någonting gick fel.

(32)

​figur 4.7. Take off funktionen

Missions/uppdrag

För att starta en waypoint mission behövs följande:

● skapa en “instance” av ​WaypointMission genom att använda “builder interface”, lägg till waypoints, actions och och ändra inställningar innan.

● Kör ​checkParameters​ för att kolla att det interna tillståndet av uppdraget är godkänt.

● ladda in uppdraget till operatören genom ​loadMission​. Kolla så att det har lästs in korrekt.

● ladda upp uppdraget till drönaren genom ​uploadMission.​Kolla att det har laddats upp korrekt.

● När uppladdningen är klar så starta uppdraget genom att anropa ​startMission.

figur 4.8 metoden addwaypoints som lägger till waypoints:

(528) skapar ett waypointobjekt med indatakordinaterna.

(530) lägger till waypoints i en WaypointList.

(538) hämtar waypoints från waypointMissionBuilder så man kan kontrollera att de har laddats in riktigt.

(33)

figur 4.9 metoden configwaypointMission som lägger till parametrar:

rad (560-564) sätter parametrar för uppdraget, tex ​mHeadingmode att nosen ska peka mot den waypoint den är på väg till. ​mSpeed​ är en konstant som bestämmer flyghastigheten.

figur 4.10 metoden uploadWaypointMission som laddar upp waypoints:

(595) while-loopen väntar tills waypointMissionOperator har laddat in parametrarna och är i state “READY_TO_UPLOAD”.

(596) laddar upp uppdraget till drönaren.

(598) returnerar om uppladdningen lyckades eller inte och isåfall vad felet var.

figur 4.11 metoden startWaypointMission som startar uppdraget:

(615) väntar tills uppdraget är uppladdat till drönaren och får status

“READY_TO_EXECUTE”

(618) startar uppdraget

(34)

4.5.3 Android och Server

Sista steget när applikationen kan kommunicera inom kort avstånd och styra DJI drönaren är att gå till nästa steg, vilket innebär att Airpelago’s server ska kunna styra applikationen som sedan styr drönaren. Det gör att applikationen blir en mellanhand mellan servern och DJI drönaren. Notera att användargränssnittet på Android applikationen tas nu bort eftersom att den inte kommer användas längre för att styra drönaren utan, allt kommer ske i den interna koden i applikationen som överför serverns efterfrågan vidare till DJI och vice versa.

4.5.4 Pythontoserver.py (Pythonklass)

Anledningen till användningen av Chaquopy är att få Airpelago’s server som fungerar i ett Python miljö ska kunna kommunicera med Android Studio och vidare till DJI drönaren som är i Java miljön. Denna fil är det som Chaquopy har möjliggjort, en fil som Android applikationen kommer att kunna kommunicera med över språkgränsen. Så i detta finns alla funktioner och metoder som används för att kommunicera med Python servern, både att få och ge information till och från Android applikationen och Servern.

4.5.5 activity_main.xml

activity_main.xml är den delen i Android applikationen som skapar gränssnittet för applikation som visar saker på mobilskärmen, detta hade en stor betydelse i majoriteten av projektet då, med hjälp av tex knappar och text vyer kunna visa upp vilken slags data det är som kommer till applikationen, förbättra och kunna genomföra projektet vidare. I slutskedet när kommunikationen mellan servern och applikationen samt applikationen och drönaren är klargjort så behövs inte denna gränssnitt längre och därmed togs den ur den slutgilltiga applikationen.

4.5.6 kopplingen Java-Python-server

Hur kopplas då allt samman? datavägen från webbsidan till drönaren sker i fyra viktiga steg

1. DJI sdk:​​Hämtar och skickar data från drönaren till Javaklassen mainActivity

2. Java- mainActivity: knytpunkten för allt (Detta är applikationens huvud aktivitet som den initierar. Den utvecklades separat först, en för kommunikation till servern och en till drönaren och sedan sattes koden ihop och därmed tillåter servern att kommunicera med drönare.)

3. Chaquopy: ​tunneln mellan mainAcivity Java och Pythontoserver. Möljiggör implementering av Python i Android studio och kommunikation mellan Java och Python

4. Python - Pythontoserver ​Denna kommunicerar med servern

(35)

I MainAcivity.Java:

när knappen “start server” klickas på appen anropas startServer(). Den använder chaquopy kommandon och startar kommunikationen med Pythonfilen “Pythontoserver” .

rad(413) skapar ett pyobjekt[9] av Pythonfilen Pythontoserver

rad(414) anropar funktionen “main” i klassen “Pythontoserver_class” i samma fil som pyobjektet.

(415) anropar Java metoden loop()

figur 4.12 metoden startServer som börjar med att bygga ett pyobject:

loop()

I loopen anropas Python funktionerna “position”, “velocity_callback”, “battery_callback”och

“home_callback”. (se figur 10). Med input data till Pythonfunktionerna, som skickar sen datan till servern.

figur 4.13 Skickar data till drönaren

(36)

variablernamLatitude,mLongitude (figur 10) kommer från drönaren och använder DJI SDK metoder för att få data från drönaren.

figur 4.14 flightController - hämtar data från drönarens flightcontroller:

Det samma gäller för den andra data om hastighet, höjd, batteriinformation mm.

I Pythonfilen Pythontoserver:

(rad 25) __init__ funktionen anger ID och lösenord till servern i self.client, när applikationen ansluter sig till servern, kollar servern om det är ett giltigt id och lösenord och att rätt id är kopplat till rätt drönare.

Datan i figur 10 skickas som input till funktionerna position, velocity_callback och battery_callback som ses på figur 4.15 nedan.

(rad 30) Alla funktioner inehåller self.client.send_telemetry(). som uppdaterar servern med de nya datan.

(rad 46) spin funktionen ser till att servern och applikationen har en oavbruten anslutning.

(37)

figur 4.15 metoden för att få information från drönaren

Hur applikationen förstår att när operatären i dronemissioncontrol.com har gett en waypoint är från figur 4.16 funktionen on_set_mission som tar emot ett msg från servern som innehåller waypoint koordinater mm och detta tolkas och görs om till egna variabel i denna funktionen som senare om operatorn väljer att fullfölja uppdraget då on_start_mission aktiveras kommer variabeln starT=1 som sedan skickar den till MainActivity.Java där den säger att uppdraget skall nu starta med hjälp av return funktionen returnW i figur 13.

(38)

figur 4.16 metoder som bland annat skapar mission och returnerar värden:

4.5.7 drönare - wifi - mobil- internet- server

På en Androidtelefon kan man inte ha en WiFi och en 4G uppkoppling samtidigt, detta är ett välkänt problem för Android programmerare. Vi löste detta med att använda en tredjepartsapp: “speedify” som jämför WiFi och 4G nätet och väljer den snabbaste, man kan alltså fortfarande inte ha internetuppkoppling på båda samtidigt. WiFi på våran drönare DJI Spark är inte kopplat till internet, så appen håller kopplingen uppe till det WiFi medan den samtidigt behåller kopplingen till internet via 4G. Alltså kan vi ha dataöverföring från drönaren till mobilen som är internetuppkopplad och kan kommunicera med server.

En till bugg vi hittade var att drönaren måste minst ha två waypoints för att starta ett uppdrag.

Nu kunde drönaren skicka och ta emot data från servern.

(39)

5. Resultat och diskussion

5.1 Resulterande system

En app till en Android enhet har utvecklats. Dess huvudfunktioner är att den kan

kommunicera med en dji drönare och samtidigt fungera som en gateway till internet för att prata med en server. Vilket möjliggör full kontroll av drönaren från en webbsida.

figur 5.1 Appen visar några knappar och en live feed från kameran

figur 5.2 Appens ikon Airpelago DJI figur 5.3 Appens startskärm [12]

(40)

Dronemissioncontrol.com (se ​figur 4.4) ​används för att lokalisera och se aktiva drönare och ge dessa uppdrag. Man ser vilken som är Piloten/ har ansvaret över drönaren. Man kan också dela/ byta ansvaret mellan användare. Om man klickar på drönaren får man mer detaljerad data som återstående batterikapacitet, hastighet, position och i vilken fas av uppdraget den utför. För att göra ett uppdrag väljer man drönaren och klickar sedan på platsen man vill att den ska åka. Dessa uppdrag överförs sedan via mobilnätet till den aktuella mobila Android enheten laddat med våran Android applikation. som sedan förmedlar vidare och kommunicerar med en drönare via WiFi. Då har drönaren fått instruktioner att utföra ett visst uppdrag, sen uppdaterar den konstant servern och skickar tillbaka data. Med videon från kameran och annan system information. Så Dronemissioncontrol.com kan live följa drönaren, övervaka och även ändra uppdraget om så behövs.

Video på demonstrationen i en liten park i Turin Italien: ​https://youtu.be/-0gTXay1fo4 Ett test gjordes även där en användare i Uppsala Sverige hade kontrollen över drönaren på en parkeringsplats i Turin. Det fungerade utan delay eller problem vilket visar att systemet kan styras i nära realtid varsomhelst i världen. Så länge drönaren har internetuppkoppling dvs. Vilket i europa har nästan heltäckning. Om drönaren tappar internet uppkopplingen följer den och slutför ändå sitt uppdrag som laddats över till den i starten för att hoppas på att täckningen kommer tillbaka någonstans senare efter dess lagda rutt.

5.2 Projektplanen

5.2.1 Raspberry Pi

Projektplanen som gjordes innan projektet började ordentligt är som förutspådd väldigt vag.

Antaganden som gjordes till en början både från företaget och projektgruppen visade sig inte stämma helt mot slutet. Ett av de största exemplen är användningen av enkapseldatorer Raspberry Pi. Till en början antogs det att den skulle användas då även företagets tidigare liknande projekt med andra drönare använde sig utav det. I detta projekt spenderades mycket ursprungligt tid med att förstå och använda Raspberry Pi 2. Det började med att ladda upp linux operativsystem till Raspberry Pi med hjälpa av sd kort som har en körbar linux operativsystem för Raspberry Pi, kallad i detta fall Raspbian OS. Det kom med egna små problem som lyckades lösas så som att få tillgång till att programmera ombord på Raspberry Pi eftersom att den kräver en extern skärm som ska kopplas via HDMI. Eftersom att det blev osmidigt att arbeta med den inkopplat till en egen skärm så laddades en Virtual Machine ned på en annan dator som då styrde Raspberry Pi genom den via den här Virtual Machine. Allt detta tog mycket tid men det insågs dock väldigt långsamt men tydligt att det enklaste är att använda sig utav en Windows dator med Android Studio för att utveckla en applikation som sedan körs, inte av en Raspberry Pi utan av en mobil. Men detta kan senare även användas på en Raspberry Pi om utvecklingen fortsätter vilket har sina fördelar såsom modularitet och pengar besparing då inte alla mobilfunktioner behövs för denna applikation att fungera.

(41)

5.2.2 Tillvägagångs diskussion

Till en början tänktes det att först bygga en stabil och fungerande kommunikation från applikation till drönaren och få detta att fungera innan framsteg till länken mellan applikationen och servern. Detta sågs som en plan som skulle följas med i efterhand blev det mer självklart att tänka på och arbeta med flera delar av projektet samtidigt, för ökad förståelse för helheten och även för att se om vissa kritiska krav av projektet kunde överhuvudtaget fungera på ett önskat sätt. Detta var väldigt viktigt då, att arbeta i fel riktning kan innebära att väldigt mycket tid går i förlust.

5.3 Diskussion om utmaningar

Den största delen av projektet gick åt att förstå och använda sig utav Chaquopy vilket gav möjligheten till att enkelt kunna länka på server baserat på Python till Java applikation. Detta var inte med i en ursprunglig planering och Chaquopy var tidigare av oss okänt. En väldigt användbar verktyg som sparade på arbetstid då förståelsen för hur den används blev mer tydlig, men denna process var långsam då det är inget någon i gruppen har haft någon tidigare erfarenhet utav. I framtida projekt där liknande problem uppstår kan denna erfarenhet användas för att mycket snabbare lösa ett problem.

En annan huvudsaklig förhinder som kan ha varit mindre problematisk är kunskap om programmering på Android Studio, all programmering på projektet gjordes där och ingen i gruppen hade någon erfarenhet av denna program eller någon form av applikationsutvecklings program.

5.4 Reflektion på inlärningen

Detta projekt innebar att lära sig mycket mer om särskilt programmerings vetskap om drönare och server än det man hade lärt sig från tidigare kurser. Grunden till projektets svårighet är att kunna koppla flera olika individuella system som redan hade utvecklats ihop till ett komplett och fungerande system. Några av de delsystem som används som också har tidigare nämnts i rapporten är till exempel: Chaquopy, Android Studio, DJI SDK, DJI drönare, Python Server, Server Hemsida, Raspberry Pi, WiFi, 4G, Linux OS och utökad kunskap om Python och Java programmeringsspråk. Vissa av detta har en ingående inlärning skett på tex Android Studio och DJI SDK där många av dess avsedda funktioner har behövts användas och därmed har en betydlig kunskap om dessa utvecklat under projektet i helhet.

Med kunskap från Android studio kan projektmedlemmarna nu förstå, modifiera och även skapa helt nya applikationer för Android system som inte nödvändigtvis behöver vara relaterat till projekt arbetet. Detta är en betydelsefull kunskap att ha då Android är största mobila operativsystemet i världen och kunskap om det öppnar upp många dörrar till framtida utveckling inom den.

(42)

Liknande Android har projektet lyckligtvist fått använda sig utav DJI drönare som är som Android plattformen, världsledande och ett av de största inom sitt område, alltså drönare.

Kunskapen om DJI och deras SDK tillåter oss en fantastisk möjlighet och kunskap om hur deras inbyggda system fungerar och hur man kan manipulera den till sin användning. Då drönare ersätter och får helt nya möjligheter varje år så som tex den pågående uppbyggnaden av tex Amazon’s drone delivery system. Drönare kommer att användas till att hjälpa människor utföra arbeten som en människa har svårt att ta sig till eller förenkla arbeten. Det som gör just detta projekt så lärorikt är att vi har fått möjligheten att arbeta med DJI och Android på samma gång och det är en väldigt relevant kombination för framtida utvecklingsprojekt inom detta område.

Ända sedan projektets början till slut har en inlärning av mycket programmering skett. Det insågs tidigt att kunskap från bara Java programmering var inte tillräcklig då servern som företaget använder kommunicerar endast med Python. Det som bidrog till att applikationen fungerar med båda programmeringspråken enkelt är Chaquopy, där vi med hjälp av den integrerade de båda språken i en applikation där Java kan skicka och ta emot variabel, objekt och annat med en Python fil. Genom användning av detta genom hela projektets gång har mycket kunskap om hur lika och olika två programmeringsspråk kan vara, dessutom hade projektmedlemmarna ingen större tidigare kunskap om Python programmering överhuvudtaget. Detta var väldigt lärorikt då Python programmering även kom ut som en segrare i enkelhet att använda sig utav också.

(43)

6. Slutsats och framtida studier

I detta projekt enligt tidsramen och kraven givet utvecklades ett system att få en drönare att flyga till placerbara waypoints från en hemsida med en operatör som befinner sig varsomhelst med anslutning till internet. Detta gjordes genom att utveckla en Androidapp.

Androidenhetens huvudfunktioner är att den kan kommunicera med en dji drönare och samtidigt fungera som en gateway till internet för att prata med en server. Vilket möjliggör full kontroll av drönaren från en webbsida.

Slutsaten är att denna lösning fungerar bra utan delay och är i dagsläget den enda lösningen för att göra DJI drönare automatiserade och internet styrda. Nackdelen är att extra vikt läggs till på drönaren med en Androidenhet, eftersom ombord datorn inte har stöd för internet. Denna kan vikt kan bli försumbar på en större drönare, om man använder en raspberry pi och ett litet 4g modem istället för en mobiltelefon.

Detta är dock bara en basfunktion med tanke på potentialen som finns om längre tidsperiod av utveckling hade funnits. Funktioner som tex return to home eller landa på lämpligt ställe när kvarstående batterikapaciteten är låg, stoppa eller ändra ett mission under ett pågående mission. Lägga in kamerastyrning från webbsidan, tex att när den når slutdestinationen, stanna ovanför och vinkla ner kameran eller cirkulera runt objektet för att få alla synbara vinklar. Ha direkta kontroller för kameravinkeln på webbsidan. Den har också funktioner som tracking av objekt mm vilket är viktigt vid en båtolycka där båten ofta inte ligger helt stilla.

Utöver dessa förbättringar skulle också nya drönare testas då DJI Spark som användes till detta projekt är relativt liten och fungerar mer som en test platform för kommunikations delen. En större mer praktisk drönare har längre flygtid och kapaciteten att bära en större mängd sensorer eller en last av något slag. På en sådan större drönaren som orkar bära lite mera skulle ett servo med en krok göra att man kan leverera ett lättare objekt till exempel ett första hjälpen kit eller en flytväst eller något hjälpande medel till en strandsatt person ute i havet eller i en annan nödsituation.

Detta är då det framtida målet med projektet, men för närvarande projekt så lyckades vi göra grunden för detta, ett kommunikationssystem som möjliggör för användning av drönare från lång räckvidd med hjälp av internet anslutning med 4G mobil kommunikation och WIFI som styrs med hjälp av en hemsida där man får information om drönaren och kan ge uppdrag till drönaren att utföra som tidigare har nämnts. Det har varit en lyckad projekt och mycket kunskap om Java, Python, Chaquopy, Android studio och DJI drönare utvecklats. Med hjälp av grunden som vi har skapat kommer framtida projekt möjligtvist rädda liv.

(44)

Referenser

Dokument Online

MEMS

[1]​ ​“Inertial Measurement Units” med MEMS(​microelectromechanical systems​)

https://www.analog.com/media/en/news-marketing-collateral/solutions-bulletins-brochures/M EMS-IMU-Brochure.pdf​ [Hämtad: 2019-11-18]

Java

[2]​ ​Java som är ett programmeringsspråk .

https://www.Java.com/sv/download/faq/whatis_Java.xml​ [Hämtad: 2019-06-19]

Java Programmering

[3]​ ​För och nackdelar med Java programmering.

https://sv.wikipedia.org/wiki/Java_(programspr%C3%A5k)​ [Hämtad: 2019-06-21]

Python

[4]​ ​Python programmets historia och funktion.

https://sv.wikipedia.org/wiki/Python_(programspr%C3%A5k)​ [Hämtad: 2019-06-20]

Chaquopy

[5]​ ​Chaquopy och vad funktionen är I arbetets sammanhang.

https://chaquo.com/chaquopy/​ [Hämtad: 2019-06-20]

Android Studio

[6]​ ​ Googles mobilapplikations programmet Android studio

https://searchmobilecomputing.techtarget.com/definition/Android-Studio​ [Hämtad:

2019-06-19]

DJI

[7]​ ​DJI företagets historia och vad som skiljer de från sina konkurenter .​https://sv.wikipedia.org/wiki/DJI_Innovations​ [Hämtad: 2019-06-21]

DJI SDK

[8]​ ​Hur man hanterar DJI SDK och dess tillgångar.

https://developer.DJI.com/mobile-sdk/​ [Hämtad: 2019-06-19]

(45)

Figurer DJI Spark

[1] ​Drönaren som användes i projektet.

http://xn--drnarguiden-sfb.se/2019/january/dji-spark-test.html​ [Hämtad: 2019-11-28]

Exploderad vy av drönare

[2] En inblick på insidan av drönaren​.

https://www.youtube.com/watch?v=74Cm1p3fr0g​ ​[Hämtad: 2019-06-25]

Ultraljudsmätare

[3] ​Micro bit lesson Using the Ultrasonic Module

http://osoyoo.com/2018/09/18/micro-bit-lesson-using-the-ultrasonic-module/​ [Hämtad:

2019-06-27

Elektroniskt fartreglage

[4] ​Elektroniskt fartreglage för bldc sensorlös motor

http://xn--drnarguiden-sfb.se/2019/january/dji-spark-test.html​ [Hämtad: 2019-06-28]

BLDC Motor

[5] ​Controlling Sensorless, BLDC Motors via Back EMF By Steven Keeping. https://www.youtube.com/watch?v=ZAY5JInyHXY​ [Hämtad: 2019-06-28]

Outrunner BLDC motor

[6] ​Outrunner BLDC motor med pilar som visar hur den är uppbyggd.

https://www.researchgate.net/figure/Outrunner-BLDC-motor-generator-pc5214-2014_fig5_27 4097791​ [Hämtad: 2019-06-28]

DJI Spark

[7],[8],[9] ​Drönarens spårningsfunktion, wireframe diagram samt navigations sätt.

https://www.dji.com/se/spark​ [Hämtad: 2019-11-21]

WiFi frekvensområde

[10] Frekvensområden där Wifi används.

https://www.extremenetworks.com/extreme-networks-blog/2-4-ghz-channel-planning/

[Hämtad: 2019-06-20]

Dronemissioncontrol

[11] ​Ett skärmklipp på hur interfaces på hemsidan Dronemissioncontrol.com ser ut.

https://dronemissioncontrol.com/​ [Hämtad: 2019-06-21]

DJIFPVDemo

[12] ​Ett skärmklipp på hur interfacen på applikationen DJIFPVDemo ser ut.

https://github.com/DJI-Mobile-SDK-Tutorials/android-FPVDemo​ [Hämtad: 2019-06-13]

(46)

References

Related documents

Doftupplevelser associeras idag vanligen med den kommersiella marknaden, som genom olika produkter inom parfym har annekterat området doft.. Men doft som ett sinnligt fenomen och

Något förenklat skulle man kunna säga att § 16 ("section 16") innebär att hyresgästerna kan anställa en konsult som för mellan 50-70.000 £ (en halv till tre kvarts

Första delen är ett collage med material från en journalfilm från cykel-SM 1956 som arrangerades av Mölndals Cykelklubb.. Andra delen fokuserar på dagens cyklister och ledare

Till Halmstadkonserten beställdes ett verk av Kultur i Halland med den vaga instruktionen ”någonting med cyklar och musik” vilket resulterade i stycket Signs, Cycles, Snares för

Denna Burkes ”dramatism” kommer att presenteras närmare nedan, men i korthet kan det redan här sägas att denna fokuserar på vad som sker när människor yttrar sig om vad

Företagsgrupp betyder att Du jobbar i en mindre grupp som är integrerad i ett företag eller annan verksamhet ute i samhället.. Du har stöd av en handledare som är

Jag medger att dokumentation gällande biståndet får överlämnas till vald/valda utförare. Underskrift

För tidssteget 15 min (Figur 4a) finns för korta avstånd mellan stationerna en korrelation på ~0.4 vilken dock snabbt minskar med avståndet och är under 0.1 från ~20 km och