Cuprins:

Construiți-vă propria mașină cu conducere automată - (Acest instructiv este în lucru): 7 pași
Construiți-vă propria mașină cu conducere automată - (Acest instructiv este în lucru): 7 pași
Anonim
Image
Image

Buna ziua, Dacă aruncați o privire la celălalt meu Instructable on Drive Robot With Remote USB Gamepad, acest proiect este similar, dar la o scară mai mică. Puteți, de asemenea, să urmăriți sau să obțineți ajutor sau inspirație din listele de redare Robotică, Recunoaștere vocală cultivată la domiciliu sau Mașini cu conducere automată de pe Youtube.

Am început cu robotul mare (Wallace 4), dar de când am început un grup local Meetup, aveam nevoie de ceva la scară mai mică, iar grupul era foarte interesat de viziunea pe computer.

Așa că am dat peste acest curs Udemy: Construiește-ți propria mașină cu conducere autonomă, care mi-a dat ideea acestui proiect.

Dacă sunteți interesat de cursul Udemy, puteți continua să verificați acolo; se scoate la vânzare din când în când cu o reducere imensă. Notă: există Partea 1 și Partea 2 - trebuie să faceți o investigație despre cum să obțineți cele două cursuri ca pachet (cu reducere).

Scopul acestui instructiv este dublu. În primul rând, pentru a oferi câteva indicații și alternative la anumite porțiuni ale cursului (cum ar fi piesele și hardware-ul). Și în al doilea rând, pentru a extinde cursul.

Scopul principal al cursului Udemy:

este să poți obține o mașină robotică cu roți mici care să conducă singură pe un drum cu două benzi reduse.

Trebuie să recunoască dungile benzii și când a ajuns la capătul drumului.

Trebuie să recunoască un semn de oprire (și oprire).

De asemenea, un semnal de trafic ROȘU și VERDE.

De asemenea, trebuie să recunoască și să manevreze în jurul unui obstacol (o altă mașină).

Ce adaugă acest instructabil la curs:

Conduceți mașina mică cu un Gamepad USB la distanță, la fel ca în celălalt Instructable.

Oferiți câteva alternative la ceea ce oferă cursul.

Poate că nu trebuie să cumpărați cursul:

Acest instructabil poate fi tot ce aveți nevoie pentru a începe.

Provizii

Părțile esențiale (sugerate):

Un șasiu robot

Patru motoare

Arduino

Raspberry Pi (3, 3B +, 4)

Camera (USB Webcam sau modul Picamera)

Puterea bateriei

Comutatoare On / Off

fire jumper

stand-offs (plastic și poate și metal)

Vă rugăm să examinați întregul instructabil și, de asemenea, videoclipurile înainte de a încerca să cumpărați piese.

După ce am făcut acest proiect, îmi dau seama că părțile exacte nu sunt atât de critice.

Pasul 1: Mai multe detalii despre piese …

Image
Image
Mai multe detalii despre piese …
Mai multe detalii despre piese …
Mai multe detalii despre piese …
Mai multe detalii despre piese …

Videoclipul asociat intră în detaliu despre părți și despre unele probleme pe care le-am găsit.

  • Căutați în jur pentru diferite șasiuri / motoare
  • Motoarele ar trebui să aibă deja fire lipite pe ele
  • Poate doriți să aveți un burghiu și burghie, SAU un șasiu cu mai multe găuri
  • Rețineți că greutatea este o problemă. Totul ar trebui să fie cât mai ușor.
  • Driverul motorului L298 H-Bridge funcționează excelent. NOTĂ: obțineți unul cu blocurile de borne cu șurub (a se vedea fotografia)
  • Probabil că veți dori atât separatoare din plastic, cât și din metal, dimensiunea M3 este probabil cea mai bună alegere.

Distanțierele din plastic sunt bune pentru montarea plăcilor pe șasiu (driverul motorului, Arduino, Raspberry, placa de alimentare, comutatorul de pornire / oprire etc.).

Distanțierele metalice sunt bune pentru asamblarea șasiului (rezistență) și, mai ales, atunci când vă dezvoltați (programare, testare). Pentru dezvoltare, distanțele metalice pot servi drept piloți. La fel ca în cazul în care ați lucra la o mașină adevărată, doriți să ridicați mașina astfel încât roțile să fie în aer și să poată circula liber. Este foarte important! Veți face greșeli și nu doriți ca mașina să decoleze și să se prăbușească.

Burghiu + burghie

Vreau foarte mult să subliniez utilizarea unui burghiu, dacă puteți, și utilizarea standoff-urilor în loc de bandă adezivă pe două fețe. Probabil că veți ajunge să vă scoateți și să vă repoziționați plăcile etc. de mai multe ori în timpul acestui proiect, iar utilizarea benzii devine foarte dezordonată.

Folosirea burghiului facilitează repoziționarea (mai ales dacă șasiul este din plastic) și arată mai profesionist.

Pasul 2: Alimentarea mașinii în timpul dezvoltării

Alimentarea mașinii în timpul dezvoltării
Alimentarea mașinii în timpul dezvoltării
Alimentarea mașinii în timpul dezvoltării
Alimentarea mașinii în timpul dezvoltării

În opinia mea, cel mai rapid și mai simplu mod de a începe cu acest proiect este:

  • pentru dezvoltarea de schițe software Arduino, trebuie doar să conectați Arduino la computerul dvs. prin USB
  • pentru software-ul Raspberry Pi, ar trebui să aveți o alimentare USB de 5V care poate furniza cel puțin 3 Amperi. Și ar trebui să aibă un comutator de pornire / oprire. Dacă nu aveți un hub USB bun și alimentat conectat la computer, probabil că nu veți putea alimenta Raspberry direct de pe computer.
  • Pentru că atunci când sunteți gata să testați motoarele / roțile, cel mai ușor este (a se vedea fotografia) o sursă de alimentare bună. Cu toate acestea, acestea nu sunt ieftine.

Punctul meu cu această secțiune este să spun că nu doriți să utilizați bateria în timpul dezvoltării, deoarece acest lucru vă va încetini progresul.

De asemenea, făcând ceva similar cu sugestiile de mai sus, nu trebuie să vă faceți griji (încă) cu privire exact la modul în care veți alimenta mașina. Puteți amâna acea decizie pentru mai târziu în proiect.

Pasul 3: Alimentarea mașinii în timpul utilizării reale

Alimentarea mașinii în timpul utilizării efective
Alimentarea mașinii în timpul utilizării efective
Alimentarea mașinii în timpul utilizării efective
Alimentarea mașinii în timpul utilizării efective

Dacă decideți să urmați cursul (sau ceea ce am făcut eu) pentru alimentarea de 5V la logică, atunci fiți conștienți de faptul că nu toate băncile de alimentare USB de 5V sunt bune pentru acest proiect.

Principalul punct aici este că ai nevoie de 5V, dar ai nevoie de cel puțin 3 Amperi! Gândiți-vă în acest fel - doriți un powerbank care să alimenteze un computer laptop (poate).

Dacă locuiți în S. U. A., cred că una dintre cele mai bune modalități de a face acest lucru este să cumpărați de la Best Buy. De ce? Datorită politicii de returnare a banilor de 14 zile.

De fapt, a trebuit să încerc trei powerbanks diferite înainte să găsesc una care să funcționeze. Celelalte fac ca Raspberry Pi să se plângă de subtensiune.

Începusem cu cea mai puțin costisitoare powerbank și pur și simplu continuam să încerc următorul model (care costa mai mult), până când am găsit unul care funcționa.

Cum să alimentezi Arduino

În cadrul cursului Udemy, autorul a ales să alimenteze Arduino direct din powerbank (printr-un PCB personalizat pe care l-a realizat) și a folosit pinii de alimentare de pe conectorul GPIO al Arduino.

Cu toate acestea, am ales să alimentez Arduino direct de pe Raspberry Pi, prin cablul USB.

Va trebui să decideți care este mai bine.

Cum se alimentează motoarele / driverul motorului

În cadrul cursului Udemy, autorul a ales să alimenteze motoarele / driverul direct din powerbank-ul de 5V. Există două considerații dacă utilizați această abordare.

  1. Când motoarele încep să se întoarcă pentru prima dată, acestea trag cel mai mult curent. Acest lucru (poate) face ca tensiunea de alimentare să scadă (să se scufunde) sub 5V și să provoace resetarea zmeurii.
  2. Folosind doar 5V pentru a alimenta motoarele înseamnă că nu furnizați la fel de multă putere pe care o puteți motora, iar mașina se va mișca mai lent (mai lent). Am testat motoarele (cu sursa de alimentare respectivă) (vezi foto) la cel puțin 9V. Funcționează bine la 9V.

Observații despre 9V (sau mai mult)

Dacă ați aruncat o privire la toate fotografiile și videoclipurile pentru acest instructabil, ați observat că am asamblat un PCB personalizat pentru a-mi crea propria sursă de alimentare de 9V. Am învățat câteva lucruri pe parcurs.

În acest moment, folosesc mai multe (3) celule de baterii de 9V în paralel, pentru a alimenta motoarele. Am folosit atât baterii alcaline, cât și NiMH reîncărcabile.

Experiență de învățare nr. 1: Este nevoie de mult timp (multe ore) pentru a încărca corect bateriile NiMH 9V.

Soluție posibilă: investiți într-un încărcător NiMH cu mai multe baterii. Ar trebui să fie un încărcător „inteligent”.

Dezavantaj: nu sunt ieftine.

Experiența de învățare # 2: bateriile de 9V sunt de fapt alcătuite din mai multe celule mici de interior. Dacă una dintre aceste celule moare, întreaga baterie este inutilă. NU am avut această problemă, dar am citit despre ea.

Experiența de învățare # 3: Nu toate bateriile de 9V au aceeași tensiune. Acesta este important. Deoarece cu cât este mai mare tensiunea, cu atât este mai mare viteza. Unele celule ale bateriei (și încărcătoarele) au doar 8,4V. Unele chiar mai puțin. Unele sunt de 9,6V.

Experiența de învățare # 4: bateriile de 9V, în special cele NiMH, au o greutate redusă. Un lucru bun. Cu toate acestea, majoritatea furnizează doar mA de curent de ieșire. De aceea a trebuit să le plasez în paralel. Aveți nevoie de o capacitate totală actuală de aproape 2 Amperi, chiar și pentru perioade scurte de timp.

Experiența de învățare # 5: există baterii de 9,6 V, utilizate pentru lucruri precum mașinile controlate radio. Nu am folosit încă una, dar cred că furnizează mai mult curent decât bateriile paralele de 9V ca și mine. De asemenea, puteți încărca unitatea unică. Pachetele sunt de diferite dimensiuni. Și există o considerație de greutate. Și apoi, folosiți pachetul pentru a alimenta întreaga mașină sau doar motoarele? Dacă pentru întreaga mașină, veți avea nevoie de un regulator de 5V pentru Raspberry Pi.

L298 H-Bridge are capacitatea de a produce 5V în acest scop, dar sunt îngrijorat de cât de mult curent poate produce pentru Raspberry Pi și dacă va fi o presiune prea mare pe placa L298.

Dacă decideți să aveți două surse de alimentare separate, este posibil să aveți o problemă de greutate (prea grea).

Pasul 4: Programare software pentru conducerea Gamepad

Cred că am acoperit o mare parte din această secțiune deja în Robot Driven Via Remote USB Gamepad Instructable, așa că nu voi repeta aici.

Secțiunile de programare / software din celălalt Instructable sunt doar sugestii. Cred că se învață mai multe prin încercări și erori.

Pasul 5: Adăugarea unei camere

Adăugarea unei camere
Adăugarea unei camere
Adăugarea unei camere foto
Adăugarea unei camere foto
Adăugarea unei camere foto
Adăugarea unei camere foto

În cursul Udemy, cred că autorul folosește dibluri rotunde din lemn și un pistol de lipit pentru a construi o modalitate de a ridica camera.

Veți dori să ridicați camera astfel încât să privească în jos pe drumul cu două benzi, astfel încât să poată recunoaște mai ușor benzile.

Unde locuiesc în S. U. A., diblurile din lemn erau foarte ieftine. Le puteți cumpăra de la Lowe's sau Home Depot. Am ales dibluri pătrate în loc de dibluri rotunde.

De asemenea, am ales să fac o bază mai robustă pentru turnul camerei și am făcut întregul turn detașabil din mașină, astfel încât să mă pot juca și să experimentez care este cea mai bună poziție pentru ea pe mașină.

De asemenea, am făcut turnul cu ideea că voi începe cu o cameră web USB, dar, eventual, mai târziu, voi folosi modulul Picamera.

Poate doriți să investiți într-o cameră de tip fish-eye.

Am cumpărat un pistol de lipit la cald foarte ieftin, dar am vrut să consolidez mai bine baza turnului, așa că am forat câteva găuri de șurub și am adăugat șuruburi pentru a ține totul mai bine împreună.

Apoi am înșurubat baza pe șasiul mașinii.

Dacă mai târziu, vreau să mișc lucrurile, pur și simplu desfac baza din șasiu, găuresc noi găuri în noua locație a șasiului și re-fixez turnul pe șasiu.

Am adus codul Python și Node.js „urmați-mă” de la robotul mare (Wallace Robot 4) ca o modalitate de a testa totul. Vă rugăm să consultați fotografiile din această secțiune pentru lista de youtuburi care oferă mult mai multe detalii despre „urmați-mă”.

După cum am menționat, a fost mai ușor să montezi mai întâi o cameră web USB. Mai târziu pot monta modulul Picamera.

Pasul 6: Recunoașterea feței - Determinați poziția

Image
Image

Această parte nu este punctul central al cursului Udemy, dar a fost un exercițiu distractiv.

Dacă faceți câteva căutări pe web pentru „recunoașterea feței python opencv”, veți găsi multe exemple bune despre cum să faceți acest lucru și toți urmează cam aceiași pași.

  1. încărcați fișierul cu fața „haar”
  2. inițializați camera
  3. pornește o buclă unde apuci un cadru
  4. convertiți imaginea color la scară de gri
  5. hrănește-l la deschidere pentru a-i găsi față (fețe)
  6. pornește o buclă interioară (pentru fiecare față găsită) (în cazul meu, adaug cod pentru a anula dacă mai mult de o față)

În acest scop aici, odată ce am detectat o față, cunoaștem X, Y, W și H ale pătratului imaginar care conturează fața.

Dacă doriți ca robotul să se deplaseze înainte sau înapoi, trebuie doar să luați în considerare W. Dacă W este prea mare (prea aproape), faceți robotul să se miște înapoi. Dacă W este prea mic (prea departe), cereți robotului să avanseze.

Mișcarea stânga / dreapta este puțin mai complicată, dar nu nebună. Aruncați o privire la imaginea acestei secțiuni care detaliază cum să determinați poziția feței stânga față dreaptă.

NOTĂ:

Dacă rulați oricare dintre exemplele web OpenCV, toate arată vizualizarea reală a ceea ce opencv „vede”, cu fața conturată într-un pătrat. Dacă veți observa, acel pătrat nu este constant (constant), chiar dacă nu vă deplasați.

Aceste valori în schimbare ar determina robotul să fie constant în mișcare, înainte sau înapoi, la stânga sau la dreapta.

Astfel, va trebui să aveți un fel de delta atât pentru înainte / înapoi, cât și pentru stânga / dreapta.

Să luăm stânga vs dreapta:

După ce ați calculat stânga și dreapta, obțineți diferența (delta):

delta = abs (stânga - dreapta)

Trebuie să luați absolutul, deoarece nu știți care va fi numărul mai mare.

Apoi adăugați un cod condițional pentru a încerca să vă deplasați doar dacă delta este mai mare decât un minim.

Ați face același lucru pentru atacant înainte și înapoi.

Pasul 7: Poziția feței - Robot în mișcare

Odată ce știi că ai nevoie ca robotul să se deplaseze la stânga sau la dreapta, înainte sau înapoi, cum faci asta?

Deoarece acest Instructable este o lucrare în proces, în acest moment, tocmai am copiat codul de pe robotul meu mare pentru a-l folosi pentru acest proiect. Vă rugăm să verificați lista mea de redare Robotics de pe YouTube, unde detaliază toate acestea.

Pe scurt, am codul în straturi.

Scriptul de recunoaștere a feței Python face solicitări http către serverul Node.js

Serverul Node.js ascultă solicitările http pentru direcții de mutare, le convertește în protocol serial personalizat

Protocol serial personalizat între serverul Node.js și Arduino

Schiță Arduino care face comenzile efective pentru a muta robotul

Cursul Udemy nu o face ca mai sus. Dar, din moment ce am vrut să fac progrese bune și să mă concentrez asupra recunoașterii reale a imaginii, am reutilizat codul anterior pentru moment.

Recomandat: