Skip to content
KrisKorrel edited this page Jun 24, 2014 · 11 revisions

Eerste week

Dinsdag

Brainstormen over wat ons doel voor het project wordt. We hebben besloten dat we iets willen doen met een autonome drone/quadcopter.

Woensdag

Onderzoeken welke functies de drone moet hebben en welke we het beste kunnen kopen. Veel zelfbouwkits bleken een erg lange levertijd te hebben, waardoor we veel kostbare tijd zouden verliezen met het wachten op onderdelen. We hebben daarom de keuze gemaakt om een drone te kopen met een kortere levertijd. Na enig overleg hebben we besloten dat we een Crazyflie 10-DOF kopen. Deze is goedkoper dan de meeste quadcopters die aan onze eisen voldeed en is volledig open source. Deze drone heeft ook de mogelijkheid om er externe apparaten zoals een gps-module of een camera aan te sluiten. We hebben nog geen concreet plan om deze te gebruiken, maar we hebben het idee om met een gps-module de locatie van de drone te laten bepalen en de dronte te laten besturen door de meest dichtbijzijnde android telefoon.

Donderdag

We hebben deze dag gebruikt om een soldeerbout te kopen en de onderdelen van de kit aan elkaar te solderen. Ik ben begonnen aan een android app die zo nauwkeurig mogelijk zijn eigen locatie kan bepalen. Hiervoor maak ik gebruik van de standaard android api om de gps locatie te ontvangen. Vervolgens worden een aantal metingen met een hoge nauwkeurigheid opgeslagen. De locatie wordt vervolgens bepaalt door een gewogen gemiddelde te nemen van de laatste 20 metingen. De weging hangt af van de nauwkeurigheid van de meting. Als er in een gps meting beweging door de gebruiker wordt gedetecteerd worden alle metingen verwijderd, aangezien ze dan niet meer relevant zijn.

Vrijdag

Ik heb op vrijdag en in het weekend verder gewerkt aan de app. We hebben ook een gps module voor de drone besteld. Aangezien deze wel uit het buitenland komt, kan het een lange levertijd hebben.

Tweede week

Maandag

We hebben het plan gemaakt om met 1 master de drone aan te sturen. Deze kan van andere slaves (android telefoons) de locatie opvragen. Vanuit de master kan de gebruiker vervolgens kiezen naar welke android de drone moet vliegen. Door de gps- en orientatiegegevens van de drone te gebruiken zouden we de de drone autonooom moeten kunnen laten vliegen. Aangezien Bluetooth gebruikelijk een bereik heeft van slechts enkele meters en gps meestal een foutmarge heeft van enkele meters, hebben we besloten om Wifi direct te gebruiken voor communicatie tussen android telefoons. op deze manier kunnen android telefoons over een langere afstand (tot 200 meter) met elkaar communiceren. Ik ben begonnen met het implementeren van wifi direct/p2p wifi op de android app. De officiele android documentatie is redelijk uitgebreid, maar er zijn op internet weinig voorbeelden te vinden van het gebruik van p2p wifi. Dit en het feit dat ik maar een beperkt aantal telefoons heb om op te testen, zorgen ervoor dat debuggen lastig is.

Dinsdag

Ik heb verder gewerkt aan de communicatie tussen android telefoons. Het is nu mogelijk om een connectie te maken tussen twee telefoons, maar ik weet nog of het ook werkt met meer dan twee telefoons en hoe ik data moet versturen over de connectie. Hoewel we de gps module nog niet binnen hebben, heb ik wel al gekeken of en hoe we informatie van de drone, zoals gps locatie en orientatie, op de android app kunnen ontvangen. Ik kon de crazyflie hiervoor echter niet gebruiken omdat hij, na het vervangen van een kapotte motor, niet meer stabiel kan vliegen. Het is op dit moment belangrijker om dit te herstellen

Woensdag

