Taula de continguts:

Construeix el teu propi cotxe amb conducció autònoma: (aquest document instructiu està en procés): 7 passos
Construeix el teu propi cotxe amb conducció autònoma: (aquest document instructiu està en procés): 7 passos

Vídeo: Construeix el teu propi cotxe amb conducció autònoma: (aquest document instructiu està en procés): 7 passos

Vídeo: Construeix el teu propi cotxe amb conducció autònoma: (aquest document instructiu està en procés): 7 passos
Vídeo: Calibrating ADAS Systems with Jaltest 2024, Juliol
Anonim
Image
Image

Hola, Si mireu el meu altre robot instructiu en Drive amb control remot USB Gamepad, aquest projecte és similar, però a una escala més petita. També podeu seguir o obtenir ajuda o inspiració a les llistes de reproducció de robòtica, reconeixement de veu de cultiu casolà o cotxes autònoms a Youtube.

Vaig començar amb el robot gran (Wallace 4), però des que vaig crear un grup local Meetup, necessitava alguna cosa a una escala més petita i el grup estava molt interessat en la visió per computador.

Així que em vaig trobar amb aquest curs d’Udemy: Construeix el teu propi cotxe autònom que em va donar la idea d’aquest projecte.

Si esteu interessats en el curs Udemy, podeu continuar consultant allà; surt a la venda amb un descompte enorme de tant en tant. Nota: hi ha la part 1 i la part 2: heu de fer una investigació sobre com obtenir els dos cursos com a paquet (amb descompte).

L’objectiu d’aquest instructiu és doble. En primer lloc, donar alguns consells i alternatives a determinades parts del curs (com ara les peces i el maquinari). I el segon, ampliar el curs.

L’objectiu principal del curs Udemy:

és aconseguir que un petit cotxe robot de rodes es condueixi per si mateix en una carretera de dos carrils reduïda.

Ha de reconèixer les franges de carril i quan ha arribat al final de la carretera.

Ha de reconèixer un senyal de stop (i stop).

A més, un senyal de trànsit VERMELL i VERMELL.

També ha de reconèixer i maniobrar al voltant d’un obstacle (un altre cotxe).

El que aquest instructable afegeix al curs:

Conduïu el cotxe petit amb un Gamepad USB remot, de la mateixa manera que en aquest altre instructable.

Doneu algunes alternatives al que proporciona el curs.

És possible que ni tan sols hagueu de comprar el curs:

Aquest instructable pot ser tot el que necessiteu per començar.

Subministraments

Les parts essencials (suggerides):

Un xassís robot

Quatre motors

Arduino

Raspberry Pi (3, 3B +, 4)

Càmera (càmera web USB o mòdul Picamera)

Alimentació de la bateria

Interruptors d'encès / apagat

cables de pont

diferències (plàstic i potser metall també)

Reviseu tot l’instructible i també els vídeos abans d’intentar comprar peces.

Després d’haver fet aquest projecte, m’adono que les parts exactes no són tan crítiques.

Pas 1: Més detalls sobre les peces …

Image
Image
Més detalls sobre les peces …
Més detalls sobre les peces …
Més detalls sobre les peces …
Més detalls sobre les peces …

El vídeo associat inclou alguns detalls sobre les parts i alguns problemes que he trobat.

  • Mireu al voltant de diferents xassís / motors
  • Els motors ja haurien de tenir cables soldats
  • És possible que vulgueu tenir un trepant i broques, O un xassís amb més forats
  • Tingueu en compte que el pes és un problema. Tot hauria de ser el més lleuger possible.
  • El controlador del motor L298 H-Bridge funciona molt bé. NOTA: obtingueu-ne un amb els blocs de terminals de cargol (vegeu la foto)
  • Probablement voldreu separadors de plàstic i de metall, la mida M3 és probablement la millor opció.

Els separadors de plàstic són bons per muntar les taules al xassís (controlador de motor, Arduino, Raspberry, placa base, interruptor d’encesa / apagat, etc.).

