Category Archives: Smart Systems2013 – Bugster

Navigasjon og oppsummeringspost for Bugster

Hei bloggen!

I dag skal vi skrive om navigasjonssystemet vi har laget for Bugster og noen andre ting som er verdt å nevne før prosjektet avsluttes samt en oppsummering av prosjektet og hvor vi endte.

Utstyrsliste (bilen er satt sammen, men lista beskriver hva man trenger for at navigasjonskoden skal kjøre fornuftig):

  • Arduino Mega
  • IR-sensor til hjul
  • Ultralyd sensor
  • Hjul med enkoderhjul festet på
  • Ledninger, motstander, batteri osv

 

Navigasjon:

For å kort oppsummere hva målet med autopilot delen av Bugster er, så er det: Finne angitt mål, navigere til det angitte punktet og dersom det er hindringer skal den svinge unna, men samtidig jobbe seg nærmere måket. Når angitt punkt er nådd skal bilen stoppe.

Vi kan med glede si at dette har vi fått til! Det er noen scenarioer hvor det ikke vil virke, f.eks hvis bilen må kjøre langs en vegg et stykke før den kan kjøre rundt eller hvis punktet befinner seg bak spissen på et hjørnet. Koden for å gjøre det virker, men IR-sensorene vi skulle bruke for å se om det befinner seg en vegg på siden av bilen drar for mye strøm, så med nåværende hardware spesifikasjoner lar det seg ikke gjøre. Det som fakstisk skjer i slike scenarioer er at bilen vil snu seg mot veggen, se veggen, snu se vegg, snu tilbake, se veggen og fortsette slik til den klarer å kjøre seg helt fast. 🙁

Hvordan virker denne koden? Det er ikke noe poeng i å forklare hver minste variabel, men enkelt forklart så får navigasjon angitt ett punkt den skal kjøre til, en Y verdi og en X verdi. Hver iterasjon av programmet så sjekker navigasjon om den har nådd Y og/eller X (hvis begge er nådd så er den framme), deretter sjekker den  om bilen kjører langs Y eller X og om den skal fortsette med det. Hvis den kjører feil retning på aksen sin, eller om den har nådd verdien på denne aksen så finner den ut om den skal kjøre til høyre eller til venstre ved å se på verdien til aksen som befinner seg vinkelrett på nåværende akse. F.eks hvis angitt mål er 1,5m Y,  1,5m X og den kjører langs X aksen og når X så finner den ut at den skal svinge til venstre for å kjøre riktig retning langs Y aksen. Når et mål angis så taes det utganspunkt i at (positiv) Y verdi er foran retningen bilen ser der og da, og at (positiv) X verdi er til høyre.
Når bilen kjører så vil IR-sensorer som ser på hjulene sende interrupt hver gang den blir “rising”, da vet vi at bilen har kjørt nye x meter. navigasjonen vil da se om bilen kjører positiv eller negativ retning på aksen sin og legge til/trekke fra verdien på distanse kjørt på den aksen. Når en distanse kjørt på en akse er lik angitt distanse i målpunktet så vil bilen svinge til neste akse.

Hva skjer hvis det står en hindring i veien? I arduino sketchen som kjører hele sullabitten sjekker den ultralyd sensoren for å se avstanden til eventuelle objekter, dersom denne avstanden er mindre enn en halv meter vil den si ifra til navigasjonen om at det må skje en unnvikelse. Da sjekker navigasjonen om målet på den andre aksen er til høyre eller venstre for også svinge dit. Det er her IR-sensorer på sidene ville hindret bilen i å svinge mot en ny vegg/hindring hvis de hadde vært oppe og gått.

Enda kortere oppsummert? Bilen vet hvilken retning den peker, hvilken retning angitt X og Y er og den finner hvilke retning den bør kjøre til enhver tid. Hindringer fører til bytte av retning mot den andre vedien.

Vi har brukt et oppgradert bibliotek til ultralydsensoren, som heter newPing. Dette har støtte for blant annet timer interrupts slik at vi kan “polle” ved gitte intervall når vi måler avstand, vi bruker 24micro sekunder.

Oppsummering av prosjektet:

Prosjektet har gått ganske greit, vi har justert på kravene underveis for å komme i mål:

  • Navigasjons programmet kjøres nå på en arduino mega, og ikke på en raspberry pi som var originalplanen, dette fører til at vi bare kan ha ett mål i stedet for flere check points pga lite minne.
  • Vi droppa ir sensorer på sidene da disse fikk  resten av systemet til å knele da de fikk strøm, selv uten å legge de til i koden som kjørte eller å koble de til arduinoen(!)
    Mer feilsøking peker på at problemet var tomt batteri, men vi måtte fokusere på andre ting.

Ellers har det vært lærerikt.

Koden for prosjektet finner du her.

Bugster – En radiostyrtbil?

Hei bloggen!

Vi bestemte oss for at det hadde vært gøy med radiostyring av Bugster, både til feilsøking og underholding, og da Christian hadde en trådløs Playstation2 kontroller liggende fant ut at den skulle brukes.

Utstyrsliste:

  • Trådløsmottaker
  • Playstation2 kontroll
  • Lite breadboard
  • Arduino nano
  • Kontrollerkontakter fra Playstaion2
  • Div kabler
  • To 10k motstander

For å få så stabil og god kontakt mellom trådløsmottaker og Arduino nano som mulig demonterte jeg en Playstation2 og brukte kontrollerkontaktene fra denne, dette blei større enn beregnet da jeg ikke kunne dele disse og bare bruke en (se bilde).

Vi valgte å bruke en dedikert Arduino nano for å ta seg av jobben med å tolkesignalene fra kontrollen og sende disse videre via I2C bus. Dette fører til at systemet kan ansees som en undermodul, dette forenkler feilsøking da alt uten om I2C kan testes uten å blande inn resten av hardware / software til Bugster.

Til software brukte vi biblioteket til Bill Porter, som finnes her: http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/
Samt en egen loop som samler inn info fra knappene vi bruker, og sender den videre til mega’en.

Vi hadde problemer med støy til å begynne med pga dårlig kabling og generelt rot, men når vi ryddet opp i dette så fungerte ting som det skulle.

Under ser du resultatet:

DSC_0245

Her en video av kjøring med radiostyring.

Nå er vi godt i gang med å koble sammen Bugster og teste navigasjon.

Trådløs lader: Testing

Har vært litt sløv med blogginga underveis, så det blir mye back-tracking det her.

Kan jo starte med det viktigste først, som er at testingen av laderen omsider er fullført og at implementeringen av den ser lovende ut.

TrådløsLading_mArduino

Bildet over viser hvordan batteriene etter liten stunds lading kan drifte Arduino (Arduino er koblet i parallell med laderen). Batteriene er gamle og mister spenningen raskt, så vi må  skaffe nye.

 

Nå gjenstår bare å montere receiveren på Bugstern og kjøre en test av hele systemet driftet på batterier, samt vise at laderen fungerer. De fire batteriene leverer noe lavere spenning enn USB forsyningen fra PC’n (ca. 200mV), og jeg er litt usikker på hvilken innvirkning dette vil ha på måleresultatene til sensorene som jo da vil motta litt lavere spenning. Forhåpentligvis vil innvirkningen være neglisjerbar.

 

Om kretsen:

Selve laderen er en induktiv lader, med en rekkevidde på nesten 2 cm., ref datablad:

http://elecfreaks.com/store/download/User-specified.pdf

Transmitteren forsynes med 12V DC-spenning direkte; da holder spenningen over transmitteren seg konstant under påvirkning (Hvis jeg legger til  sikkerhetsmotstander i serie, eller måler strømmen som ledes med et amperemeter, fører motstandene i disse komponentene til spenningsfall over transmitteren når den induserer).

Når den induserer under påvirkning av receiveren, leder transmitteren mer strøm, men nøyaktig hvor mye veit jeg ikke. Det står ikke eksakt hvor mye strøm den tåler i databladet, men de testene jeg har gjort tyder på at den ikke leder urovekkende mye. Har satt en foreløpig øvre grense fra spenningskilden  på ca. 0.75 A. (Hadde i begynnelsen problemer med at maks strøm fra kilden var satt for lav, og det førte til spenningsfall over kretsen.)

Receiveren er koblet  i parallell med batteribeholderen og Arduino. Den gir 5V ut, opp til en viss avstand (ca 10mm), avhenging av lasten.

En veldig enkel krets med andre ord.

 

(Edit) Problem:

Et vensentlig problem nå er at de fire batteriene trekker alt for lite strøm, antageligvis fordi indre motstand i batteriene blir for stor og overspenningen fra receiveren for liten. Med bare 5V fra receiveren klarer ikke batteriene å trekke mer enn 1 – 2 mA. Tatt i betrakting at hvert batteri har en kapasitet på 1800 mAh hver vil det ta flere måneder å lade de.

En test viste meg at spenningen måtte opp til 6 V før batteriene klarte å trekke en akseptabel ladestrøm (200 mA), hvor ladetiden ville begrense seg til et og et halvt døgn, men dette er spenning laderen ikke kan levere.

Eneste mulighet er å redusere antall batterier med én. Vi får da  tre batterier med en samlet spenning på 3.6V. Dette er vesentlig lavere spenning, men likevel nok til å kjøre Arduino. Viktigere erdet  at tre batterier klarer å trekke mellom 300-600mA fra laderen. Ladingen vil derfor ta under et døgn.

 

Trådløs lader

Ja, da var nok tiden vel moden for min første blog post. Har de siste ukene ekperimentert med en tråløs lader til bilen vår, og meningen var å lage en ladestasjon som bilen selv kunne oppsøke ved behov.  Fordi det begynner å bli litt knapp tid igjen, blir nok dette heller et ‘proof of concept’. Det er flere grunner til dette, bl.a:

  • Receiveren gir lavere spenning enn det hovedbatteriet må ha for å lades.
  • Vi mangler en passende spenningsbooster.
  • Bilens presisjon må bedres betraktelig før den kan finne og treffe ladestasjonen helt på egenhånd.

Vi får se hva vi får til, men i første omgang er planen å bruke den tråløse laderen til å lade 4 1.2V  ladbare AA batterier som kan levere  nok spenning til å drifte Arduinoen. Et 6V hovedbatteri vil drifte motorene, men altså ikke være trådløst ladbart i denne omgang.

Trådløs lader

Bugster – Den autonome billa

Hei bloggen!

Dette er våres første blogginnlegg, så vi tenkte å starte med en introduksjon av gruppa og hva vi skal lage.

Vi er tre studenter, to fra data og en fra elektro (Even, Christian og Øystein) og vi har som oppgave å lage et autonomt kjøretøy. Målet for oppgaven er blant annet at det skal være mulig å angi et mål som bilen skal kjøre til. Bilen skal kunne klare å navigere seg fram til dette angitte målet ved å kjøre rundt eventuelle hindringer samtidig som den kjører mest mulig mot målet, uten noen form for menneskelig interaksjon. Vi har også tenkt å integrere en Playstation 2 trådløs kontroller for å kunne bruke den som en radiostyrt bil i tillegg. Hvis det blir tid ønsker vi å legge til funksjoner som vi kommer tilbake til i senere bloggposter.

Hva har vi fått til så langt? Jo, det skal vi fortelle dere!
Vi startet prosjektet med å sette oss ned i gruppa og brainstorme ønsket funksjonalitet og generelt abstrakt design. Vi kom da fram til at vi ville ha noe som kunne kjøre til et gitt mål uten å sette seg fast i hindringer. Det skulle brukes sensorer som måler avstanden til hindringer som befinner seg rundt bilen og avstand kjørt. Vi kom fram til et konsept der vi hadde en ultralyd sensor festet på en roterende servo som tok seg av måling og detektering av objekter i en 90 graders radius ut ifra fronten på bilen, det skal i tillegg plasseres sensorer som sjekker om det befinner seg objekter tett bak bilen og på sidene.
Etter vi var fornøyd med det generelle designet rundt bilen satte vi oss ned og lagde kravspesifikasjon for systemet i SySML. Etter det var gjort lagde vi et klassediagram for software delen av prosjektet. Samtidig var vi i gang med å leite fram spesifikasjoner til sensorer og annen hardware og hvordan vi programmerte opp imot disse. Da vi følte vi var ferdig med klassediagrammet tok vi en prat med Joakim som sa seg enig i at designet så fornuftig ut.
Etter litt testing av sensorer fant vi fort ut at samtlige utleverte sensorer med unntak av ultralydsensoren var defekte. Vi fikk da tak i Dag som kunne oppdrive nye sensorer som – hold deg fast – FUNKET! Nå var alt klart for å prøve å montere ting sammen. Det var ikke noe problem å få sensorene til å fungere slik de skulle, med unntak av sensorene til hjulene på bilen, her fant vi etterhvert ut at vi trengte støydemping for å få stabile verdier ut. Etter å ha laget noen enkle protokoller for å styre motorer via en driver og lese data fra ultralydsensoren satte vi sammen en enkel (og fæl, falleferdig) prototype som skulle kunne bremse ned hvis den kom innenfor en viss rekkevidde av en hindring, for også rygge bak til venstre for å unnvike for også igjen gi full gass fremover.

Resultatet kan sees her.
Her ser vi et bilde fra en av de første testmontasjene: CAM00034

På bilde ser vi  en Arduino Mega, et batteri, to motorer med påmonterte hjul og girkasser, og en driver til nevnte motorer.

Neste holdepunkt etter videoen er at vi fikk sensorene til hjulene til å lese av avstand kjørt, dvs at vi regner ut avstanden ved å se på hvor ofte sensoren treffer en eike  i hjulet. Vi har ingen video av det, men vi har fått testet at dette fungerer ved å angi at bilen skal  kjøre 3m også stoppe, det gjorde den. Tommel opp bloggen! 😀

Det var alt vi hadde for denne gang, vi regner med å kunne komme med en ny post i løpet av neste uke.