Ik heb verder gewerkt aan de communicatie tussen android telefoons door middel van p2p wifi. Na veel te hebben opgezocht in de android documentatie en op stackoverflow ben ik erachter gekomen dat p2p wifi anders werkt dan ik in eerste instantie dacht. Bij het verbinden met andere telefoons wordt er een 'group' aangemaakt. In een group is er één group owner. andere telefoons in de groep weten in eerste instantie alleen het adres van de group owner en de group owner kent geen enkel adres van andere telefoons in de group. In een group hoort de communicatie als volgt te verlopen: een client (geen owner) stuurt iets naar de server (owner). Vervolgens doet de master iets met deze informatie en/of stuurt hij meteen een response. Om iets te versturen tussen clients of van de server naar een client, dien je zelf een protocol te maken dat de addressen van alle telefoons distribueert in de groep. Ik was eerste van plan vanuit de master de gps locatie van een slave te pollen wanneer nodig, maar om onnodig werk te besparen, heb ik de master ingericht als server/owner en pushen de clients hun gps locatie naar de master zodra ze deze binnenkrijgen.

Donderdag

Verrassend: weer aan de comm android-android. Niet heel veel verder gekomen helaas

Vrijdag

Weer aan de communicatie tussen androids. Het is na veel proberen eindelijk gelukt om enigzins te communiceren tussen 2 telefoons (nog niet meer dan dat). De gebruiker moet echter zelf aangeven wanneer het framework moet zoeken naar andere telefoons en wanneer het moet stoppen. Daarnaast was het nog allemaal erg instabiel. Als er ook maar iets fout ging moest alles volledig worden afgesloten om weer opnieuw een verbinding op te kunnen zetten. In de middag hebben Koen, Damiaan en ik ons afgezonderd en de netwerk code geintegreerd in de bestaande master en slave apps. Hierna hebben we met z'n drieen zo veel mogelijk bugs proberen op te lossen in de netwerk code. Aan het eind van de dag deed het netwerk het vaker niet dan wel. We hebben dus een spoedoverleg gehouden. Hoewel ik veel tijd heb gestoken in het opzetten van een p2p wifi netwerk, komen we er niet veel verder mee. En dat terwijl het zo'n essentieel onderdeel is van ons project. We hebben dus besloten dat ik in het weekend verder zou werken aan p2p wifi, maar dat Damiaan ondertussen zou kijken of en hoe we eventueel een bluetooth netwerk konden opzetten als back-up. In het weekend bleek dat we vrijdag toch dicht tegen de oplossing aan zaten. Na een paar kleine aanpassingen leek ik een redelijk stabiele verbinding te kunnen maken tussen twee telefoons.

Derde week

Maandag

We denken dicht bij de oplossing te zitten voor een stabiele p2p verbinding, echter bevatte onze code nog een paar bugs. Met de beperkte documentatie en voorbeelden op internet wisten we niet goed hoe we deze moesten oplossen. We hadden het geluk dat er een andere groep ook bezig was met p2p wifi. We zijn hier dus langsgegaan om om hulp te vragen. Deze groep bleek ongeveer dezelfde problemen te hebben gehad en gaf ons een paar nuttige tips. Damiaan en ik hebben hier samen verder aan gewerkt. Aan het einde van de dag konden we een netwerk maken met drie telefoons.

Dinsdag

Nu we een werkend netwerk op konden zetten, zijn Damiaan en ik gaan werken aan het verzenden en ontvangen van locatiegegevens over het netwerk. Eerst hebben we geprobeerd om de Location klasse om te kunnen zetten een array van bytes, welke we over de verbinding konden versturen. We beseften ons hierna echter dat de master ook deze gegevens van verschillende slaves moet kunnen onderscheiden, dus hebben we een eigen klasse gemaakt met zowel locatiegegevens als identificatiegegevens van de slave. Als indentificatie wilden we het MAC-adres van de slave gebruiken. Dit is namelijk de enige identificatie die de master krijgt zodra een slave voor het eerst verbindt. We kwamen erachter dat het MAC-adres dat de master ontvangt bij het opzetten van een netwerk en het adres dat de client vervolgens verstuurt over dit netwerk niet overeen kwamen. We waren onder de veronderstelling dat een MAC-adres voor elk apparaat uniek was, maar op het internet leerden we dat een apparaat zowel een globaal uniek MAC-adres heeft als een lokaal adres dat hiervan afwijkt en alleen uniek in 1 netwerk is. In de praktijk verschillen deze echter vaak slechts met maar 1 bit. Door alleen de rest van het adres te vergelijken konden we wel verschillende slaves indentificeren.