Els separadors metàl·lics són bons per muntar el xassís (resistència) i, sobretot, quan es desenvolupa (programació, proves). Per al desenvolupament, els separadors metàl·lics poden servir de xanques. Igual que si treballéssiu en un cotxe real, voleu pujar el cotxe perquè les rodes quedin a l’aire i puguin circular lliurement. Això és molt important. Cometreu errors i no voleu que el cotxe només s’enlairi i s’estavelli.

Broca + broques

Vull destacar l’ús d’un trepant, si és possible, i l’ús de separadors en lloc de cinta adhesiva de doble cara. És molt probable que acabeu eliminant i tornant a col·locar els vostres taulers, etc. diverses vegades durant aquest projecte, i fer servir la cinta es torna molt desordenat.

L’ús d’un trepant facilita la seva posició (especialment si el xassís és de plàstic) i sembla més professional.

Pas 2: alimentació del cotxe durant el desenvolupament

Alimentació del cotxe durant el desenvolupament
Alimentació del cotxe durant el desenvolupament
Alimentació del cotxe durant el desenvolupament
Alimentació del cotxe durant el desenvolupament

Al meu entendre, la forma més ràpida i senzilla de començar amb aquest projecte és:

  • per al desenvolupament de programari d'esbossos Arduino, només cal que connecteu l'Arduino a l'ordinador mitjançant USB
  • per al programari Raspberry Pi, haureu de tenir una alimentació USB de 5V que pugui subministrar almenys 3 amperes. I hauria de tenir un interruptor d’encès / apagat. Tret que tingueu un bon concentrador USB connectat a l'ordinador, probablement no podreu alimentar el gerd directament des de l'ordinador.
  • Quan estigueu a punt per provar els motors / rodes, el més fàcil és (veure foto) una bona font d'alimentació. No obstant això, no són barats.

El meu punt amb aquesta secció és dir que no voleu utilitzar la bateria durant el desenvolupament, perquè això alentirà molt el vostre progrés.

A més, en fer alguna cosa similar als suggeriments anteriors, no us haureu de preocupar (encara) de com alimentareu el cotxe exactament. Podeu retardar aquesta decisió per a més endavant en el projecte.

Pas 3: alimentació del cotxe durant l'ús real

Alimentació del cotxe durant l'ús real
Alimentació del cotxe durant l'ús real
Alimentació del cotxe durant l'ús real
Alimentació del cotxe durant l'ús real

Si decidiu seguir el curs (o el que he fet) d’alimentació de 5V fins a la lògica, tingueu en compte que no tots els bancs de potència USB de 5V són bons per a aquest projecte.

El punt principal aquí és que necessiteu 5V, però necessiteu almenys 3 amperes. Penseu-ho així: voleu un powerbank que alimenti un ordinador portàtil (potser).

Si viviu als EUA, crec que una de les millors maneres de fer-ho és comprar a Best Buy. Per què? A causa de la seva política de devolució de diners durant 14 dies.

De fet, vaig haver de provar tres powerbanks diferents abans de trobar-ne un que funcionés. Els altres fan que el Raspberry Pi es queixi de la baixa tensió.

Havia començat amb el powerbank menys costós i seguia provant el següent model (que costava més), fins que vaig trobar un que funcionés.

Com alimentar l'Arduino

Al curs Udemy, l’autor va optar per alimentar l’Arduino directament des del powerbank (a través d’un pcb personalitzat que va crear) i va utilitzar pins d’alimentació al connector GPIO de l’Arduino.

Tanmateix, vaig optar per alimentar l'Arduino directament des del Raspberry Pi, mitjançant el cable USB.

Haureu de decidir quin és millor.

Com alimentar els motors / controlador del motor

Al curs Udemy, l’autor va optar per alimentar els motors / controladors directament des del powerbank de 5 V. Si utilitzeu aquest enfocament, hi ha dues consideracions.

  1. Quan els motors comencen a girar, treuen el màxim de corrent. Això pot provocar que el voltatge de l'alimentació caigui per sota de 5 V i faci que el gerd es restableixi.
  2. Si feu servir només 5 V per alimentar els motors, voleu que no proporcioneu tanta potència com els motors, i el cotxe es mourà més lent (més lent). He provat els motors (amb aquesta font d'alimentació) (veure foto) a almenys 9V. Funcionen bé a 9V.

Observacions sobre 9V (o més)

Si vau fer una ullada a totes les fotos i vídeos d’aquest Instructable, notareu que vaig muntar un PCB personalitzat per crear la meva pròpia font d’alimentació de 9V. He après algunes coses al llarg del camí.

Ara mateix estic fent servir diverses (3) cèl·lules de bateria de 9V en paral·lel, per alimentar els motors. He utilitzat piles recarregables tant alcalines com NiMH.

Experiència d'aprenentatge núm. 1: es necessita molt de temps (moltes hores) per carregar correctament les bateries de NiMH 9V.

Solució possible: invertiu en un carregador de NiMH de diverses bateries. Ha de ser un carregador "intel·ligent".

Desavantatge: no són econòmics.

Experiència d'aprenentatge núm. 2: les bateries de 9V estan formades per diverses cèl·lules interiors petites. Si mor una d’aquestes cèl·lules, tota la bateria no serveix per a res. NO he tingut aquest problema, però n'he llegit.

Experiència d’aprenentatge núm. 3: no totes les bateries de 9V tenen el mateix voltatge. Aquest és important. Com que a major voltatge, més velocitat és possible. Algunes cel·les de bateria (i carregadors) només tenen 8,4 V. Alguns encara menys. Alguns tenen 9.6V.

Experiència d'aprenentatge núm. 4: les bateries de 9V, especialment les de NiMH, són lleugeres. Una cosa bona. No obstant això, la majoria d'ells només proporcionen mA de corrent de sortida. Per això els vaig haver de col·locar en paral·lel. Necessiteu una capacitat total actual de gairebé 2 A, fins i tot durant breus períodes de temps.

Experiència d’aprenentatge núm. 5: existeixen bateries de 9,6 V, que s’utilitzen per a coses com ara cotxes controlats per ràdio. Encara no n’he fet servir cap, però crec que proporcionen més corrent que les bateries paral·leles de 9V com ho feia jo. A més, podeu carregar la unitat única. Els paquets vénen en diferents mides. I hi ha una consideració de pes. I després, feu servir el paquet per alimentar tot el cotxe o només els motors? Si per a tot el cotxe, necessitareu un regulador reductor de 5V per al Raspberry Pi.

El L298 H-Bridge té la capacitat de generar 5V per a aquest propòsit, però em preocupa la quantitat de corrent que pot produir per al Raspberry Pi i si tindrà massa pressió sobre la placa L298.

Si decidiu tenir dues fonts d’energia separades, és possible que tingueu un problema de pes (massa pesat).

Pas 4: programació de programari per a la conducció de jocs

Crec que ja he tractat una gran part d’aquesta secció al Robot Driven Via Remote USB Gamepad Instructable, de manera que no ho repetiré aquí.

Les seccions de programació / programari d’aquest altre Instructable són només suggeriments. Crec que s’aprèn més per assaig-error.

Pas 5: afegir una càmera

Afegir una càmera
Afegir una càmera
Afegir una càmera
Afegir una càmera
Afegir una càmera
Afegir una càmera

Al curs d’Udemy, crec que l’autor fa servir tacs rodons de fusta i una pistola de cola per construir una manera d’elevar la càmera.

Voldreu elevar la càmera de manera que miri cap a la carretera de dos carrils, de manera que pugui reconèixer-los més fàcilment.

Allà on visc als EUA, les clavilles de fusta eren molt econòmiques. Podeu comprar-los a Lowe's o a Home Depot. Vaig escollir tacs quadrats en lloc de tacs rodons.

També vaig optar per fer una base més resistent per a la torre de la càmera i vaig fer que tota la torre fos desmuntable del cotxe, de manera que pogués jugar i experimentar quina és la millor posició al cotxe.

A més, vaig fer la torre tenint en compte la idea que començaré amb una càmera web USB, però possiblement passaria a utilitzar el mòdul Picamera.

És possible que vulgueu invertir en una càmera tipus ull de peix.

Vaig comprar una pistola de cola calenta molt econòmica, però volia reforçar millor la base de la torre, de manera que he perforat prèviament alguns forats de cargol i he afegit cargols per mantenir-ho tot millor.

Després vaig fixar la base al xassís del cotxe.

Si més endavant vull moure les coses, acabo de desfer la base del xassís, perforar nous forats a la nova ubicació del xassís i tornar a fixar la torre al xassís.

He aportat el codi Python i Node.js "segueix-me" del robot gran (Wallace Robot 4) com a forma de provar-ho tot. Consulteu les fotos d’aquesta secció per obtenir la llista de youtubes que ofereixen molts més detalls sobre el "seguiment".

Com he esmentat, era més fàcil muntar primer una càmera web USB. Més endavant puc muntar el mòdul Picamera.

Pas 6: reconeixement facial: determinar la posició

Image
Image

Aquesta part no és el focus del curs Udemy, però va ser un exercici divertit.

Si cerqueu a la web "reconeixement facial de Python opencv", trobareu molts bons exemples sobre com fer-ho i tots segueixen pràcticament els mateixos passos.

  1. carregueu el fitxer de la cara "haar"
  2. inicialitzar la càmera
  3. iniciar un bucle on agafeu un marc
  4. converteix la imatge en color a escala de grisos
  5. alimentar-lo a l’opencv perquè trobi cara (s)
  6. iniciar un bucle intern (per a cada cara trobada) (en el meu cas, afegeixo codi per avortar si hi ha més d'una cara)

Amb aquest propòsit aquí, un cop hem detectat una cara, coneixem la X, Y, W i H del quadrat imaginari que delinea la cara.

Si voleu que el robot avanci o retrocedeixi, només haureu de considerar W. Si W és massa gran (massa a prop), feu que el robot retrocedeixi. Si W és massa petit (massa lluny), feu que el robot avanci.

El moviment esquerra / dreta és una mica més complicat però no boig. Mireu la imatge d’aquesta secció que detalla com determinar la posició de la cara esquerra contra la dreta.

NOTA:

Si executeu algun dels exemples web d’OpenCV, tots mostraran la visió real del que “veu” l’opencv, amb la cara ressenyada en un quadrat. Si observareu, aquest quadrat no és constant (constant), fins i tot si no us moveu.

Aquests valors canviants farien que el robot estigués constantment en moviment, cap endavant o cap enrere, cap a l'esquerra o cap a la dreta.

Per tant, haureu de tenir algun tipus de delta tant per endavant / enrere com per a esquerra / dreta.

Agafem esquerra contra dreta:

Un cop hàgiu calculat l'esquerra i la dreta, obteniu la diferència (delta):

delta = abs (esquerra - dreta)

Heu d’agafar l’absolut perquè no sabeu quin serà el nombre més gran.

A continuació, afegiu algun codi condicional per intentar moure’s només si el delta és superior a algun mínim.

Fareu el mateix per davant contra darrere.

Pas 7: Posició de la cara: robot en moviment

Un cop sabeu que necessiteu que el robot es mogui cap a l’esquerra o cap a la dreta, cap endavant o cap enrere, com ho feu?

Com que aquest Instructable és un procés en procés, de moment, acabo de copiar el codi del meu gran robot per utilitzar-lo en aquest projecte. Consulteu la meva llista de reproducció de Robotics a youtube on detalla tot això.

En resum, tinc el codi en capes.

L'escriptura de reconeixement facial de Python fa sol·licituds http al servidor Node.js

El servidor Node.js escolta les sol·licituds http de direccions de moviment, les converteix en protocol sèrie personalitzat

Protocol sèrie personalitzat entre el servidor Node.js i Arduino

Esbós Arduino que fa les ordres reals per moure el robot

El curs Udemy no ho fa com abans. Però com que volia avançar bé i centrar-me en el reconeixement d'imatges real, ara vaig tornar a utilitzar el meu codi anterior.

Recomanat: