weebl Skrevet 3. februar 2012 Del Skrevet 3. februar 2012 (endret) Da tok jeg meg til slutt tid til å lage en arbeidslogg, I motsetning til de fleste arbeidsloggene her inne så er dette ikke en casemod. Back to business: Jeg studerer for tiden Artificial Intelligence and Robotics ved Aberystwtyh University i Wales og er nå godt ute i 3. året mitt og da skal det jo så klart gjøres en bachelor oppgave. Det jeg da er i gang med og vil jobbe hardt med fram til starten av mai er å implementere autonom GPS navigering på en radiostyrt bil. For å få til dette så har jeg investert i: 2 stk Arduino Pro 5v. En Bluetooth Mate Gold En LS20031 GPS enhet (som jeg drepte) Et LSM303 magnetometer med outputs for tiltkompensering En Liquidware Lithium Backpack Samt: en USB Til FTDI Converter 2 stk Logic level converters og noe annet småtteri. Og så har jeg såklart kjøpt en bil, Da gikk jeg til innkjøp av en billig sak fra hobbyking, kosta 500-ish kr inkludert et 1700mAh batteri. bilen er forsåvidt aaaaalt for kraftig og rask for mitt bruk men den klarer å holde seg nede i "gåhastighet" selv om den trives best i 40km/t Bilen: Da har jeg i alle fall starta sånn smått med arbeidsloggen! Kommer en til post i morgen med innhold av den litt mer teknologiske arten. Kommentartråd! P.S: La denne under Arbeidslogger (data og elektronikk) framfor programmering da det blir en god mix av begge deler og det er her inne folk er aktive. Om dere synes den burde være plassert under programmering, si ifra så kan jeg sikkert ordne det! Endret 3. februar 2012 av weebl 8 Lenke til kommentar
weebl Skrevet 4. februar 2012 Forfatter Del Skrevet 4. februar 2012 (endret) Som jeg lovde så kommer det da en litt mer detaljert update sånn akkurat nåh! Starter med å skrive om hva som har blitt gjort på prosjektet hittil. Det startet på en regntung (som de fleste dager i Wales er) dag i november, en mann fra UPS ringte på døra og hadde med seg en liten rød boks fra Sparkfun med dingser for nærmere 2000,- kr jeg starta å leke meg med delene og innen kort tid så hadde jeg parsing av GPS-strings inne, magnetometeret sendte meg data og arduinoen snakka med pcen min over bluetooth, happy days! En uke eller noe senere så kom det en pakke helt fra hong-kong, denne inneholdt fjernkontrol, batterilader 2 stk batteri og en radiostyrt bil som en hver gutt uansett alder fortjener å eie! Denne lille saken er mye morro for penga! og joda jeg fikk valutta for pengene, to bolter i front opphenget forsvant mens jeg "testa" den og da forsvant også "dogbonesene" eller på godt norsk framakslingene i samma slengen... men dette var bare en kjapp fiks og så var vi ute på veien igjen! Denne gangen gikk det vel og lenge bra og bilen var plutselig et beist til drifting, og drifting ble det, donuts på kjøkkengulvet ble det!.... I alle fall en liten stund før jeg dundra inn i en benk og tok knekken på hele framopphenget, Resultatet ble en bil som dere kan se i bildet under en bil som så veldig trist ut Jaja greit at dette var billige kinagreier, reservedeler kosta ikke mange kronene, men pakker fra Hong Kong tar tid! I mellomtiden så starta jeg med litt mer relevant arbeid, det første jeg brøyt meg på var: Tiltkompensering av magnetometer: "Hva er dette godt for da?" Det tenkte jeg mens jeg drev å planla ting, men dette viste seg å bli veldig nyttig! av samme grunn som at man må holde et kompass vannrett så trengs det tiltkompensering av magnetometeret. magnetometeret jeg bruker (LSM 303) sender ut 3 akser med magnetometerdata og 3 akser med aksellerometerdata, ut ifra dette kan man regne ut den tiltkompenserte kompassretningen, ut ifra kun magnetometerdataene kan man regne ut hvordan retning som er nord, men denne retningen vil bare være korrekt om magnetometeret er mer eller mindre i vater, å holde det i vater manuelt slik vi mennesker gjør med et kompass er heller tungvindt og støy fra motorer/servoer i nærheten av magnetometeret gjør at man mest sannsynlig vil ha "nord" midt i bilen konstant. men ved å bruke det innebygde aksellerometeret i brikken så kan man regne ut hvor rett ned er og dermed også regne ut hva som er horisontalen, jeg går nok desverre ikke så mye nærmere inn i matematikken og programmeringen av dette, fikk streng beskjed av veilederen min om å ikke drive å slite med dritten og å lete opp brukbar "library code" i steden for! og etter som at det er arduino og åpen kildekode vi snakker om så var ikke det mye arbeidet før jeg fant rosinen i pølsa! HER! Dette biblioteket funker glimrende og alle mine sorger med å få til tiltkompenseringen var borte, Åh som jeg elsker open source! Så fikk bilen nytt framoppheng og var så god som ny, venter riktig nok enda på to stk akslinger men de er det ikke noen stor hast med. Hva ble da neste steg? Joda, jeg kom i gang med å skrive kode for å få bilen til å kjøre i en bestemt kompassretning, eksperimenterte med PID, PI, PD og P kontrollere. alt annet enn P kontrollere ble det bare tull med, bilen kjørte noen lunde i riktig retning men det var sikk-sakk og rot hele greia, så la dette på is mens jeg leste meg opp bedre på kontrollalgoritmer for dette. og etter all denne framgangen så måtte jo ting gå galt! harddisken min tok kvelden, og som den tøffingen jeg er så tok jeg jo ikke backups! Men maskinen ble reinstallert, gratis studentbruker (micro) på github ble opprettet og backups tas rett som det er og nå er all koden synkronisert mellom lagringsområdet mitt på campus, stasjonær pcen og laptoppen min Og da var vi kommet til nåtiden: Hittil har jeg da fått ordnet: Motorstyring Kompass GPS string parsing og jeg jobber for øyeblikket med: En java app som lar meg lese sensordata og styre roboten fra en pc Forsker på kontrollalgoritmer for styringa kretskort (er lei av den kabelsalaten jeg sliter med nå!) Og i framtiden så skal jeg få ordnet: Hastighetsregulering basert på inndata fra GPS evt en encoder på et hjul waypoint navigering og kalkulasjon av retning ut ifra koordinater i et 2-dimensjonelt område (husker ikke resten kommer mer) Fram til neste gang så slenger jeg med et bilde av whiteboard veggen min, og hvordan bilen ser ut i kveld når jeg lekte med motorstyring. Føler meg litt som et ondt geni med dette massive whiteboardet! utrolig hvor mye som kan monteres med papp, gummistrikk og ledninger! Ser i ettertid at dette ble en vegg med tekst men skal sørge for å få inn mere interessant og visuelt innhold fra nå av minner også på kommentartråden Endret 17. mars 2012 av weebl 3 Lenke til kommentar
weebl Skrevet 29. februar 2012 Forfatter Del Skrevet 29. februar 2012 (endret) Beklager at det har vært stille her i det siste, har ikke vært mye spennende framgang, har oppgradert fra arduino .22 til 1.0 noe som betydde at jeg måtte oppdatere masse biblioteker og plages med dette, har også prøvd meg på å koble opp all hardwaren for å teste at alt funker samtidig, det gjorde det ikke, viste seg at nss(New Soft Serial) som jeg bruker for å opprette softwarebaserte seriell-porter for å kommunisere med GPS og kompass ikke funker samtidig som jeg bruker servoer på de nyeste versjonene av arduino, dette må jeg få sett mere på. for tiden så driver jeg å skriver masse kjedelig kode for å sende/motta og behandle koordinater fra PC, gørr kjedelig og tar mere tid enn det jeg håpte -_- satser på at jeg er ferdig med alt dette tullet neste uke, da skal jeg se om jeg får rørt sammen en dårlig prototyp. som jeg skal forbedre videre til et skikkelig funksjonelt nivå. Endret 11. mars 2012 av weebl 1 Lenke til kommentar
weebl Skrevet 9. mars 2012 Forfatter Del Skrevet 9. mars 2012 (endret) Updates for real this time: Da fikk jeg til slutt utrettet noe skikkelig arbeid, skulle sette igang nå på mandag meeeeen så ble jeg forhindret av mass effect 3 Anyways, i kveld har jeg fått gjort følgende: Produsert prototype kort sånn at jeg slipper å slite med breadboards og jumper kabler som løsner i hytt og gevær og GPS fungerer glimrende på dette kortet. Pics: Lodding av GPS kabel, forferdelig prakk med disse små puslete ledningene: Alt lodda, teipa og kjørt sammen på ett brett, i bakgrunnen er det GPS data som er parset og sendt til pcen over bluetooth: og til slutt: et blurry og jævlig bilde av litt utendørstesting: og her er da hvordan GPS dataene ser ut når de er parset gjennom tinyGPS biblioteket: Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail -------------------------------------------------------------------------------------------------------------------------------------- **** **** ******* ******* **** ******* ******* **** ******* ****** ***** *** 0 0.00 *** 261 0 0 3 420 52.41943 -4.08419 497 03/09/2012 01:52:22 529 18.70 204.52 2.91 SSW 289 108.93 ESE 508 2 0 3 420 52.41943 -4.08416 69 03/09/2012 01:52:24 89 18.70 121.03 2.19 ESE 289 108.93 ESE 834 6 0 3 420 52.41946 -4.08412 281 03/09/2012 01:52:25 301 18.70 326.44 0.22 NNW 289 108.93 ESE 1025 8 0 5 180 52.41937 -4.08419 249 03/09/2012 01:52:26 269 32.90 203.66 1.87 SSW 289 108.93 ESE 1405 10 0 5 180 52.41944 -4.08421 495 03/09/2012 01:52:28 515 25.40 11.68 1.50 NNE 289 108.93 ESE 1599 12 0 5 180 52.41938 -4.08426 694 03/09/2012 01:52:29 725 28.60 33.63 0.44 NNE 289 108.93 ESE 1904 15 0 5 180 52.41935 -4.08422 148 03/09/2012 01:52:31 168 28.60 21.96 0.41 NNE 289 108.93 ESE 2182 18 0 5 180 52.41935 -4.08421 112 03/09/2012 01:52:32 133 26.60 139.12 0.33 SE 289 108.93 ESE 2564 20 0 6 150 52.41936 -4.08422 102 03/09/2012 01:52:34 130 26.80 143.60 0.33 SE 289 108.93 ESE 2915 23 0 6 150 52.41938 -4.08421 203 03/09/2012 01:52:35 224 26.50 155.88 0.52 SSE 289 108.93 ESE 3153 26 0 6 150 52.41938 -4.08421 418 03/09/2012 01:52:36 437 26.60 79.97 0.09 E 289 108.93 ESE 3349 28 0 6 150 52.41940 -4.08421 171 03/09/2012 01:52:38 203 25.50 13.59 0.33 NNE 289 108.93 ESE 3929 32 0 6 150 52.41941 -4.08421 247 03/09/2012 01:52:39 266 25.10 345.97 0.46 NNW 289 108.93 ESE 4126 34 0 6 150 52.41941 -4.08421 459 03/09/2012 01:52:40 481 24.70 12.64 0.13 NNE 289 108.93 ESE 4322 36 0 6 150 52.41941 -4.08421 658 03/09/2012 01:52:41 692 24.20 113.65 0.17 ESE 289 108.93 ESE 4617 39 0 6 150 52.41941 -4.08421 312 03/09/2012 01:52:43 334 23.40 57.46 0.30 ENE 289 108.93 ESE 5100 42 0 6 150 52.41941 -4.08421 524 03/09/2012 01:52:44 544 22.90 134.63 0.69 SE 289 108.93 ESE 5297 44 0 6 150 52.41942 -4.08420 89 03/09/2012 01:52:46 117 22.50 184.56 0.06 S 289 108.93 ESE 5640 47 0 6 150 52.41942 -4.08421 357 03/09/2012 01:52:47 386 22.90 28.08 0.39 NNE 289 108.93 ESE 6043 49 0 Skal prøve å kutte ned så mye jeg kan på dette biblioteket da det tar opp mye plass, det eneste jeg trenger er heading, heading til neste waypoint (her vises det som london ), hastighet, avstand til waypoint og hvor jeg er atm (lat, long) må uansett prøve å minimere bruken av dette biblioteket da det tar opp forferdelig mye plass. gleder meg til å leke med mere intressant arbeid over helgen PS: om noen lurer på hvordan noe virker, evt hvordan noe gjøres, eller bare lurer på noe annet. spør i Kommentartråden, så om noen vil ha tutorials på noe så fikser jeg det Endret 9. mars 2012 av weebl 1 Lenke til kommentar
weebl Skrevet 11. mars 2012 Forfatter Del Skrevet 11. mars 2012 Miniupdate: Har rørt sammen noe kode som i teorien skal kunne kjøre roboten rett oppi gata her, men før jeg kom langt nok til å teste så kom jeg over et problem jeg hadde glemt, biblioteket softSerial som jeg bruker for å komunisere med GPS ødelegger funksjonaliteten til servo biblioteket da begge benytter seg av interrupts, så her måtte jeg lete etter en løsning, fant PWMServo av arduiniana ,som også står bak tinyGPS, egentlig imponerende at jeg ikke hadde sett lenken til dette biblioteket før -_-. Så fikk lastet ned PWMServo, trykte "kompiler", ERROR!!!!!!!! kompilatoren fant ikke wiring.h, men etter en god del leting så fant jeg løsningen, igjen var det overgangen fra 0022 til 1.0 som var problemet og jeg måtte inkludere Arduino.h isteden for wiring.h i kildekoden til biblioteket, nå funker alle delene brukbart sammen om man ser bort ifra elektronisk støy, men på veroboards så kan man ikke forvente annet Nå tar jeg kvelden, skulle gjerne testa om navigeringa funker men det får bli senere for om det ikke funker så blir jeg sittende oppe enda lengre og jeg må virkelig få snudd denne latterlige døgnrytmen. Oh! glemte nesten dette: Har også fått meg en gratis studentkonto hos github så nå har jeg Versjons kontroll og skikkelig ekstern backup og den dagen koden min ikke ser ut som et sant helvete og faktisk virker så blir repo'et i god gammeldags open-source stil åpnet for almenheten Vil anbefale alle studenter å ordne seg med en gratis githubkonto, alt du trenger å gjøre er å sende mail fra emailen din ved institusjonen til github med en forespørsel om gratis studentkonto så får du det, no questions asked. perfekt for å dele kode i felles prosjekt og til å legge opp noen prosjekter til å bruke i portfolio. 1 Lenke til kommentar
weebl Skrevet 17. mars 2012 Forfatter Del Skrevet 17. mars 2012 (endret) Houston we have a problem: REGN!!! Regn liker ikke en søt liten og sårbar robot som jeg har, så det har blitt lite testing, men har tilbringt hele dagen på labben oppe på campus hvor jeg har fikset på prototypekortet mitt da det var noe støy som plaget meg har også fått satt inn en 3.3v regulator sånn at jeg kan hente ut strømmen fra motorkontrolleren og dermed også eliminere ett batteri med alle de fordelene og potensielle ulempene det har. Så for å holde liv i loggen så skriver jeg en liten tech-update hvor jeg forklarer litt hvordan teknologien jeg bruker virker. Nå skal jeg legge til at jeg prøver å bruke en god del libraries for alt det som ligger nederst liksom så jeg vet at jeg får brukbare og gode data da mitt fokus er på styringsalgoritmer. Så i dag tar jeg for meg Kompass og Tiltkompensering Hvorfor? Alle som har lekt med et kompass før vet at du må holde det tilnærmet horisontalt, det samme ser du ombord i båter hvor det flyter i en glasskule eller lignende, om det ikke er horisontalt måles det feil retning da tyngdekraften m.m. påvirker nåla. Et elektronisk kompass har ikke noen nål, det fungerer ved at man har 1,2 eller 3 magnetometer som måler styrken til et magnetisk felt, hvert av disse er plassert i hver sin akse (x,y,z), uten å gå mye mer inne i detalj om hvordan et magnetometer er på innsiden så er det i hovedsak en regulerbar resistor som reagerer på endringer i det magnetiske feltet rundt den. Dermed er det også ganske logisk at om kompasset ikke holdes i vater så vil du få målinger som ikke stemmer (i alle fall utifra det man mest sannsynlig forventet). Nå skal ikke jeg gå inn i den faktiske matematikken i å regne ut heading da dette fort blir komplekse greier og jeg roter garantert til det men tar for meg kalkulasjonene i pseudokodesnutter. Så jeg starter med den enkleste formen for utregning av heading: atan2 er en funksjon innebygd i c++ som lar deg sende to verdier, i dette tilfellet x og y aksen fra kompasset og få ut den inverse tangensen av disse to verdiene i radianer. heading = atan2(y, x) For å få et tallformat vi enklere kan behandle så må vi regne om radianene til grader som i alle fall er mere logisk i mine øyne headingDegrees = heading * 180/Pi; Dette vil da gi ut heading eller på godt norsk kursen på en relativt primitiv og sårbar måte. Den gode (og mye mer kompliserte metoden) også kalt tiltkompensering. Skal man kun bruke kompasset sitt i et miljø hvor det vil bli holdt i vater er den tidligere metoden helt grei, men nå er jo den virkelige verden sjelden så optimal så det må i alle fall jeg gå bort ifra. Kompasset slik det funker i det tidligere eksemplet fungerer mer eller mindre som et kompass i den virkelige verden, det måler ut ifra to akser som er paralelle med det magnetiske feltet, holder du kompasset skeivt så mister man en del av styrken fra det feltet og målingene blir feil, dette skal vi kompensere for ved å bruke z aksen til å få målt det vi ellers mister, men for å kunne vite dette må vi vite "hvor z peker" dette gjøres ved å slenge inn et 3-akset aksellerometer, eller i mitt (og mange andre) tilfeller så er begge disse delene integrert i samme IC, på enkelte dyrere modeller så er det også integrert en microkontroller som regner ut dette for deg og spytter ut ferdig tiltkompensert kurs. Ok, da kommer det da litt mer pseudokode som jeg også forhåpentlig vis klarer å sånn halvveis forklare hvordan fungerer på et noenlune matematisk nivå: xKompensert = magnetometerX * cosPitch + magnetometerZ * sinPitch; yKompensert = magnetometerX * sinRoll * sinPitch + magnetometerY * cosRoll - magnetometerZ* sinRoll * cosPitch; Denne koden gir ut både x og y i tiltkompensert form, så alt man trenger å gjøre da er å kjøre de gjennom den samme funksjonen som ble brukt tidligere og man vil nå få tiltkompensering opp til rundt 40 grader. Enkelt sagt så bruker man denne koden for å finne en vektor for "rett ned" og vektoren nord, kryssproduktet av ned og nord blir øst som da lar oss forme et 2-dimesjonelt plan som kurs vektoren vår blir lagt ut på og den faktiske kursen vår er da vinkelen mellom kurs vektoren og nord. Nå vet jeg dette ble forklart veeeeldig enkelt, men det er en del tricky matematikk bak dette og jeg er ikke så sykt stødig på dette, i alle fall ikke kl. 6 på morgenen, men jeg håper dere forsto konseptet om dere vil lese mer om dette så anbefaler jeg et tutorial som jeg har lest og basert meg på: https://www.loveelec...rduino-tutorial selv om det er lett og greit å bruke biblioteker som jeg gjør så synes jeg det er viktig å ha kunnskap om den underliggende funksjonaliteten Nå håper jeg bare på brukbart vær for jeg har skrevet en PD kontroller som trenger litt tuning og testing før jeg kan komme med en liten forklaring på hvordan den funker og litt bevis på at roboten ruller og putrer avgårde på egen hånd. Og til slutt så oppfordrer jeg igjen til at dere tar en titt innom kommentartråden og legger igjen litt ris, ros eller spørsmål Endret 17. mars 2012 av weebl 3 Lenke til kommentar
weebl Skrevet 22. mars 2012 Forfatter Del Skrevet 22. mars 2012 (endret) Progress so far: Har hatt en uke med fantastisk flott vær, har fått skrevet litt mer kode, ikke noe revolusjonerende enda men prototype koden min blir bit for bit pen, ryddig og mulig å vise fram. I morgen så kommer jeg nok til å være på labben i en god del timer, skal montere en plexiglass plate oppå bilen som jeg kan montere kretskort osv på, gjør livet mitt mye enklere enn det er nå som jeg bruker idiotiske løsninger med teip og gummistrikk og en god dose håp for å montere ting. Så bare for å holde litt liv i tråden så slenger jeg inn en liten funksjon som jeg er brukbart fornøyd med, har framdeles ikke implementert automatisk motorstyring da jeg føler meg tryggere på å kontrollere hastigheten med fjernkontroll enn så lenge. void findCourse() { pos = 50; while(1) { compass.read(); compassHeading = compass.heading((LSM303::vector){0,-1,0}); int toWpt = gps.course_to(flat, flon, TO_LAT, TO_LON); if (compassHeading > toWpt - 5 || compassHeading < toWpt +5) { Serial.print("Heading: "); Serial.println(compassHeading); } else { Serial.print("Found Heading! "); Serial.println(compassHeading); pos = 0; navigate(); } delay(50); } } Uansett, denne funksjonen får bilen til å kjøre i en sirkel mens den sammenligner en heading som er regnet ut ved å sende inn nåværende koordinater(flat, flon) og neste waypoint (TO_LAT, TO_LON) til funksjonen course_to i tinyGPS biblioteket som returnerer headingen i grader som en integer. Endret 23. mars 2012 av weebl 3 Lenke til kommentar
weebl Skrevet 28. mars 2012 Forfatter Del Skrevet 28. mars 2012 Skulle poste en svær update i kveld, så tømte jeg cola i tastaturet mitt så fikk et lite ekstraprosjekt :/ anyways tastaturet er i beste velgående igjen og jeg slenger i alle fall ut noen bilder. sånn hardwaremessig så er alt i skjønneste orden nå, har mye funksjonell kode og bilen kjører rundt, planen var å ta turen ut å filme, ble da ikke tilfellet da jeg fikk et megaoppdrag med å skru ifra hverandre, vaske og skru sammen et g15 tastatur (et sant helvette) men slenger ut noen bilder. kompasset er nå montert på en mast slik at jeg skal få det vekk fra all støyen som er rundt motoren. Jeg har også lagd en plate til å montere alle komponentene på så det ser penere ut og ikke minst er enkelt å jobbe med nå 6 Lenke til kommentar
weebl Skrevet 28. april 2012 Forfatter Del Skrevet 28. april 2012 Update/gledesutbrudd: Da var bacheloroppgaven ferdigskrevet, presentasjon og demo neste uke og i den sammenhengen så kommer det litt film. Den oppfører seg ikke helt som det skal, tror det er en sammenheng mellom kompasset mitt og vibrasjoner, uansett så snart presentasjonen er levert så skal jeg tweake litt greier og så åpner jeg git-repoet jeg har jobbet i for alle 7 Lenke til kommentar
weebl Skrevet 10. juni 2012 Forfatter Del Skrevet 10. juni 2012 Enda en kjedelig update: Ja da er alt pakka sammen og både jeg og roboten er nå hjemme i Norge, etter som at den endelige GPS enheten jeg brukte var på utlån fra veilederen min på prosjektet så står ting på vent til jeg har litt penger til en ny GPS enhet, vurderer også å spytte i en tusing på en skikkelig kompassenhet så slipper jeg å styre med filtrering og greier. Mistenker også at det kommer en Raspberry PI i posten snart som også kanskje skal bygges inn i prosjektet. 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå