Turinys:

Sukurkite savarankiškai vairuojantį automobilį - (šis nurodymas veikia): 7 žingsniai
Sukurkite savarankiškai vairuojantį automobilį - (šis nurodymas veikia): 7 žingsniai

Video: Sukurkite savarankiškai vairuojantį automobilį - (šis nurodymas veikia): 7 žingsniai

Video: Sukurkite savarankiškai vairuojantį automobilį - (šis nurodymas veikia): 7 žingsniai
Video: AR AUTOMOBILIS BUVO DAUŽTAS? 5 BŪDAI KAIP PATIKRINTI! BŪTINA ŽINOTI PRIEŠ PERKANT AUTOMOBILĮ! 2024, Liepa
Anonim
Image
Image

Sveiki, Jei pažvelgsite į mano kitą „Instructable on Drive Robot With Remote USB Gamepad“, šis projektas yra panašus, tačiau mažesniu mastu. Taip pat galite sekti arba gauti pagalbos ar įkvėpimo iš „YouTube“„Robotics“, namų garso atpažinimo ar savarankiškai vairuojančių automobilių grojaraščių.

Pradėjau nuo didelio roboto („Wallace 4“), tačiau nuo tada, kai sukūriau vietinę „Meetup“grupę, man reikėjo kažko mažesnio masto, o grupė labai domėjosi kompiuteriniu matymu.

Taigi aš susidūriau su šiuo „Udemy“kursu: Sukurkite savo savarankiškai vairuojantį automobilį, kuris man suteikė idėją šiam projektui.

Jei jus domina „Udemy“kursas, galite ten nuolat tikrinti; jis retkarčiais parduodamas už didelę nuolaidą. Pastaba: yra 1 ir 2 dalys - turite atlikti tyrimą, kaip gauti du kursus kaip paketą (su nuolaida).

Šios instrukcijos tikslas yra dvejopas. Pirma, tam tikroms kurso dalims (pvz., Dalims ir techninei įrangai) pateikti keletą nuorodų ir alternatyvų. Ir antra, išplėsti kursą.

Pagrindinis „Udemy“kurso tikslas:

yra galimybė priversti mažą ratą su robotu savarankiškai važiuoti sumažėjusiu dviejų juostų keliu.

Ji turi atpažinti juostos juostas ir kai ji pasiekia kelio pabaigą.

Jis turi atpažinti sustojimo ženklą (ir sustoti).

Taip pat raudonas ir žalias eismo signalas.

Ji taip pat turi atpažinti kliūtį (kitą automobilį) ir manevruoti aplink ją.

Ką ši instrukcija prideda prie kurso:

Važiuokite mažu automobiliu su nuotoliniu USB žaidimų pultu, panašiai kaip šioje kitoje instrukcijoje.

Pateikite keletą alternatyvų kursui.

Jums gali net nereikėti pirkti kurso:

Ši instrukcija gali būti viskas, ko jums reikia norint pradėti.

Prekės

Esminės (siūlomos) dalys:

Roboto važiuoklė

Keturi varikliai

Arduino

Raspberry Pi (3, 3B+, 4)

Kamera (USB žiniatinklio kamera arba „Picamera“modulis)

Akumuliatoriaus galia

Įjungimo/išjungimo jungikliai

jungiamieji laidai

atsistojimai (plastikas, o gal ir metalas)

Prieš bandydami įsigyti dalių, peržiūrėkite visą „Instructable“ir vaizdo įrašus.

Atlikęs šį projektą suprantu, kad tikslios dalys nėra tokios svarbios.

1 veiksmas: daugiau informacijos apie dalis…

Image
Image
Daugiau informacijos apie dalis…
Daugiau informacijos apie dalis…
Daugiau informacijos apie dalis…
Daugiau informacijos apie dalis…

Susijęs vaizdo įrašas išsamiai aprašo dalis ir kai kurias problemas, kurias radau.

  • Apsidairykite, ar nėra skirtingų važiuoklių / variklių
  • Varikliams jau turėtų būti prilituoti laidai
  • Galbūt norėsite turėti grąžtą ir grąžtus, ARBA važiuoklę su daugiau skylių
  • Atminkite, kad svoris yra problema. Viskas turėtų būti kuo lengvesnė.
  • „L298 H-Bridge“variklio tvarkyklė puikiai veikia. PASTABA: įsigykite vieną iš varžtų gnybtų blokų (žr. Nuotrauką)
  • Tikriausiai norėsite tiek plastikinių, tiek metalinių atramų, M3 dydis tikriausiai yra geriausias pasirinkimas.

Plastikinės atramos yra tinkamos plokštėms pritvirtinti prie važiuoklės (variklio tvarkyklė, „Arduino“, „Raspberry“, maitinimo plokštė, įjungimo/išjungimo jungiklis ir kt.).

Metalinės atramos yra tinkamos surinkti važiuoklę (stiprumą), taip pat ypač tada, kai kuriate (programavimas, bandymas). Plėtrai metalinės atramos gali tarnauti kaip poliai. Kaip ir dirbdami su tikru automobiliu, norite pakelti automobilį taip, kad ratai būtų ore ir galėtų laisvai judėti. Tai labai svarbu! Jūs padarysite klaidų ir nenorite, kad automobilis tiesiog pakiltų ir sudužtų.

Gręžtuvas + grąžtai

Aš tikrai noriu pabrėžti gręžtuvo naudojimą, jei galite, ir atsargas, o ne dvipusę lipnią juostą. Labai tikėtina, kad šio projekto metu kelis kartus pašalinsite ir vėl išdėstysite savo plokštes ir tt, o juostos naudojimas tampa labai netvarkingas.

Naudojant grąžtą, jį labai lengva pakeisti (ypač jei važiuoklė yra plastikinė) ir atrodo profesionaliau.

2 žingsnis: Automobilio maitinimas kūrimo metu

Automobilio maitinimas kūrimo metu
Automobilio maitinimas kūrimo metu
Automobilio maitinimas kūrimo metu
Automobilio maitinimas kūrimo metu

Mano nuomone, greičiausias ir lengviausias būdas pradėti šį projektą yra:

  • Norėdami sukurti „Arduino“programinės įrangos eskizą, tiesiog prijunkite „Arduino“prie kompiuterio per USB
  • programinei įrangai „Raspberry Pi“turėtumėte turėti 5 V USB maitinimą, galintį tiekti bent 3 amperus. Ir jis turėtų turėti įjungimo/išjungimo jungiklį. Jei prie kompiuterio neprijungtas geras, maitinamas USB šakotuvas, greičiausiai negalėsite maitinti „Raspberry“tiesiai iš savo kompiuterio.
  • Kai būsite pasiruošę išbandyti variklius/ratus, lengviausias (žr. Nuotrauką) yra geras maitinimo šaltinis. Tačiau jie nėra nebrangūs.

Šiame skyriuje norėčiau pasakyti, kad kūrimo metu nenorite naudoti akumuliatoriaus energijos, nes tai labai sulėtins jūsų pažangą.

Be to, darydami kažką panašaus į aukščiau pateiktus pasiūlymus, neturite (kol kas) jaudintis, kaip tiksliai varysite automobilį. Šį sprendimą galite atidėti vėlesniam projekto laikui.

3 žingsnis: Automobilio maitinimas faktinio naudojimo metu

Automobilio maitinimas faktinio naudojimo metu
Automobilio maitinimas faktinio naudojimo metu
Automobilio maitinimas faktinio naudojimo metu
Automobilio maitinimas faktinio naudojimo metu

Jei nuspręsite sekti kursą (arba tai, ką aš padariau) dėl 5 V maitinimo pagal logiką, atminkite, kad ne visi 5 V USB maitinimo šaltiniai yra tinkami šiam projektui.

Pagrindinis dalykas yra tai, kad jums reikia 5 V, bet jums reikia mažiausiai 3 amperų! Pagalvokite apie tai taip - norite „Powerbank“, kuris maitins nešiojamąjį kompiuterį (galbūt).

Jei gyvenate JAV, manau, kad vienas geriausių būdų tai padaryti yra pirkti iš „Best Buy“. Kodėl? Dėl jų 14 dienų pinigų grąžinimo politikos.

Iš tikrųjų turėjau išbandyti tris skirtingus galios bankus, kol radau vieną, kuris veiktų. Kiti sukelia „Raspberry Pi“skundą dėl nepakankamos įtampos.

Pradėjau nuo pigiausio „powerbank“ir tiesiog bandžiau kitą modelį (kuris kainavo daugiau), kol radau tą, kuris veikia.

Kaip įjungti „Arduino“

„Udemy“kurse autorius pasirinko „Arduino“maitinimą tiesiai iš „powerbank“(per pasirinktą jo sukurtą PCB) ir naudojo „Arduino“GPIO jungties maitinimo kaiščius.

Tačiau aš nusprendžiau tiesiog įjungti „Arduino“tiesiai iš „Raspberry Pi“per USB kabelį.

Turėsite nuspręsti, kuris yra geresnis.

Kaip maitinti variklius/variklio vairuotoją

„Udemy“kurse autorius pasirinko maitinti variklius/vairuotoją tiesiai iš 5 V maitinimo šaltinio. Jei naudojate šį metodą, yra dvi aplinkybės.

  1. Kai varikliai pirmą kartą pradeda suktis, jie ima didžiausią srovę. Dėl to maitinimo įtampa gali nukristi žemiau (5 V) ir „Raspberry“atsistatyti.
  2. Variklių maitinimas naudojant tik 5 V reiškia, kad varikliai nesuteikia tiek energijos, kiek galėtumėte, ir automobilis judės lėčiau (lėčiau). Aš išbandžiau variklius (su tuo maitinimo šaltiniu) (žr. Nuotrauką) iki mažiausiai 9 V. Jie puikiai veikia esant 9 V įtampai.

Stebėjimai apie 9 V (ar daugiau)

Jei peržiūrėjote visas šio „Instructable“nuotraukas ir vaizdo įrašus, pastebėjote, kad surinkau pasirinktinę PCB, kad sukurtų savo 9 V maitinimo šaltinį. Pakeliui išmokau keletą dalykų.

Šiuo metu varikliams maitinti lygiagrečiai naudoju keletą (3) 9 V baterijų elementų. Aš naudoju tiek šarmines, tiek NiMH įkraunamas baterijas.

1 mokymosi patirtis: norint tinkamai įkrauti NiMH 9V baterijas, reikia daug laiko (daug valandų).

Galimas sprendimas: investuokite į kelių akumuliatorių NiMH įkroviklį. Tai turėtų būti „protingas“įkroviklis.

Trūkumai: jie nėra nebrangūs.

Mokymosi patirtis #2: 9 V baterijos iš tikrųjų susideda iš kelių mažų vidinių elementų. Jei viena iš šių elementų miršta, visa baterija yra nenaudinga. Aš neturėjau šios problemos, bet skaičiau apie tai.

Mokymosi patirtis #3: Ne visos 9 V baterijos yra vienodos įtampos. Šis svarbus. Nes kuo didesnė įtampa, tuo didesnis greitis. Kai kurie akumuliatoriaus elementai (ir įkrovikliai) yra tik 8,4 V įtampos. Kai kurie net mažiau. Kai kurie yra 9,6 V įtampos.

Mokymosi patirtis #4: 9 V baterijos, ypač NiMH, yra lengvos. Geras dalykas. Tačiau dauguma jų teikia tik mA išėjimo srovę. Todėl turėjau juos sudėti lygiagrečiai. Netgi trumpam laikotarpiui jums reikia beveik 2 amperų srovės.

Mokymosi patirtis #5: Yra 9,6 V akumuliatoriai, naudojami tokiems dalykams kaip radijo bangomis valdomi automobiliai. Aš dar nenaudojau, bet manau, kad jie tiekia daugiau srovės, nei darydami lygiagrečias 9 V baterijas, kaip aš. Be to, galite įkrauti vieną įrenginį. Pakuotės būna įvairių dydžių. Ir reikia atsižvelgti į svorį. Ir tada, ar naudojate paketą, kad maitintumėte visą automobilį, ar tik variklius? Jei visam automobiliui reikės „Raspberry Pi“5 V pakopos reguliatoriaus.

Šiuo tikslu „L298 H-Bridge“gali išvesti 5 V įtampą, tačiau man neramu, kiek srovės jis gali pagaminti „Raspberry Pi“ir ar tai per daug neapkraus L298 plokštės.

Jei nuspręsite turėti du atskirus maitinimo šaltinius, gali kilti svorio problema (per sunki).

4 žingsnis: programinės įrangos programavimas, skirtas „Gamepad“vairavimui

Manau, kad daugelį šio skyriaus skyrių jau aprašiau „Robot Driven Via Remote USB Gamepad Instructable“, todėl čia to nekartosiu.

Programavimo/programinės įrangos dalys toje kitoje „Instructable“yra tik pasiūlymai. Manau, kad daugiau išmokstama bandymų ir klaidų būdu.

5 veiksmas: fotoaparato pridėjimas

Fotoaparato pridėjimas
Fotoaparato pridėjimas
Fotoaparato pridėjimas
Fotoaparato pridėjimas
Fotoaparato pridėjimas
Fotoaparato pridėjimas

„Udemy“kursuose manau, kad autorius naudoja apvalius medinius kaiščius ir klijų pistoletą, kad sukurtų būdą pakelti fotoaparatą.

Norite pakelti fotoaparatą taip, kad jis atrodytų žemyn į dviejų juostų kelią, kad jis galėtų lengviau atpažinti juostas.

Kur aš gyvenu JAV, mediniai kaiščiai buvo labai nebrangūs. Juos galite įsigyti „Lowe's“arba „Home Depot“. Vietoj apvalių kaiščių pasirinkau kvadratinius kaiščius.

Aš taip pat nusprendžiau padaryti tvirtesnį fotoaparato bokšto pagrindą ir padariau, kad visą bokštą būtų galima nuimti nuo automobilio, kad galėčiau žaisti ir eksperimentuoti, kokia yra geriausia jo vieta automobilyje.

Be to, aš sukūriau bokštą turėdamas mintį, kad pradėsiu nuo USB žiniatinklio kameros, bet galbūt vėliau pereisiu prie „Picamera“modulio naudojimo.

Galbūt norėsite investuoti į žuvies akies tipo kamerą.

Aš nusipirkau labai nebrangų karštų klijų pistoletą, tačiau norėjau geriau sutvirtinti bokšto pagrindą, todėl iš anksto išgręžiau keletą varžtų skylių ir pridėjau varžtų, kad viskas geriau laikytųsi.

Tada aš pritvirtinau pagrindą prie automobilio važiuoklės.

Jei vėliau noriu perkelti daiktus, tiesiog atsukau pagrindą nuo važiuoklės, išgręžiu naujas skyles naujoje važiuoklės vietoje ir vėl pritvirtinu bokštą prie važiuoklės.

Iš didelio roboto („Wallace Robot 4“) parsinešiau „sek paskui mane“„Python“ir „Node.js“kodus, kad viską išbandytum. Šiame skyriuje esančiose nuotraukose rasite „YouTube“sąrašą, kuriame pateikiama daug daugiau informacijos apie „sekti mane“.

Kaip jau minėjau, pirmiausia buvo lengviau prijungti USB kamerą. Vėliau galėsiu prijungti „Picamera“modulį.

6 veiksmas: veido atpažinimas - nustatykite padėtį

Image
Image

Ši dalis nėra Udemy kurso akcentas, tačiau tai buvo smagus pratimas.

Jei žiniatinklyje ieškosite „python opencv veido atpažinimo“, rasite daug gerų pavyzdžių, kaip tai padaryti, ir jie visi atlieka tuos pačius veiksmus.

  1. įkelkite „haar“veido failą
  2. inicijuoti fotoaparatą
  3. pradėkite kilpą, kur griebiate rėmelį
  4. konvertuoti spalvotą vaizdą į pilkos spalvos skalę
  5. pateikite jį į „opencv“, kad jis surastų veidą (-us)
  6. pradėti vidinę kilpą (kiekvienam rastam veidui) (mano atveju pridedu kodą nutraukti, jei yra daugiau nei 1 veidas)

Šiuo tikslu, kai mes aptikome veidą, mes žinome X, Y, W ir H iš įsivaizduojamo kvadrato, kuris apibūdina veidą.

Jei norite, kad robotas judėtų į priekį arba atgal, tiesiog apsvarstykite W. Jei W yra per didelis (per arti), leiskite robotui judėti atgal. Jei W yra per mažas (per toli), leiskite robotui judėti į priekį.

Kairysis/dešinysis judesiai yra šiek tiek sudėtingesni, bet ne beprotiški. Pažvelkite į šio skyriaus vaizdą, kuriame išsamiai aprašoma, kaip nustatyti kairiojo ir dešiniojo veido padėtį.

PASTABA:

Jei naudojate bet kurį žiniatinklio „OpenCV“pavyzdį, visi jie parodo tikrąjį vaizdą, ką „opencv“„mato“, o veidas nubrėžtas kvadrate. Jei pastebėsite, tas kvadratas nėra pastovus (pastovus), net jei nejudate.

Dėl šių kintančių verčių robotas nuolat juda pirmyn arba atgal, kairėn arba dešinėn.

Taigi, jums reikės turėti tam tikrą delta tiek į priekį/atgal, tiek į kairę/į dešinę.

Paimkime kairę vs dešinę:

Kai apskaičiuosite kairę ir dešinę, tada gaukite skirtumą (delta):

delta = abs (kairė - dešinė)

Turite laikytis absoliuto, nes nežinote, kuris iš jų bus didesnis.

Tada pridedate sąlyginį kodą, kad tik bandytumėte judėti, jei trikampis yra didesnis už minimalų.

Tą patį padarytumėte ir pirmyn, ir atgal.

7 žingsnis: veido padėtis - judantis robotas

Kai žinote, kad robotas turi judėti į kairę arba į dešinę, į priekį ar atgal, kaip tai padaryti?

Kadangi šis „Instructable“yra procesas, šiuo metu aš tiesiog nukopijavau kodą iš savo didelio roboto, kad galėčiau jį naudoti šiam projektui. Prašome peržiūrėti mano „Robotics“grojaraštį „YouTube“, kur visa tai išsamiai aprašyta.

Trumpai tariant, aš turiu kodą sluoksniais.

„Python“veido atpažinimo scenarijus pateikia „http“užklausas „Node.js“serveriui

„Node.js“serveris klauso http judėjimo nuorodų užklausų, jas paverčia pasirinktiniu serijiniu protokolu

Tinkintas serijinis protokolas tarp „Node.js“serverio ir „Arduino“

„Arduino“eskizas, kuris atlieka tikras komandas, kad perkeltų robotą

„Udemy“kursas to nedaro, kaip aprašyta aukščiau. Bet kadangi norėjau padaryti gerą pažangą ir sutelkti dėmesį į tikrąjį vaizdo atpažinimą, dabar pakartotinai panaudojau savo ankstesnį kodą.

Rekomenduojamas: