Inhoudsopgave:
- Benodigdheden
- Stap 1: Meer details over de onderdelen…
- Stap 2: De auto van stroom voorzien tijdens de ontwikkeling
- Stap 3: De auto van stroom voorzien tijdens feitelijk gebruik
- Stap 4: Softwareprogrammering voor gamepad-rijden
- Stap 5: Een camera toevoegen
- Stap 6: Gezichtsherkenning - Positie bepalen
- Stap 7: Gezichtspositie - Bewegende robot
Video: Bouw je eigen zelfrijdende auto - (dit instructable is werk in uitvoering): 7 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
Hallo, Als je mijn andere Instructable on Drive Robot With Remote USB Gamepad bekijkt, is dit project vergelijkbaar, maar op kleinere schaal. Je kunt ook hulp of inspiratie halen uit de afspeellijsten Robotics, Home-Grown Voice-Recognition of Self-Driving Car op YouTube.
Ik begon met de grote robot (Wallace 4), maar sinds ik een lokale Meetup-groep begon, had ik iets op kleinere schaal nodig en de groep was erg geïnteresseerd in computervisie.
Dus kwam ik deze Udemy-cursus: Bouw je eigen zelfrijdende auto tegen die me op het idee voor dit project bracht.
Als je geïnteresseerd bent in de Udemy-cursus, kun je daar blijven kijken; het gaat van tijd tot tijd in de uitverkoop voor een enorme korting. Opmerking: er is deel 1 en deel 2 - u moet wat onderzoek doen om de twee cursussen als pakket (met korting) te krijgen.
Het doel van deze instructable is tweeledig. Ten eerste om wat tips en alternatieven te geven voor bepaalde onderdelen van de cursus (zoals de onderdelen en hardware). En ten tweede om de cursus uit te breiden.
Het hoofddoel van de Udemy-cursus:
is om een kleine robotauto op wielen zelf te laten rijden op een verkleinde tweebaansweg.
Hij moet de rijstrookstrepen herkennen, en wanneer hij het einde van de weg heeft bereikt.
Het moet een stopbord herkennen (en stoppen).
Ook een ROOD en GROEN verkeerslicht.
Het moet ook een obstakel (een andere auto) herkennen en er omheen manoeuvreren.
Wat deze Instructable toevoegt aan de cursus:
Bestuur de kleine auto met een externe USB-gamepad, ongeveer op dezelfde manier als in deze andere Instructable.
Geef enkele alternatieven voor wat de cursus biedt.
Je hoeft de cursus misschien niet eens te kopen:
Dit Instructable is misschien alles wat je nodig hebt om aan de slag te gaan.
Benodigdheden
De essentiële (aanbevolen) onderdelen:
Een robotchassis
Vier motoren
Arduino
Raspberry Pi (3, 3B+, 4)
Camera (USB-webcam of Picamera-module)
Batterij vermogen
Aan/uit-schakelaars
jumperdraden
afstandhouders (plastic en misschien ook metaal)
Bekijk de volledige Instructable en ook de video's voordat u probeert onderdelen te kopen.
Na dit project te hebben gedaan, realiseer ik me dat de exacte onderdelen niet zo kritisch zijn.
Stap 1: Meer details over de onderdelen…
De bijbehorende video gaat dieper in op de onderdelen en enkele problemen die ik heb gevonden.
- Kijk rond voor verschillende chassis / motoren
- Op de motoren moeten al draden zijn gesoldeerd
- Misschien wilt u een boormachine en boren, OF een chassis met meer gaten
- Houd er rekening mee dat gewicht een probleem is. Alles moet zo licht mogelijk zijn.
- De L298 H-Bridge motor driver werkt geweldig. OPMERKING: koop er een met de schroefklemmenblokken (zie foto)
- U wilt waarschijnlijk zowel plastic als metalen afstandhouders, maat M3 is waarschijnlijk de beste keuze.
Kunststof afstandhouders zijn goed voor het monteren van de borden op het chassis (motordriver, Arduino, Raspberry, power pcb, aan/uit-schakelaar, enz.).
Metalen afstandhouders zijn goed voor het monteren van het chassis (sterkte), en vooral ook als je aan het ontwikkelen bent (programmeren, testen). Voor ontwikkeling kunnen de metalen afstandhouders dienen als stelten. Net alsof je aan een echte auto zou werken, wil je de auto zo verhogen dat de wielen in de lucht zijn en vrij kunnen bewegen. Dit is erg belangrijk! Je zult fouten maken en je wilt niet dat de auto zomaar opstijgt en crasht.
Boor + boren
Ik wil echt de nadruk leggen op het gebruik van een boormachine, als je in staat bent, en het gebruik van afstandhouders in plaats van dubbelzijdig plakband. Het is zeer waarschijnlijk dat u tijdens dit project uw borden, enz. meerdere keren moet verwijderen en opnieuw moet plaatsen, en het gebruik van de tape wordt erg rommelig.
Het gebruik van een boor maakt het heel gemakkelijk om te herpositioneren (vooral als het chassis van plastic is) en het ziet er professioneler uit.
Stap 2: De auto van stroom voorzien tijdens de ontwikkeling
Naar mijn mening is de snelste en gemakkelijkste manier om met dit project aan de slag te gaan:
- voor software Arduino-schetsontwikkeling, sluit de Arduino gewoon aan op uw computer via USB
- voor software Raspberry Pi moet je een 5V USB-stroom hebben die minimaal 3 Ampère kan leveren. En het moet een aan/uit schakelaar hebben. Tenzij u een goede, gevoede USB-hub op uw computer hebt aangesloten, kunt u de Raspberry waarschijnlijk niet rechtstreeks vanaf uw computer van stroom voorzien.
- Voor als je klaar bent om de motoren/wielen te testen is het makkelijkst (zie foto) een goede voeding. Die zijn echter niet goedkoop.
Mijn punt met dit gedeelte is om te zeggen dat je tijdens de ontwikkeling geen batterijvermogen wilt gebruiken, omdat dat je voortgang enorm zal vertragen.
Door iets te doen dat lijkt op de bovenstaande suggesties, hoeft u zich ook (nog) geen zorgen te maken over hoe u de auto precies gaat aandrijven. U kunt die beslissing uitstellen tot later in het project.
Stap 3: De auto van stroom voorzien tijdens feitelijk gebruik
Als je besluit de cursus te volgen (of wat ik heb gedaan) voor 5V stroom naar de logica, wees je er dan van bewust dat niet alle 5V USB powerbanks goed zijn voor dit project.
Het belangrijkste punt hier is dat je 5V nodig hebt, maar je hebt minimaal 3 Ampère nodig! Zie het op deze manier - u wilt een powerbank die (misschien) een laptop van stroom voorziet.
Als je in de VS woont, denk ik dat een van de beste manieren om dit te doen is om bij Best Buy te kopen. Waarom? Vanwege hun 14-dagen geld-terug-beleid voor retourzendingen.
Ik moest eigenlijk drie verschillende powerbanks proberen voordat ik er een vond die werkte. De andere zorgen ervoor dat de Raspberry Pi klaagt over onderspanning.
Ik was begonnen met de goedkoopste powerbank en bleef gewoon het volgende model proberen (dat meer kostte), totdat ik er een vond die werkte.
Hoe de Arduino van stroom te voorzien?
In de Udemy-cursus koos de auteur ervoor om de Arduino rechtstreeks vanaf de powerbank van stroom te voorzien (via een aangepaste pcb die hij maakte) en hij gebruikte stroompinnen op de GPIO-connector van de Arduino.
Ik heb er echter voor gekozen om de Arduino rechtstreeks van de Raspberry Pi te voorzien, via de USB-kabel.
Je zult moeten beslissen wat beter is.
Hoe de motoren/motoraandrijving aan te drijven?
In de Udemy-cursus koos de auteur ervoor om de motoren/driver rechtstreeks van de 5V-powerbank te voorzien. Er zijn twee overwegingen als u die aanpak gebruikt.
- Wanneer de motoren voor het eerst beginnen te draaien, trekken ze de meeste stroom. Dit kan (zal) ervoor zorgen dat de voedingsspanning onder de 5V zakt (dip), en ervoor zorgt dat de Raspberry wordt gereset.
- Als u slechts 5V gebruikt om de motoren aan te drijven, betekent dit dat u niet zoveel vermogen aan de motoren levert als u zou kunnen, en dat de auto langzamer (traag) zal rijden. Ik heb de motoren (met die voeding)(zie foto) getest tot minimaal 9V. Ze werken prima op 9V.
Waarnemingen over 9V (of meer)
Als je alle foto's en video's voor deze Instructable hebt bekeken, heb je gemerkt dat ik een aangepaste PCB heb samengesteld om mijn eigen 9V-stroombron te maken. Onderweg heb ik een aantal dingen geleerd.
Op dit moment gebruik ik verschillende (3) 9V-batterijcellen parallel om de motoren van stroom te voorzien. Ik heb zowel alkaline- als oplaadbare NiMH-batterijen gebruikt.
Leerervaring #1: Het duurt lang (vele uren) om NiMH 9V-batterijen goed op te laden.
Mogelijke oplossing: Investeer in een NiMH-oplader met meerdere batterijen. Het zou een "slimme" oplader moeten zijn.
Nadeel: ze zijn niet goedkoop.
Leerervaring #2: 9V-batterijen bestaan eigenlijk uit verschillende kleine binnencellen. Als een van die cellen doodgaat, is de hele batterij onbruikbaar. Ik heb dit probleem NIET gehad, maar ik heb erover gelezen.
Leerervaring #3: Niet alle 9V-batterijen hebben dezelfde spanning. Deze is belangrijk. Want hoe hoger de spanning, hoe meer snelheid mogelijk is. Sommige batterijcellen (en opladers) zijn slechts 8,4V. Sommige zelfs minder. Sommige zijn 9,6V.
Leerervaring #4: 9V-batterijen, vooral de NiMH-batterijen, zijn licht in gewicht. Een goed ding. De meeste bieden echter alleen mA uitgangsstroom. Daarom moest ik ze parallel plaatsen. U heeft een totale stroomcapaciteit van bijna 2 Ampère nodig, ook voor korte tijd.
Leerervaring #5: Er bestaan 9,6V-batterijpakketten, die worden gebruikt voor zaken als radiografisch bestuurbare auto's. Ik heb er nog geen gebruikt, maar ik geloof dat ze meer stroom leveren dan de parallelle 9V-batterijen zoals ik deed. Ook kunt u de enkele eenheid opladen. De pakken zijn er in verschillende maten. En er is een gewichtsoverweging. En gebruik je het pakket dan om de hele auto aan te drijven, of alleen de motoren? Als je voor de hele auto een 5V step-down regelaar nodig hebt voor de Raspberry Pi.
De L298 H-Bridge heeft de mogelijkheid om voor dit doel 5V uit te voeren, maar ik maak me zorgen over hoeveel stroom hij kan produceren voor de Raspberry Pi en of het te veel belasting zal zijn op het L298-bord.
Als u besluit om twee afzonderlijke stroombronnen te gebruiken, heeft u mogelijk een gewichtsprobleem (te zwaar).
Stap 4: Softwareprogrammering voor gamepad-rijden
Ik denk dat ik veel van dit gedeelte al heb behandeld in de Robot Driven Via Remote USB Gamepad Instructable, dus ik zal dat hier niet herhalen.
De programmeer-/softwaresecties in die andere Instructable zijn slechts suggesties. Ik denk dat je met vallen en opstaan meer leert.
Stap 5: Een camera toevoegen
Ik geloof dat de auteur in de Udemy-cursus ronde houten deuvels en een lijmpistool gebruikt om een manier te bedenken om de camera omhoog te brengen.
U wilt de camera hoger zetten zodat deze op de tweebaansweg neerkijkt, zodat hij de rijstroken gemakkelijker kan herkennen.
Waar ik woon in de VS, waren de houten deuvels erg goedkoop. Je kunt ze kopen bij Lowe's of Home Depot. Ik koos voor vierkante deuvels in plaats van ronde deuvels.
Ik heb er ook voor gekozen om een stevigere basis voor de cameratoren te maken, en ik heb de hele toren uit de auto gehaald, zodat ik ermee kan spelen en experimenteren wat de beste positie is op de auto.
Ook heb ik de toren gemaakt met het idee om te beginnen met een USB-webcam, maar eventueel later over te gaan op het gebruik van de Picamera-module.
Misschien wilt u investeren in een camera van het type fish-eye.
Ik kocht een heel goedkoop heetlijmpistool, maar ik wilde de basis van de toren beter versterken, dus heb ik wat schroefgaten voorgeboord en schroeven toegevoegd om alles beter bij elkaar te houden.
Daarna heb ik de basis op het chassis van de auto geschroefd.
Als ik later dingen wil verplaatsen, maak ik gewoon de basis los van het chassis, boor nieuwe gaten in de nieuwe locatie van het chassis en schroef de toren opnieuw op het chassis.
Ik heb de "follow-me" Python- en Node.js-code van de grote robot (Wallace Robot 4) meegenomen om alles te testen. Zie de foto's in deze sectie voor de lijst met youtube's die veel meer details geven over "follow-me".
Zoals ik al zei, was het gemakkelijker om eerst een USB-webcam te monteren. Later kan ik de Picamera-module monteren.
Stap 6: Gezichtsherkenning - Positie bepalen
Dit onderdeel is niet de focus van de Udemy-cursus, maar het was een leuke oefening.
Als je op internet zoekt naar "python opencv gezichtsherkenning", zul je veel goede voorbeelden vinden over hoe je dat kunt doen, en ze volgen allemaal vrijwel dezelfde stappen.
- laad het "haar" gezichtsbestand
- initialiseer de camera
- start een lus waar je een frame pakt
- converteer de kleurenafbeelding naar grijstinten
- voer het naar de opencv om het gezicht(en) te laten vinden
- start een innerlijke lus (voor elk gevonden gezicht) (in mijn geval voeg ik code toe om af te breken als er meer dan 1 gezicht is)
Hiertoe kennen we, zodra we een gezicht hebben gedetecteerd, de X, Y, W en H van het denkbeeldige vierkant dat het gezicht omlijnt.
Als je wilt dat de robot vooruit of achteruit gaat, hoef je alleen maar W te overwegen. Als W te groot (te dichtbij) is, laat je de robot achteruit bewegen. Als W te klein (te ver) is, laat de robot dan naar voren bewegen.
Links/rechts bewegen is net iets ingewikkelder maar niet gek. Bekijk de afbeelding voor dit gedeelte waarin wordt beschreven hoe u de positie van het linker- versus het rechtergezicht kunt bepalen.
OPMERKING:
Als u een van de OpenCV-webvoorbeelden uitvoert, tonen ze allemaal het werkelijke beeld van wat opencv "ziet", met het gezicht omlijnd in een vierkant. Als je wilt observeren, is dat vierkant niet stabiel (constant), zelfs als je niet beweegt.
Die veranderende waarden zouden ervoor zorgen dat de robot constant in beweging is, vooruit of achteruit, links of rechts.
Je hebt dus een soort delta nodig voor zowel vooruit/achteruit als voor links/rechts.
Laten we links versus rechts nemen:
Nadat u links en rechts hebt berekend, krijgt u het verschil (delta):
delta = abs (links - rechts)
Je moet het absolute nemen omdat je niet weet welke het grootste getal zal zijn.
Vervolgens voegt u een voorwaardelijke code toe om alleen te proberen te verplaatsen als de delta groter is dan een bepaald minimum.
Je zou hetzelfde doen voor vooruit vs achteruit.
Stap 7: Gezichtspositie - Bewegende robot
Als je eenmaal weet dat je de robot naar links of rechts, vooruit of achteruit moet laten bewegen, hoe doe je dat dan?
Aangezien deze Instructable een werk in uitvoering is, heb ik op dit moment zojuist de code van mijn grote robot gekopieerd om voor dit project te gebruiken. Bekijk mijn Robotics-afspeellijst op youtube waar het dit allemaal beschrijft.
Kortom, ik heb de code in lagen.
Het gezichtsherkenningsscript van Python doet http-verzoeken aan de Node.js-server
Node.js-server luistert naar http-verzoeken voor verplaatsingsrichtingen en converteert deze naar een aangepast serieel protocol
Aangepast serieel protocol tussen Node.js-server en Arduino
Arduino-schets die de daadwerkelijke opdrachten uitvoert om de robot te verplaatsen
De Udemy-cursus doet het niet zoals hierboven. Maar omdat ik goede vorderingen wilde maken en me wilde focussen op de daadwerkelijke beeldherkenning, heb ik voorlopig mijn vorige code hergebruikt.
Aanbevolen:
Zelfrijdende en PS2Joystick-gestuurde Arduino-auto - Ajarnpa
Zelfrijdende en PS2Joystick-gestuurde Arduino-auto: Hallo, mijn naam is Joaquín en ik ben een Arduino-hobbyist. Vorig jaar raakte ik geobsedeerd door Arduino en ik begon gewoon allerlei dingen te doen en deze automatische en joystickgestuurde auto is daar een van. Als je iets soortgelijks wilt doen, zijn deze
Zelfrijdende auto op basis van Arduino - Ajarnpa
Arduino-gebaseerde zelfrijdende auto: welkom bij mijn eerste Instructable!Dus ik kreeg onlangs een project van een zelfrijdende auto toegewezen als project van mijn semester. In dit project was het mijn taak om een auto te ontwerpen die het volgende zou kunnen: Kan worden bediend met spraakopdrachten via Android Phone
Bouw je eigen Arduino-bibliotheek: 5 stappen
Bouw je eigen Arduino-bibliotheek: Hallo allemaal. In sommige projecten moet u mogelijk uw eigen bibliotheek maken als u de kant-en-klare bibliotheken niet kunt gebruiken. Of u kunt uw eigen bibliotheek maken volgens zijn eigen normen. Vandaag laat ik je zien hoe gemakkelijk je je eigen bibliotheek kunt bouwen en
Bouw uw eigen toegangscontrole met Please-open.it: 4 stappen
Bouw je eigen toegangscontrole met Please-open.it: Please-open.it is gevestigd in Frankrijk en we gaan fulltime aan dit project werken. We willen dat bedrijven (hotels, campings, stations, verhuur…) profiteren van flexibelere oplossingen en uiteraard tegen een lagere prijs. Verbind alle interne data (afspraak
Hoe te bouwen: Arduino zelfrijdende auto - Ajarnpa
Hoe te bouwen: Arduino zelfrijdende auto: de Arduino zelfrijdende auto is een project bestaande uit een autochassis, twee gemotoriseerde wielen, een 360° wiel (niet-gemotoriseerd) en enkele sensoren. Hij wordt gevoed door een 9-volt batterij met behulp van een Arduino Nano die is aangesloten op een mini-breadboard om de mo