Designspecifikation Autonom Bandvagn Version 1.0 Redaktör: Johan Norberg Datum: 1 oktober 2009 Status Granskad Jonas Callmer 2009-09-30 Godkänd
Projektidentitet E-mail: Hemsida: Beställare: Kund: Kursansvarig: Handledare: Handledare: Handledare: bandvagn@googlegroups.com kommer senare Jonas Callmer, Linköpings Universitet Telefon: 013-28 23 06, E-mail: callmer@isy.liu.se Pelle Carlbom, SAAB Bofors Dynamics Telefon: 013-18 62 13, E-mail: Pelle.Carlbom@saabgroup.com David Törnqvist, Linköpings Universitet Telefon: 013-28 18 82, E-mail: tornquist@isy.liu.se Karl Granström, Linköpings Universitet Telefon: 013-28 28 03, E-mail: karl@isy.liu.se Torbjörn Crona, SAAB Bofors Dynamics Telefon: 013-18 66 42, E-mail: torbjorn.crona@saabgroup.com Johan Bejeryd, SAAB Bofors Dynamics E-mail: johan.bejeryd@saabgroup.com Gruppdeltagare Namn Ansvar Telefon E-mail @student.liu.se Erik Hagfalk (EH) Projektledare (PL) 070-254 53 31 eriha936 Johan Norberg (JN) Dokumentansvarig (DOK) 073-060 84 62 johno227 Jon Bjärkefur (JB) Navigationsansvarig (NAV) 070-862 77 37 jonbj981 Ola Tybrandt (OT) Testansvarig (TEST) 073-619 03 51 olaty661 Erik Eriksson Ianke Sensoransvarig (SA) 073-063 44 65 erier955 (EEI) Orhan Gafurovic (OG) Estimeringsansvarig (EST) 073-922 24 62 orhga172 Johan Särnbrink (JS) Modellansvarig (MOD) 070-308 33 35 johsa779 André Emilsson (AE) ARM-ansvarig (ARM) 073-507 74 68 andem364
Dokumenthistorik Version Datum Ändringar Signatur Granskare 0.1 2009-09-06 Första utkastet JS EEI AE 0.2 2009-09-22 Lagt till beskrivning av masterenheten JN JB ALLA samt navigationsenhe- ten 0.3 2009-09-25 Uppdaterad efter kommentarer JN EH ALLA från handledaren 0.4 2009-09-30 Uppdaterad efter kommentarer Alla ALLA från beställaren och kund 1.0 2009-10-01 Uppdaterad efter kommentarer från beställaren OT EEI
Innehåll 1 Inledning och bakgrund 1 2 Systemöversikt 1 2.1 Ingående delsystem........................................ 2 3 Masterenhet L1 3 3.1 Gränssnitt............................................. 3 3.2 Kommunikation med andra enheter............................... 3 4 Scoutenhet 3 4.1 Navigationsenhet L2....................................... 4 4.1.1 Sensormodul....................................... 4 4.1.1.1 Odometer.................................... 4 4.1.1.2 GPS....................................... 4 4.1.1.3 ARM-kommunikation............................. 5 4.1.2 Mobilitetsmodul..................................... 6 4.1.2.1 Estimering................................... 6 4.1.2.2 Navigering................................... 6 4.1.2.3 Reglering.................................... 7 4.1.3 Modeller.......................................... 7 4.1.3.1 Koordinatsystem................................ 7 4.1.3.2 Odometermodell................................ 8 4.1.3.3 Fordonsmodell................................. 9 4.1.4 Kommunikation med andra enheter.......................... 9 4.1.5 Nätverksmodul...................................... 10 4.2 Framdrivningsenhet ARM.................................... 10 4.2.1 Komponenter....................................... 10 4.2.1.1 Utvecklingskortet (SAM7H64)........................ 11 4.2.1.1.1 Inkoppling av utvecklingskortet................... 11 4.2.1.1.2 Programmering av utvecklingskortet................ 11 4.2.1.2 Odometrar (US Digital E5-500-188-1-S-D-3-B)............... 12 4.2.1.3 Motorer (Sabertooth 2x25).......................... 12 4.2.1.3.1 PWM................................. 13 4.2.2 Styrprincip........................................ 13 4.2.3 Kommunikation med andra enheter.......................... 14 5 Konventioner 14 5.1 Dokumentkonventioner...................................... 14 5.2 Kodkonventioner......................................... 14
Autonom Bandvagn 1 1 Inledning och bakgrund Saab Bofors Dynamics vill ta fram en bandvagn som ska kunna kartlägga olika miljöer autonomt. Projektet inleddes våren 2009 med framtagning av specifikationer, kontrollprogram, nätverkskommunikation, navigationstekniker med mera. Projektgruppens uppgift är främst att ordna framdrivningen av bandvagnen. Både manuell och autonom drift ska vara möjlig. Projektet bygger vidare på arbete utfört av projektgruppen O hara s under våren 2009. 2 Systemöversikt Systemet består i huvudsak av en masterenhet L1 och en scoutenhet. Scoutenheten består i sin tur av två delsystem, navigationsenheten L2 samt framdrivningsenheten ARM. En översiktsbild av systemet kan ses i figur 1. Masterenheten är en laptop som använder operativsystemet Linux och denna kommunicerar trådlöst med scoutenheten. Figur 1: Översiktlig systemskiss över systemet. Scoutenhetens fysiska delar består av en bandvagn av typ MMP30 samt en laptop som använder operativsystemet Linux. På bandvagnen sitter två stycken DC-motorer, en på vardera sida som driver enheten. Plattformen innehåller även två batterier som via en spänningsregulator tillhandahåller spänning till motorer och övrig elektronik i bandvagnen. På varje motor sitter en odometer och i mån av tid kommer bandvagnen att utrustas med en GPS-mottagare. I framtida projekt ska även en kamera monteras på roboten.
Autonom Bandvagn 2 Från L1 ska en brytpunktsbana kunna skickas trådlöst till scoutenheten som sedan autonomt följer denna bana. Det ska även gå att styra bandvagnen i manuellt läge. Sensordata som hastighet och position och övrig debugdata ska kunna skickas från scoutenheten till masterenheten och där visas för användaren. 2.1 Ingående delsystem De i systemet ingående delsystemen är: Masterenheten L1 Scoutenheten Navigationsenheten L2 Framdrivningsenheten ARM Kommunikation mellan de olika modulerna sker trådlöst via WLAN eller seriellt enligt RS232. Mer information kan hittas nedan under respektive delsystem. En översiktsbild över de olika C++-klasserna i respektive delsystem samt hur data hämtas och sänds mellan klasserna kan ses i figur 2. Figur 2: Översiktsbild av de olika klasser som finns i systemet
Autonom Bandvagn 3 3 Masterenhet L1 Masterenheten består av följande delsystem: Laptop Nätverk Mjukvarugränssnitt Masterenheten är en laptop med operativsystemet Linux där ett användargränssnitt körs. Från användargränssnittet skickas kommandon till bandvagnen. Bandvagnen kan endera köras i autonomt eller manuellt läge. I autonomt läge skickas en av användaren specificerad brytpunktsbana till bandvagnen som sedan ska följa denna bana. I manuellt läge skickar användaren styrkommandon direkt till bandvagnen. 3.1 Gränssnitt Det användargränssnitt (GUI) som kommer att användas på masterenheten har utvecklats av projektgruppen O hara s. Användaren kan med hjälp av GUI:t ansluta till bandvagnen och därefter skicka och ta emot data från bandvagnen. Programmet är utvecklat i C++ och använder Qt-biblioteket för det grafiska gränssnittet [2]. Vid start av programmet möts användaren av ett anslutningsfönster där ip-adressen till roboten skrivs in. Efter att anslutningen är upprättad kan styrkommandon skickas till roboten. En brytpunktsbana kan ritas upp och skickas till roboten, som sedan utför förflyttning efter brytpunktsbanan. I manuellt läge skickas styrkommandon direkt till roboten. Användaren kan via ett hastighetsreglage ställa in önskad hastighet för roboten. Med hjälp av tangentbordet kan sedan användaren styra roboten. När en tangent trycks ner sänds hastighetsinformation och rotationshastighet till roboten via det trådlösa nätverket och roboten utför sedan förflyttning enligt det önskade kommandot. Gränssnittet visar också avlusningsdata från roboten. 3.2 Kommunikation med andra enheter Masterenheten kommunicerar med scoutenheten via WLAN där data skickas i båda riktningarna. Navigationsenheten skickar data då masterenheten begär data. För att kommunicera med scoutenheten, som fungerar som server, ansluter masterenheten till scoutenheten genom att ange navigationsenhetens ip-nummer. Data loggas till fil när den ankommer till masterenheten. 4 Scoutenhet Scoutenheten består av två stycken delsystem, navigationsenheten L2 samt framdrivningsenheten ARM. Kommunikation mellan scoutenheten och omvärlden sker genom navigationsenheten till masterenheten via WLAN.
Autonom Bandvagn 4 4.1 Navigationsenhet L2 Navigationsenheten består av en laptop och sitter på bandvagnschassit. Den har tre huvudsakliga uppgifter: Sköta kommunikationen mellan masterenheten och scoutenheten. Beräkna styrsignaler till framdrivningsenheten utifrån nuvarande position, orientering, hastighet och önskad position. Samla in sensordata och tidsmärka 4.1.1 Sensormodul Sensormodulen är en egen tråd som kontinuerligt läser av värden från alla sensorer. Dessa värden sparas undan i klasser för de olika sensorerna. I sensormodulen finns publika getfunktioner som returnerar dessa värden. Sensormodulen skickar direkt vidare sensordata till nätverksmodulen. All data tidsstämplas i sensormodulen när de läses in. Formatet på tiden är i antal sekunder med decimaldel från dess att modulen startades. En annan uppgift som sensormodulen har är att ställa ut börvärden för bandhastigheterna till ARM-enheten. Detta görs via en publik funktion ActuateWS som anropas från mobilitetsmodulen. Kommunikationen med ARM-enheten sköts från en kommunikationsklass. 4.1.1.1 Odometer Odometerklassen använder ARM-kommunikationsdelen för att fråga efter odometerdata. Odometerdata tolkas sedan och sparas ner i lokala variabler. 4.1.1.2 GPS GPS är ett satellitbaserat globalt navigeringssystem. Det var ursprungligen avsett för militera ändamål, men GPS kan också förse exakt positions och tidsinformation för civila tillämpningar. Minst tjugofyra satelliter i sex omloppsbanor runt jorden utgör systemet som sänder kontinuerligt kodad positions- och tidsinformation i L-band frekvens. Signalerna tas emot och den kodade informationen används för att beräkna en position i GPS-systemets koordinatsystem. GPS är det mest populära navigationssystemet idag. GPS-mottagarna bestämmer position genom att beräkna den tid det tar för de radiosignaler som skickas från de olika satelliterna att nå jorden. Ekvationen S = T V där S=avstånd, T =tid och V =hastighet är central i beräkningar av position. Radiovågor färdas med ljusets hastighet. Tiden avgörs med hjälp av en kodmatchningsteknik inuti GPS-mottagaren. När tiden har bestämts, och det faktum att satellitens position rapporteras i alla kodade navigeringsmeddelanden, kan mottagaren, med hjälp av trigonometri, avgöra sin placering på jorden. Positionsnoggrannheten beror av mottagarens förmåga att korrekt beräkna den tid det tar för de olika satellitsignalerna att färdas till jorden. Och i detta ligger problemet. Det finns fyra primära källor till fel som kan påverka mottagarens beräkning. Dessa fel består av:
Autonom Bandvagn 5 Mätbrus i mottagaren. Fel i utsänt positionsmeddelande. Flervägsutbredning. Jonosfär- och troposfärfördröjningar i radiosignalen. GPS-mottagare kan generera positionsberäkningar i realtid med en frekvens av 100 beräkningar per sekund. Positionsberäkningarna kan matas ut via RS232 som meddelanden i NMEAformat (National marine electronics association). GPS-mottagaren som är tänkt att användas i projektet kan komma strömförsörjas via USB-porten. Det finns olika meddelande för NMEA protokollet. Några exempel är GLL,GGA och RMC. GGA formatet innehåller önskvärd data som position, höjd och tid. GGA (Global Positioning System Fix Data) meddelande ser ut enligt nedan: ($GP GGA, hhmmss.ss, ddmm.mmmm, s, dddmm.mmmm, s, n, qq, pp.p, saaaaa.aa, M, ±xxxx.xx, M, sss, aaaa cc < CR >< LF >) Fält Beskrivning $ Meddelandeflagga GP Meddelandekälla (GPS) GGA Meddelandetyp hhmmss.ss UTC-tid givet i timmar,minuter och sekunder ddmm.mmmm Latitud i grader, minuter och decimalminuter s s=n eller s=s för nord eller syd i latitud dddmm.mmmm Longitud i grader, minuter och decimalminuter s s=e eller s=w öst eller väst i longitud n Kvalitetsindikator, 0 = ingen position beräknad, 1 = position beräknad i normalläge, 2 = position beräknad i differentialläge, 9= position beräknad mha uppslagsvärden qq Antal använda satelliter vid positionsberäkning pp.p HDOP =0.0 to 9.9, horisontell precisionsutspädning saaaaa.aa Antenn-altitud M Altitudenhet, M = meter xxxx.xx Geoidal separation M Enhet för geoidal separation, M = meter sss Ålder hos differentialdata i sekunder aaaa Differential referensstationsidentitet *cc Kontrollsumma, för att kontrollera data <CR><LF> Carriage return och line feed Tabell 1: GGAs meddelande beskrivning GPS-klassen kommunicerar med GPS-hårdvaran, tolkar data och sparar ner resultatet i lokala variabler. 4.1.1.3 ARM-kommunikation I denna klass finns funktioner för att nollställa ARM-enheten, skicka styrkommandon och fråga om odometerdata. Styrkommandot som skickas till ARM-enheten innehåller två hastigheter, en för vardera band. Meddelandet som skickas har följande utseende: svxxyy. XX är två bytes som
Autonom Bandvagn 6 Uppgift Fråga Svar Ställa in hastighet svxxyy svok Hämta odometerdata updi LXXRYY Nollställ ARM-enheten rese reseok Tabell 2: Kommunikation mellan ARM-enheten och navigationsenheten. anger vänster bands hastighet i mm/s. Mest signikfikant bit är hastighetens tecken. YY anger analogt höger bands hastighet. Som svar får vi svok (set velocity ok). ARM-enheten returnerar odometerdata då den mottar kommandot updi. Meddelandet som returneras har följande format: LXXRYY. XX är körd sträckändring sedan senaste mätning på vänster band i tiondels mm och YY är analogt på höger band. Den mest signifikanta biten är teckenbit. Det är även möjligt att nollställa variablerna för körd sträcka på banden i ARM-enheten genom att sända meddelandet rese. Svaret blir då reseok (reset ok). En lista över möjliga kommandon som navigationsenheten kan sända samt svar från ARMenheten kan ses i tabell 2. Sensormodulen frågar efter odometerdata 30 gånger per sekund. Hastighet till ARMenheten sätts i takt med att odometerdata mottages. 4.1.2 Mobilitetsmodul Mobilitetsmodulen körs i en egen tråd. Modulens uppgift är att hämta sensordata från sensormodulen, utföra estimering av bandvagnens tillstånd och navigera bandvagnen. I manuellt läge skickar modulen bara vidare kommandon från nätverksmodulen till sensormodulen, som i sin tur styr roboten. I autonomt läge hanterar modulen en koordinatlista och reglerar bandvagnen till målen i listan. 4.1.2.1 Estimering Estimeringsklassen hanterar de olika koordinatsystemen samt förbehandlar odometer- respektive GPS-data. Dess huvudsakliga funktionalitet är att skatta bandvagnens position. Exakt hur detta ska gå till beror på vilka sensorer som används och vad som visar sig vara mest lämpligt. Vi ska ha möjlighet att använda ett Kalmanfilter både när vi har tillgång till GPS-data och när vi inte har tillgång till GPS-data. Det kompletta Kalmanfiltret ska ha en tidsuppdateringsdel där vi använder hastighet, fordonsmodell och eventuellt utställd styrsignal för prediktering samt en uppdateringsdel med odometerdata och/eller GPS-data. För odometerdata kommer vi att använda den odometermodell som utvecklades av projektgruppen O hara s under vårterminen 2009. Mer information om modeller finns i kapitel 4.1.3. 4.1.2.2 Navigering Navigeringsklassen hanterar bandvagnens övergripande navigering. Det finns dels funktionalitet för manuella kommandon, dels för autonoma. Denna funktionalitet anropas via två olika execute-funktioner.
Autonom Bandvagn 7 Den första Execute-funktionen används i manuellt läge. L2-enheten får då in hastighet samt rotationshastighet från L1-enheten. Dessa räknas om till hastigheter för banden. Sedan utförs eventuell mättning. Vid autonomt läge undersöker Execute-funktionen först om bandvagnen ska stanna. Sedan kontrollerar funktionen om det finns nya koordinater att lägga till i navigeringslistan. Funktionen hanterar även om aktuell koordinatlista ska nollställas. Klassen tar även hand om beräkning av reglerfel i funktionen CalculateControlError. Vidare hanterar klassen den aktuella koordinatlistan med funktionen HandleTargets. Denna byter vid behov aktuell koordinat att reglera till. 4.1.2.3 Reglering När reglerfel beräknats och målkoordinat ställts in kan reglering utföras. Till att börja med kommer en enkel PD-regulator att användas. PD-regulatorn används för att reglera bandvagnens vinkel. För att ställa in denna regulator kan vi behöva utföra ett stegsvarsexperiment. För att reglera bandens grundhastigheter används en enkel if-sats. Om avståndet till aktuellt mål är mer än ett visst antal meter så används halva maxhastigheten. Annars används en hastighet som är proportionell mot avståndet till målet. Till denna grundhastighet adderas sedan de hastigheter som PD-regulatorn vill använda för att justera bandvagnens vinkel. Slutligen mättas dessa styrsignaler. I den tekniska dokumentationen från projektgruppen O hara finns ett avsnitt om utvecklingsmöjligheter, där de föreslår att man kan använda en MPC-regulator istället. Fördelen är att man då kan dra nytta av att navigationsenheten vet vilka brytpunktsmål som kommer efter nuvarande. Detta förslag kommer att testas om tid finns. 4.1.3 Modeller För att ha nytta av sensordata och för att kunna prediktera bandvagnens tillstånd behövs modeller. 4.1.3.1 Koordinatsystem Det finns fem stycken koordinatsystem definierade för systemet. Dessa koordinatsystem är: Fixt koordinatsystem (x 1, x 2, x 3 ) utgår ifrån robotens initalläge. x 1 sätts i den riktning som är rakt fram för roboten då den startar. x 2 pekar 90 åt vänster och x 3 rakt upp ur roboten. Origo i detta system anses vara robotens centrum i initialäget. Detta system kallas det fixa koordinatsystemet. GPS-koordinatsystem (x g1, x g2, x g3 ). x g1 -axel är i östlig riktning och x g2 -axel i nordlig riktning. Observera att dess orientering inte är känd vid start utan måste skattas efter hand som scout rör sig. Hädanefter kallas detta koordinatsystem det globala koordinatsystemet. Internt koordinatsystem (x s1, x s2, x s3 ) som är fäst vid scouten. Den första vektorn pekar alltid i robotens körriktning. Vid initialläget är detta koordinatsystem helt överlappande med det fixa men kommer efterhand rotera. Vinkeln från x 1 till x s1
Autonom Bandvagn 8 betecknas med ψ i intervallet ] π, π]. Detta koordinatsystem kallas det interna koordinatsystemet. IMU-koordinatsystem (x i1, x i2, x i3 ) som är fixt i det interna koordinatsystemet med origo i IMU:n. Hädanefter kallat IMU-koordinatsystemet. Kamerans koordinatsystemet (x c1, x c2, x c3 ) som är fixt i det interna koordinatsystemet med origo i kamerans optiska centrum och x 3 -axeln längs kamerans optiska axel. Koordinatsystemet kallas för kamerakoordinatsystemet. 4.1.3.2 Odometermodell Projektgruppen O hara s har tagit fram en modell för hur körd sträcka på banden görs om till en koordinat i det fixa koordinatsystemet. Den data som estimeringen får in av odometern består av körd sträcka på höger (r wheel ) respektive vänster (l wheel ) band. Först tas det föregående värdet bort för att få ändringen. (r wheel, l wheel ) ( r wheel, l wheel ) (a) Svängd vinkel (b) Ändring i koordinater Figur 3: Figurer vid omräkning av odometerdata Detta ska nu användas för att beräkna en positionsändring (i det fixa koordinatsystemet) samt en svängd vinkel ψ. Den medellängd som scouten färdats (c l - centerline i figur 3a) fås enligt c l = l wheel + r wheel 2 Vinkeln α kan då fås genom sambandet för båglängd c l = α r. Här är dock r okänd så istället identifieras sambanden (1) l wheel = α(r d 2 ) c l = αr r wheel = α(r + d 2 )
Autonom Bandvagn 9 där d är scoutens bredd (mellan vardera av bandens tyngdpunkter). Kombineras detta med ekv. (1) fås r wheel = α( c l α + d 2 ) = l wheel + r wheel + α d 2 2 r wheel l wheel = αd Vinkeln räknas allstå enligt ekvation (2). α = r wheel l wheel d Ur figur 3b ser vi att den sökta vinkeln ψ är samma som α ty (2) α + β + π 2 = π ψ + β + π 2 = π Ur denna figur fås även omräkningen till positionsändringen i kartesiska koordinater c l x s1 = sin( ψ) ψ (3) x s2 = c l (1 cos( ψ)) ψ (4) Omräkningen till de fixa koordinatsystemet kan sedan ske genom rotationsmatrisen ( ) cos(ψ) sin(ψ) R = sin(ψ) cos(ψ) där ψ är den totala vinkeln som roterats sedan start. 4.1.3.3 Fordonsmodell Projektgruppen O hara s har i sin tekniska dokumentation tagit fram en stor fordonsmodell. För att få modellen att fungera är det en del parameterbestämning som ska göras och justeringar på modellen måste eventuellt göras så att den överensstämmer hyfsat med verkligheten. Om odometermodellen ger dåliga resultat och om tid finns ger vi denna fordonsmodell en chans. Ett annat sätt att få fram en bra fordonsmodell som även är anpassad till den miljö scouten befinner sig i, är att låta scouten köra en viss initieringsrunda och sedan behandla datan i t.ex. Modelica där en fordonsmodell kan tas fram. Man kan då även få en uppfattning om hur bra modellen är. 4.1.4 Kommunikation med andra enheter Navigationsenheten använder sig av ett gränssnitt och skapar ett Socket-objekt då någon vill kommunicera med L2, på så sätt kan L2 prata med flera samtidigt. L2 är kopplad via USB till framdrivningsenheten och till masterenheten via WLAN.
Autonom Bandvagn 10 ID Namn Beskrivning 0 Heartbeat Kommando för att kontrollera att kommunikationen ej brutits. 1 Manual Styrsignaler i manuellt läge, hastighet samt rotationshastighet. 2 Automatic Styrkommandon i autonomt läge, innehåller koordinatlista. 3 ImageMeasurements Kameradata från en framtida kamera. 4 GPSData Positioner i x, y och z led från GPS:en. 5 WheelData Hastigheten hos de båda banden. 6 IMUData Data från en framtida IMU-enhet. 7 Status Statusdata som innehåller position, hastighet, vinkel och vinkelhastighet. 8 ImageProcessingData Data för en framtida bildbehandling. Tabell 3: Meddelandetyper för kommunikation mellan navigationsenheten och masterenheten. 4.1.5 Nätverksmodul Nätverksmodulen är en egen tråd som har hand om kommunikation mellan masterenheten och navigationsenheten. Den består av två klasser, en socketklass samt en nätverksklass. Socket är en hjälpklass som kapslar in hanteringen av sockets i C++ i en egen klass. Funktioner för att ansluta och lyssna på en port tillhandahålls, samt funktioner för att sända och mottaga data. Endast nätverksmodulen kommunicerar med socketklassen. Nätverksmodulen innehåller instanser av socketklassen för kommunikation till masterenheten. Vid start av programmet börjar modulen att lyssna efter en inkommande anslutning. När masterenheten ansluter går sedan nätverksmodulen in i en loop som kontrollerar om det finns data att sända eller att ta emot. Finns data att skicka, sänds denna iväg. Finns data att mottaga, tas data emot och kontrolleras. Varje meddelande består av en header följt av ett antal databytes. Headern består i sin tur av tre variabler bestående av meddelandetyp, längd utöver headern samt en checksumma. I tabell 3 visas en lista över möjliga meddelandetyper samt en beskrivning av dessa. 4.2 Framdrivningsenhet ARM Framdrivningsenheten har till uppgift att sköta regleringen av motorerna utifrån den önskade hastigheten från navigationsenheten samt sensordata från odometrarna. Den består av ett utvecklingskort (SAM7H64) från Olimex med en ARM-processor från Atmel (AT91SAM7S64) samt av två odometrar vilka är ansluta till motorerna och kopplade till utvecklingskortet. L2-enheten försörjer mikrokontrollern och de båda odometrarna med ström genom USB. 4.2.1 Komponenter Nedan följer ingående beskrivningar av komponenterna i delsystemet.
Autonom Bandvagn 11 4.2.1.1 Utvecklingskortet (SAM7H64) Utvecklingskortet vi kommer använda är framtaget av Olimex och är av typen SAM7H64. På utvecklingskortet sitter en ARM-processor med 64 Kbyte flashminne som kommer hantera all kommunikation med navigationsenheten, motorer och odometrar. Kommunikationen med navigationsenheten kommer ske via USB och det är även via detta gränssnitt som utvecklingskortet strömförsörjs. Utvecklingskortet kommer styra hastigheterna på bandvagnens motorer genom sammankoppling av Tx pinnen på utvecklingskortet och S1 på motordrivsteget. Kommunikationen är enkelriktad TTL RS-232 från utvecklingskortet till motordrivsteget. Odometerdata kommer att samlas in och lagras på utvecklingskortet för att mot begäran skickas till navigationsenheten och för att upprätthålla önskad vinkelhastighet på motorerna genom PID-reglering. Kommunikationen är enkelriktad TTL från odometrarna till utvecklingskortet. 4.2.1.1 Inkoppling av utvecklingskortet Inkopplingen av utvecklingskortet kommer ske enligt figur 4. Figur 4: Inkoppling till utvecklingskortet SAM7H64. 4.2.1.1 Programmering av utvecklingskortet Programmeringen av utvecklingskortet görs med en ARM-USB-TINY kontakt mellan utvecklingsdatorn och utvecklingskortet. För att sköta programmeringen i eclipse miljö krävs en del inställningar.
Autonom Bandvagn 12 4.2.1.2 Odometrar (US Digital E5-500-188-1-S-D-3-B) För att mäta hur mycket hjulen på bandvagnen vrider sig används två odometrar av typen E5-500-180-I-S-D-3-B från UD Digital. Odometrarna består av en optisk sensor och en skiva med 500 markeringar som är kopplad till det hjul vars rotation man vill mäta. Sensorn känner av när den passerar en markering och ger då ifrån sig en signal. Odometrarna har 3 kanaler, CHA, CHB och CHI. CHA och CHB går höga när sensorn passerar en markering och genom att se vilken av dem som går hög först kan man avgöra åt vilket håll hjulet snurrar. Om CHA går hög före CHB, och man ser odometern uppifrån med odometerns skal vänt uppåt, roterar hjulet medsols och tvärt om. CHI går hög då hjulet har snurrat ett varv. Odometrarna matas med 5 volt från motordrivstegets 5 volt utmatning. Genom att mäta tiden mellan pulserna kan vi sedan beräkna hjulens rotationshastighet. Anslutningar: Brun - jord Violett - Index Blå - CHA Orange - +5 volt Gul - CHB 4.2.1.3 Motorer (Sabertooth 2x25) Motorerna som driver bandvagnen styrs av ett drivsteg av modell Sabertooth 2*25. Drivsteget tar emot kommandon från mikrokontrollern och lägger sedan ut lämplig spänning till motorerna. Kommandon till drivsteget kan ges på flera olika sätt, men den metod vi kommer använda är simplified serial mode. Simplified serial mode innebär att man kontrollerar båda motorerna genom att skicka ett åtta bitars tal till drivsteget via RS-232. Om talet är 1-127 kontrolleras motor ett. 1 betyder full back, 64 betyder stop och 127 betyder full fart framåt. Om talet är 128-255 kontrolleras motor två, och hastighetsregleringen fungerar på motsvarande sätt som för motor ett. Om talet är noll stängs båda motorerna av. På drivstegets ovansida finns en DIP-switch och det är med hjälp av den som man ställer in vilket läge drivsteget ska arbeta i. Det finns även ett antal andra inställningar som man kan välja med hjälp av DIP-switchen. För att välja simplified serial mode ska switch 1 vara i övre läget och switch två i undre läget. Med hjälp av switch tre kan man välja en funktion som heter lithium cutoff, som gör att drivsteget varnar om batterierna håller på att bli urladdade. Lithium cutoff är aktiverad då switch tre är i nedre läget. DIP-switchen används i simplified serial mode dessutom för att ställa in baud rate, dvs. vilken hastighet vi skickar kommandon till drivsteget. Det finns fyra olika hastigheter och de kan ställas in med switch fyra och fem enligt figur 5. Hastigheterna 9600 och 19200 rekommenderas att börja med. Switch sex ska vara i övre läget, vilket gör att drivsteget arbetar i standard simplified serial mode. Detta används då vi inte har flera drivsteg inkopplade. Drivsteget kommer även användas för att bidra till strömförsörjningen av ARM-processorn och odometrarna. Inkoppling sker enligt figur 4.
Autonom Bandvagn 13 Figur 5: Konfiguration av DIP-switch. 4.2.1.3 PWM Som ett alternativ till simplified serial mode skulle pulsviddsmodulering, PWM, kunna användas för att få större säkerhet vid bruten kommunikation mellan ARM-enheten och motorerna. Scoutenheten är dock redan förberedd för att använda simplified serial mode varför denna metod kommer användas. 4.2.2 Styrprincip Framdrivningsenheten får styrkommandon från navigationsenheten innehållande önskad vinkelhastighet på vardera band. ARM-processorn reglerar hastigheten individuellt på varje sida och beräknar utsignaler till motorerna utifrån önskat börvärde och nuvarande bandhastighet. Nuvarande bandhastighet bestäms utifrån data från odometrarna. Regulatorerna för att reglera bandhastigheten är av PID-typ. Vi kommer använda oss av en PID-regulator med justering av I-delen för att motverka integratoruppvridning. Detta är nödvändigt då vi har begränsad styrsignal. Följande algoritm kommer användas till regulatorn: I n = I n 1 + K T s T i e n (5) v n = Ke n + I n + K T d T s (e n e n 1 ) (6) u max, v n > u max u n = v n, u min v n u max (7) u min, v n < u min I n = I n + T s T t (u n v n ) (8) där I n är I-delen, K förstärkningen, T s sampeltiden, T i integraltiden, e n reglerfelet, v n den beräknade styrsignalen, u n den verkliga styrsignalen och T d deriveringstiden.
Autonom Bandvagn 14 Justeringen av I-delen sköts av ekvation (8). När styrsignalen går in i en begränsning ger tilldelningen i ekvation (8) att I n reduceras. En tumregel för att välja T t är att välja den till T i. Övriga parametrar kommer bestämmas med hjälp av stegsvarsexperiment. Det ska vara möjligt att stänga av regulatorerna och reglera bandhastigheterna manuellt från masterenheten. 4.2.3 Kommunikation med andra enheter Framdrivningsenheten kommunicerar med navigationsenheten via RS-232 över USB. Från navigationsenheten skickas börvärden för regulatorerna till framdrivningsenheten. Framdrivningsenheten skickar tillryggalagd sträcka för de två olika banden till navigationsenheten. 5 Konventioner För att dokument och kod ska se enhetlig ut har vi kommit överens om följande konventioner. 5.1 Dokumentkonventioner Följande dokumentkonventioner ska användas: Inget stycke får sakna inledande text. Vid referering av en funktion använder man makrot texttt. 5.2 Kodkonventioner Följande kodkonventioner ska användas: Engelska ska användas vid all namngivning. Klasser har formen av substantiv i singularis, t.ex. Odometer eller namnet på modulen t.ex. NetworkModule. Metoder har formen Verb alternativt VerbSubstantiv, t.ex. Send, GetAngle. Klass- och metodnamn använder PascalCase, vilket innebär första tecknet i varje ord versalt. Datamedlemmar, lokala variabler samt parametrar använder camelcase, t.ex. operationlist. Inga understreck i namn på varken klasser, datamedlemmar eller metoder. Indentering är två positioner, mellanslag (space) inte tab. Curly-braces placeras på egen rad med samma indentering som föregående instruktion, sk. Allman indent style. Ett mellanrum runt operatorer, dock inte före eller efter parenteser i funktionsdefinitioner och funktionsanrop.
Autonom Bandvagn 15 För integrala typer används direkt anrop med värde, för större typer används konstantreferenser eller pekare. Samma för returtyper. Nedan följer ett exempel på hur kod i C++ ska formateras: c l a s s MyClass : p u b l i c ABase { p u b l i c : i n t MyMethod( i n t thisisaparameter ) ; p r i v a t e : AnotherClass data ; } i n t MyClass : : MyMethod( i n t thisisaparameter ) { i f ( thisisaparameter <= 4) { r eturn thisisaparameter 2 ; } } return thisisaparameter + 4 ; Referenser [1] Projektgruppen O hara s tekniska dokumentation. [2] Webbsidan: Qt - A cross-platform application and UI framework http: //qt.nokia.com/. [3] Projektgruppen O hara s kod. [4] Industriell reglerteknik, Kurskompendium, 2008.