Smart car, siste hardware oppdatering


Fremgang siste uken på hardware siden:
Mål for den siste uka:
1. Bli kvitt det siste av elektriske problemer og få på plass sikker og tilstrekkelig strømforsyning på batteri.
2. Opprette protokoll/encoding for mottak av kommandoer og sending av sensordata til/fra raspberry pi, og implementere metoder som håndterer dette.
3. Koble raspberry Pi til systemet og få alt til å fungere på batteristrøm.
4. Forbedre oppløsning og sikkerhet for metoder for kjøring og måling ved interrupts og timing.
5. Samle alle målinger, kildekode, kilder, og annen dokumentasjon, rydde disse, og lage en zip-fil av det som kan lastes opp til bloggen.

12V (11.2V) batteri kom ikke i tide, så vi hadde ikke batteristrøm til Raspberry Pi. Det hadde ikke noe å si siden RPi ikke hadde serial interface implementert på sin side. Aruino serial er fullstendig implementert. Ellers fungerer et 9V batteri som strømleveranse for logikk og et 6V batteri drar driverkortet og motorene. Det var ikke nok spenning/strøm fra 5V regulert ut fra Arduino Mega til å dra IR sensorer for hjul, 4 IR-switcher for krasjprevensjon og ultralyd modulen i konfigurasjonen som var satt opp, så jeg droppet 3 av IR switchene og beholdt en i front for krasjprevensjon ved kjøring fremover. Ellers ser de elektriske problemene ut til å være under kontroll. Mål 1 oppfylt tilstrekkelig.

Arduino siden av serial koblingen er fullstendig implementert, og output kommer tydelig ut. Pga prioriteringer og liten tid til å gjøre alt sendes måledata for kjørt avstand i form av transisjoner i stedet for mm, å fikse dette burde ikke ta mange timer (1-3 avhengig av uforutsette problemer eller omstrukturering av kode). Ultralyd måledata oppgies i cm, mens hastighet er i mm/s og input for kjørekommandoer er i mm distanse for frem/bak og grader for vinkler (10 grader oppløsning). Data dumpes for øyeblikket med samme frekvens som navigasjon rekalkulerer (bruker feedback til å korrigere rettning/hastighet), men kan gjøres uavhengig med egen timer relativt enkelt. Mål 2 annsees som oppfylt tilstrekkelig fra hardware (arduino og bil) siden.

Pga ting nevnt over ble ikke raspberry Pi koblet til. Mål 3 gikk bort.

Måling av hjul ble forbedret med en 32-fase rotary encoder og bruk av interrupts og timing i stedet for sampling. Resultatene ble mye mer presise, men pga slerk i det fysiske systemet (hjulene har litt dødgang på festet) og suboptimal plassering av sensoren for å sikre at transisjoner ble målt forekom spikes i hastighet. Disse ble håndtert av conditional bruk av sample ved interrupt ved å se på delta timestamp. Alle transisjoner ble timestampet og lagret i et lite array som dumpes når det nærmer seg fullt eller hvert sekund. Det ble brukt en liten sirkelbuffer for å snitte de forrige hastighetene som ble målt, og snittet av denne bufferen ble brukt til navigasjonsalgoritmene (hastighet som feedback til power når et hjul kjører lenger enn det andre). Det var ikke nok tid til å tweake ut tid/hastighet spikes som forekommer, men ved tiltakene nevnt over ble dataene stabile nok til at det ikke var noe stort praktisk problem. Mål 4 ble oppfylt som forventet.

Dump av kildekode, kilder brukt, diverse oppmålinger og utregninger, samt annen relatert/relevant info legges ved i zip linket fra public dropbox folder: https://dl.dropboxusercontent.com/u/58332293/smart_car_hardware_dokumentasjon_dump.zip
Tidligere bilder som ikke er lastet opp : https://dl.dropboxusercontent.com/u/58332293/smart_car_picture_dump.zip
Mål 5 oppfylt, men det kunne vært ryddet/sortert bedre. Arduino kildekoden er bare samlet i en stor fil, faktorisering i klasser og rydding ble prioritert lavere enn å få på plass funksjonalitet og få denne til en brukelig nøyaktighet.

Utfordringer og feilkilder underveis:
Hardware ankom / ble utlevert sent, og store obliger i andre fag i andre halvdel av semesteret (spesielt siste tredjedel) ga et veldig arbeids/tids-press på slutten av semesteret. Med mer tid kunne systemet blitt forbedret en del og gjort mer ryddig.

Det var mange elektriske problemer underveis, fra å finne koblingsskjemaer og implementere disse riktig, til kortsluttning og jordfeil (ikke lurt å putte ledninger i feil hull :P), og strømforsyningsproblemer fra batteri/arduino. En Arduino Nano (diode som er vanskelig å bytte ut i praksis) og et par ledninger støk med i prosessen (men det var mer irriterende og litt bortkastet tid enn en stor hindring), og veldig mange timer gikk med til feilsøking av elektro-problemer.

Motorene er ikke veldig nøyaktige eller likt balansert på kraft/moment, og festet til hjulene har slerk som gjør sensorplassering suboptimal. Dette gir utfordringer rundt nøyaktigheten og uniformheten til målinger.
IR trigger sensorene er oppgitt til 3-30cm rekkevidde, men i praksis er grensen rundt 15cm og da ikke pålitelig før nærmere 10cm. Dette gjorde at en aktiv brems ved å flippe motor-rettning og gi full kraft var nødvendig for å ikke krasje med ting ved toppfart. Kjeglen denne ser er mindre enn tverrsnittet til bilen, så den kan fortsatt krasje med ting som ikke synes rett frem.

Ultralyd sensoren (slik konfigurert her) hadde problemer med å oppdage tynne objekter, og kjeglen den ser er såpass stor at det er vanskelig å plassere ting uten å stå like inntil dem eller stoppe og gjøre en «sweep», og det var det ikke tid til å implementere med resten av utfordringene. Om det er flere objekter innenfor kjeglen kan også målingene hoppe mellom disse (avhengig av plassering), som er en ekstra ting å ta hensyn til når man ser på sensordata.

EDIT: glemte å bruke tilkoblede LEDs til status i siste arduino kode, det har blitt brukt under buggtesting med batteristrøm.

EDIT2: google slides presentasjon: https://docs.google.com/presentation/d/1nMYsaW7r1FLqMec0sWzp_F4ibfNtGwAnRnCxrrlolq8/edit?usp=sharing


Leave a Reply