TSEA29 KMM

I den roligaste kursen jag läst hittills, Konstruktion med Mikrodatorer (eller KMMen som vi kallar den) fick vi bygga en autonom sexbent robot. Den skulle kunna navigera en bana med olika korsningar utan någon manuell styrning. Till vår hjälp hade vi tre mikrodatorer, två stycken ATmega1284p och en Raspberry Pi 3. Vi använde ATmega korten för att kontrollera servon och sensorer, våran Raspberry Pi hanterade kommunikation mellan dessa två kort och en extern dator som styrde själva roboten över Bluetooth. Med datorn kunde vi styra roboten i ett manuellt läge och slå på samt av det autonoma läget då roboten använde sig av sex stycken IR-sensorer för att navigera

Min roll i projektet var Mjukvaruansvarig, vilket innebar att jag tog fram kodstandarder, ansvarade för versionshanteringen i Git samt var ledande i arkitekturen av mjukvaran. Under själva utvecklingsfasen arbetade jag framförallt med programvaran som hanterade kommunikationen mellan datorn och roboten samt kommunikationen mellan mikrodatorerna där vi använde SPI. Jag hade tidigare aldrig arbetat med Bluetooth eller SPI vilket var utmanande och kul! Vi skrev mjukvaran för Raspberry Pi:n och datorn i Python 3 vilket är det språk jag är mest bekväm i och det passade väldigt bra då det finns så mycket bra bibliotek både för Bluetooth och SPI. De två största och mest intressanta utmaningarna i den här delen av projektet var att skriva en generell SPI överföring och använda flera processer för att kunna hantera kommunikationen över SPI och Bluetooth samtidigt.

Generella SPI överföringar

Vi ville kunna skicka meddelande över SPI med godtycklig längd. Därför designade vi två state machines, en för master och en för slave. För att säga när meddelanden började, slutade, när överföringen var klar och när vi väntade på att initiera en överföring använde vi oss av ascii tecknen STX, ETX, EOT och NULL. Meddelandena vi sen skicka över SPI innehöll, sensordata, rörelsekommandon och konfigurationsdata för bl.a. vår regleringsalgoritm. Till min hjälp med SPI hade jag Otto Bergdal och vill du veta mer om hur vi gjorde läs den tekniska rapporten för projektet.

Flera processer i ett program

Raspberry Pi:n var spindeln i vårt lilla kommunikationsnät, vars beräkningskapacitet vida översteg ATmega korten vi använde. Jag valde att göra ett program som startade två processer, en som hanterade Bluetooth kommunikationen med Datorn och en process som växlade mellan att hämta sensordata från den ena ATmega kortet och leverera kommandon, sensordata och konfigurationsvärden till det andra ATmega kortet. För att vi skulle kunna få sensordata till datorn och kunna skicka kommandon till roboten så behövde processerna kommunicera med varandra. Detta löste jag med hjälp av två JSON filer. Varje process hade en fil den kunde skriva till så det inte skulle bli några skrivkonflikter.

AI och reglering

Mot slutet av projektet så jobbade jag mycket med Markus Alvila på regleringen och nästan hela gruppen hjälptes åt med AI:n som tog beslut om vilket håll och när vi skulle svänga i del olika korsningarna. Något jag är väldigt nöjd med här är att trots vi bara reglerade med avståndet och vinkeln till en vägg itaget så kunde vi byta vilken vägg vi använde. Detta gjorde att vi kunde reglera oss igenom 3-vägskorsningar som vi skulle rakt fram i, börja reglera mycket tidigare efter de flesta 3-vägskorsningarna och alla 2-vägskorsningar. De andra grupperna valde att hårdkoda in en 90 graders sväng men vi använde oss av vår IR-sensor fram och de på sidan för att se när vägen framåt och från de håll vi kom var fria. Då visste vi att vi hade roterat klart och kunde börja gå framåt. Detta gjorde att även om vi kom in snett i en korsning så roterade vi tills vi stod rätt.

Mer information om projektet finns i den tekniska rapporten och du hittar koden på github.

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *