Inhoudsopgave:

Geavanceerde lijnvolgende robot - Ajarnpa
Geavanceerde lijnvolgende robot - Ajarnpa

Video: Geavanceerde lijnvolgende robot - Ajarnpa

Video: Geavanceerde lijnvolgende robot - Ajarnpa
Video: Leven met geavanceerde therapie & Parkinson 2024, Juli-
Anonim
Image
Image
Prototyping - Perfboard
Prototyping - Perfboard

Dit is een geavanceerde lijnvolgende robot op basis van Teensy 3.6 en QTRX-lijnsensor die ik heb gebouwd en waar ik al geruime tijd aan werk. Er zijn enkele belangrijke verbeteringen in het ontwerp en de prestaties van mijn eerdere lijn volgende robot. De snelheid en reactie van de robot is verbeterd. De algehele structuur is compact en lichtgewicht. De componenten zijn dicht bij de wielas geplaatst om het impulsmoment te minimaliseren. Krachtige micro-metalen tandwielmotoren zorgen voor voldoende koppel en aluminium naaf-siliconenwielen bieden de broodnodige tractie bij hoge snelheden. Prop schild en wiel encoders stellen de robot in staat om zijn positie en oriëntatie te bepalen. Met Teensyview aan boord gemonteerd, kan alle relevante informatie worden gevisualiseerd en kunnen belangrijke programmaparameters worden bijgewerkt met behulp van drukknoppen.

Om te beginnen met het bouwen van deze robot, heb je de volgende benodigdheden nodig (en veel tijd en geduld tot je beschikking).

Benodigdheden

Elektronica

  • Teensy 3.6 Ontwikkelingsbord
  • Prop Shield met bewegingssensoren
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A reflectiesensorarray
  • 15x20cm dubbelzijdig prototype PCB
  • Pololu Step-Up/Step-Down Spanningsregelaar S9V11F3S5
  • Pololu Instelbare 4-5-20V Step-Up Spanningsregelaar U3V70A
  • MP12 6V 1580 rpm micro-reductiemotor met encoder (x2)
  • DRV8833 drager met dubbele motoraandrijving (x2)
  • 3.7V, 750mAh Li-Po-batterij
  • Aan / uit knop
  • Elektrolytische condensator 470uF
  • Elektrolytische condensator 1000uF (x2)
  • Keramische condensator 0.1uF (x5)
  • Drukknoppen (x3)
  • 10 mm groene led (x2)

Hardware

  • Atom Siliconen Wiel 37x34mm (x2)
  • Pololu Kogelwiel met 3/8” Metalen Kogel
  • N20 motorsteun (x2)
  • Bout en moeren

Kabels en connectoren

  • 24AWG flexibele draden
  • 24-pins FFC naar DIP breakout en FFC-kabel (Type A, 150 mm lengte)
  • Ronde vrouwelijke pin header
  • Ronde vrouwelijke pin header lange terminal
  • Rechthoekige dubbele rij vrouwelijke kop
  • Rechthoekige dubbele rij mannelijke kop
  • Mannelijke pin header
  • Pin-header mannelijke naald

Gereedschap

  • Multimeter
  • Soldeerbout
  • Soldeerdraad
  • Draadstripper
  • Draadknipper

Stap 1: Systeemoverzicht

Net als bij mijn eerdere ontwerp van een zelfbalancerende robot, is deze robot een verzameling breakout-borden die op een perfboard zijn gemonteerd en die ook dienen als structuur.

De belangrijkste systemen van de robot worden hieronder beschreven.

Microcontroller: Teensy 3.6 ontwikkelbord met 32-bit 180MHz ARM Cortex-M4-processor.

Lijnsensor: Pololu's QTRX-MD-16A 16-kanaals analoge uitgangslijnsensorarray in opstelling met gemiddelde dichtheid (8 mm sensorpitch).

Aandrijving: 6V, 1580rpm, krachtige micro-metalen tandwielmotoren met magnetische wiel-encoder en siliconen wielen gemonteerd op aluminium naven.

Odometrie: magnetische wiel-encoderparen voor het schatten van de coördinaten en afgelegde afstand.

Oriëntatiesensor: Prop schild met bewegingssensoren voor het schatten van positie en richting van de robot.

Voeding: 3.7V, 750mAh lipo-batterij als stroombron. 3.3V step-up/down-regelaar voedt microcontroller, sensoren en weergaveapparaat. Verstelbare step-up regelaar drijft de twee motoren aan.

Gebruikersinterface: Teensyview voor het weergeven van informatie. Breakout met drie drukknoppen voor het accepteren van gebruikersinvoer. Twee groene LED's met een diameter van 10 mm voor statusindicatie tijdens het hardlopen.

Stap 2: Laten we beginnen met prototypen

Image
Image

We zullen het bovenstaande circuit op het perfboard implementeren. We moeten eerst onze breakout-boards gereed houden door er headers op te solderen. De video geeft een idee over welke headers op welke breakout-boards moeten worden gesoldeerd.

Na het solderen van headers op breakout-boards, stapel je de Teensyview en drukknop breakout op Teensy.

Stap 3: Prototyping - Perfboard

Prototyping - Perfboard
Prototyping - Perfboard

Pak het 15x20cm dubbelzijdige prototype perfboard en markeer de grens met een permanente marker zoals weergegeven in de afbeelding. Boor gaten van M2-formaat voor het monteren van de sensorarray, het zwenkwiel en de micrometalen tandwielmotoren op locaties die zijn gemarkeerd met een witte cirkel. We zullen later de perfboard langs de grens snijden na het solderen en testen van alle componenten.

We beginnen onze prototyping door de header-pinnen en sockets op het perfboard te solderen. De breakout-borden worden later op deze headers geplaatst. Let goed op de positie van de headers op het perfboard. We zullen alle draden aansluiten op basis van deze lay-out van headers.

Stap 4: Prototyping - Prop Shield

Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield
Prototyping - Prop Shield

We zullen eerst de verbindingen aan het propschild solderen. Omdat we alleen de bewegingssensoren van het propschild gebruiken, hoeven we alleen SCL-, SDA- en IRQ-pinnen aan te sluiten, afgezien van de 3V- en aardingspinnen van het propschild.

Zodra de verbinding is voltooid, plaatst u Teensy en prop shield en kalibreert u de bewegingssensoren door de hier genoemde stappen te volgen.

Stap 5: Prototyping - Kracht en aarde

Prototyping - Kracht en aarde
Prototyping - Kracht en aarde

Soldeer alle stroom- en aardingsverbindingen volgens de afbeelding. Plaats alle breakout-kaarten op hun plaats en zorg voor continuïteit met behulp van een multimeter. Controleer de verschillende spanningsniveaus aan boord.

  • Li-po uitgangsspanning (meestal tussen 3V en 4,2V)
  • Step-up/down regulator uitgangsspanning (3,3 V)
  • Instelbare uitgangsspanning van de step-up regulator (ingesteld op 6V)

Stap 6: Prototyping - Motor Driver Carrier

Prototyping - Motoraandrijfdrager
Prototyping - Motoraandrijfdrager
Prototyping - Motoraandrijfdrager
Prototyping - Motoraandrijfdrager
Prototyping - Motoraandrijfdrager
Prototyping - Motoraandrijfdrager

Het DRV8833-draagbord met dubbele motordriver kan 1,2 A continu en 2 A piekstromen per kanaal leveren. We zullen de twee kanalen parallel aansluiten om één motor aan te drijven. Soldeer de verbindingen door de onderstaande stappen te volgen.

  • Parallel de twee ingangen en de twee uitgangen van de motor driver carrier zoals weergegeven in afbeelding.
  • Sluit de ingangsbesturingsdraden aan op de motordriver.
  • Sluit een elektrolytische condensator van 1000 uF en een keramische condensator van 0,1 uF aan op de Vin- en Gnd-aansluitingen van de twee draagkaarten.
  • Sluit een keramische condensator van 0,1 uF aan op de uitgangsklemmen van de motordriver.

Stap 7: Prototyping - Line Sensor Array Header

Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header
Prototyping - Line Sensor Array Header

Teensy 3.6 heeft twee ADC's - ADC0 en ADC1 die zijn gemultiplext naar 25 toegankelijke pinnen. We hebben tegelijkertijd toegang tot twee pinnen van de twee ADC's. We zullen elk acht lijnsensoren aansluiten op ADC0 en ADC1. De even aantal sensoren worden aangesloten op ADC1 en oneven aantal sensoren op ADC0. Soldeer de verbindingen door de onderstaande stappen te volgen. We zullen later de lijnsensor aansluiten met behulp van FFC naar DIP-adapter en kabel.

  • Sluit alle even sensorpinnen (16, 14, 12, 10, 8, 6, 4, 2) aan zoals weergegeven in de afbeelding. Leid de draad voor het aansluiten van sensorpen 12 door de achterkant van de perfboard.
  • Sluit de zendercontrolepen (EVEN) aan op Teensy-pen 30.
  • Sluit alle oneven sensorpinnen (15, 13, 11, 9, 7, 5, 3, 1) aan zoals weergegeven in de afbeelding.
  • Sluit een 470uF elektrolytische condensator aan over Vcc en Gnd.

Als u de lijnsensorpinnen en hun corresponderende headerpinnen op het perboard nauwkeurig observeert, zult u merken dat de bovenste rij van de lijnsensor overeenkomt met de onderste rij van de header op het perboard en vice versa. Dit komt omdat wanneer we de lijnsensor op het perfboard aansluiten met behulp van dubbele rij rechthoekige headers, de rijen correct worden uitgelijnd. Het kostte me behoorlijk wat tijd om dit uit te zoeken en de pintoewijzingen in het programma te corrigeren.

Stap 8: Prototyping - Micro-reductiemotor en encoder

Prototyping - Micro-reductiemotor en encoder
Prototyping - Micro-reductiemotor en encoder
  • Bevestig de micro-metalen reductiemotor met encoder met behulp van N20-motorsteunen.
  • Sluit de motor- en encoderdraden aan zoals weergegeven in de afbeelding.
  • Linker encoder - Teensy pinnen 4 & 0
  • Rechter encoder - Teensy pinnen 9 & 27

Stap 9: Prototyping - LED's

Prototyping - LED's
Prototyping - LED's
Prototyping - LED's
Prototyping - LED's

De twee LED's geven aan of de robot een bocht heeft gedetecteerd of niet. Ik heb een serieweerstand van 470 ohm gebruikt om de LED's op Teensy aan te sluiten.

  • Linker LED anode naar Teensy pin 6
  • Rechter LED anode naar Teensy pin 8

Stap 10: Prototyping - Breakouts

Image
Image
Prototyping - Breakouts
Prototyping - Breakouts

Nu we al ons soldeerwerk op het perfboard hebben voltooid, kunnen we voorzichtig langs de grens op het perfboard snijden en de extra stukjes perfboard verwijderen. Bevestig ook de twee wielen en het zwenkwiel.

Plaats alle breakout-kaarten in hun respectieve sockets. Raadpleeg de video voor het plaatsen van de FFC-DIP-breakout en voor het bevestigen van de QTRX-MD-16A-lijnsensor.

Stap 11: Overzicht softwarebibliotheken

Overzicht softwarebibliotheken
Overzicht softwarebibliotheken

We gaan de Teensy programmeren in Arduino IDE. We hebben enkele bibliotheken nodig voordat we beginnen. De bibliotheken die we gaan gebruiken zijn:

  • Encoder
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

En sommige die speciaal voor deze robot zijn geschreven,

  • Druk op de knop
  • Lijnsensor
  • TeensyviewMenu
  • Motoren

De bibliotheken die specifiek zijn voor deze robot worden in detail besproken en kunnen in de volgende stappen worden gedownload.

Stap 12: Bibliotheken uitgelegd - PushButton

Deze bibliotheek is bedoeld om het breakout-bord met drukknoppen te koppelen aan de Teensy. De gebruikte functies zijn:

PushButton (int leftButtonPin, int centerButtonPin, int rightButtonPin);

Door deze constructor aan te roepen door een object te maken, worden de pinnen van de drukknop geconfigureerd in de modus INPUT_PULLUP.

int8_t waitForButtonPress (ongeldig);

Deze functie wacht totdat een knop wordt ingedrukt en losgelaten en geeft de sleutelcode terug.

int8_t getSingleButtonPress (ongeldig);

Deze functie controleert of een knop wordt ingedrukt en losgelaten. Zo ja, dan wordt de sleutelcode geretourneerd, anders wordt nul geretourneerd.

Stap 13: bibliotheken uitgelegd - lijnsensor

LineSensor is de bibliotheek voor het koppelen van de lijnsensorarray met Teensy. Hieronder volgen de gebruikte functies.

LineSensor (leeg);

Door deze constructor aan te roepen door een object te maken, worden ADC0 en ADC1 geïnitialiseerd, worden de drempel-, minimum- en maximumwaarden van EEPROM gelezen en worden de sensorpinnen geconfigureerd voor invoermodus en emitterbesturingspin naar uitvoermodus.

ongeldig kalibreren (uint8_t CalibrationMode);

Deze functie kalibreert de lijnsensoren. De kalibratiemodus kan MIN_MAX of MEDIAN_FILTER zijn. Deze functie wordt in een latere stap in detail uitgelegd.

void getSensorsAnalog (uint16_t *sensorValue, uint8_t-modus);

Leest sensorarray in een van de drie modi die als argument zijn doorgegeven. De modus is de status van de zenders en kan AAN, UIT of OMSCHAKELEN zijn. De TOGGLE-modus compenseert de sensormetingen van reflectie als gevolg van omgevingslicht. De sensoren aangesloten op ADC0 en ADC1 worden synchroon uitgelezen.

int getLinePosition(uint16_t *sensorValue);

Berekent de positie van de sensorarray over de lijn volgens de methode van het gewogen gemiddelde.

uint16_t getSensorsBinary(uint16_t *sensorValue);

Retourneert een 16-bits weergave van de status van de sensoren. Een binaire waarde geeft aan dat de sensor boven de lijn is en een binaire nul geeft aan dat de sensor buiten de lijn is.

uint8_t countBinary(uint16_t binaryValue);

Het doorgeven van de 16-bits weergave van sensorwaarden aan deze functie retourneert het aantal sensoren dat over de lijn is.

void getSensorsNormalized(uint16_t *sensorValue, uint8_t modus);

Leest de sensorwaarden en beperkt elke sensorwaarde tot de bijbehorende min en max waarden. De sensorwaarden worden vervolgens toegewezen van hun overeenkomstige min tot max bereik tot 0 tot 1000 bereik.

Stap 14: bibliotheken uitgelegd - TeensyviewMenu

TeensyviewMenu is de bibliotheek waar de functies voor het weergavemenu toegankelijk zijn. Hieronder volgen de gebruikte functies.

TeensyViewMenu (ongeldig);

Door deze constructor aan te roepen, wordt een object van de klasse LineSensor, PushButton en TeensyView gemaakt.

ongeldige intro (leeg);

Dit is om door het menu te navigeren.

ongeldige test (nietig);

Dit wordt intern in het menu genoemd wanneer de lijnsensorwaarden moeten worden weergegeven op Teensyview om te testen.

Stap 15: bibliotheken uitgelegd - Motors

Motors is de bibliotheek die wordt gebruikt voor het aandrijven van de twee motoren. Hieronder volgen de gebruikte functies.

Motoren (leeg);

Door deze constructor aan te roepen door een object te maken, worden de motorrichtingsbesturing en PWM-besturingspinnen geconfigureerd naar de uitvoermodus.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Door deze functie aan te roepen, worden de twee motoren aangedreven met snelheden die als argumenten worden doorgegeven. De waarde van de snelheid kan variëren van -255 tot +255 met een negatief teken dat aangeeft dat de draairichting is omgekeerd.

Stap 16: Testen - Encoder-odometrie

We zullen de magnetische wiel-encoders testen en de positie en afstand weergeven die door de robot wordt afgelegd.

Upload de DualEncoderTeensyview.ino. Het programma toont de encoder-ticks op Teensyview. De encoder tikt increment aan als u de robot vooruit beweegt en verlaagt als u hem achteruit beweegt.

Upload nu de EncoderOdometry.ino. Dit programma geeft de positie van de robot weer in x-y-coördinaten, de totale afgelegde afstand in centimeters en de gedraaide hoek in graden.

Ik heb verwezen naar de implementatie van Dead Reckoning door Odometry op een robot met R/C Servo Differential Drive door Seattle Robotics Society voor het bepalen van de positie van encoder-ticks.

Stap 17: Testen - Prop Shield bewegingssensoren

Zorg ervoor dat je de bewegingssensoren hebt gekalibreerd door de hier genoemde stappen te volgen.

Upload nu de PropShieldTeensyView.ino. Je zou de accelerometer-, gyro- en magnetometerwaarden van alle drie de assen op de Teensyview moeten kunnen zien.

Stap 18: Programmaoverzicht

Het programma voor de geavanceerde lijnvolger is geschreven in Arduino IDE. Het programma werkt in de volgende volgorde die hieronder wordt uitgelegd.

  • Waarden die zijn opgeslagen in EEPROM worden gelezen en het menu wordt weergegeven.
  • Door op LAUNCH te drukken, komt het programma in de lus.
  • Genormaliseerde lijnsensorwaarden worden gelezen.
  • Binaire waarde van lijnpositie wordt verkregen met behulp van genormaliseerde sensorwaarden.
  • De telling van het aantal sensoren dat zich boven de lijn bevindt, wordt berekend op basis van de binaire waarde van de lijnpositie.
  • Encoder-ticks worden bijgewerkt en de totale afgelegde afstand, x-y-coördinaten en hoek worden bijgewerkt.
  • Voor verschillende waarden van binaire telling variërend van 0 tot 16, wordt een reeks instructies uitgevoerd. Als de binaire telling in het bereik van 1 tot 5 ligt en als de sensoren die zich boven de lijn bevinden naast elkaar liggen, wordt de PID-routine aangeroepen. Rotatie wordt uitgevoerd in andere combinaties van binaire waarde en binaire telling.
  • In de PID-routine (die in feite een PD-routine is), worden de motoren aangedreven met snelheden die zijn berekend op basis van fout, foutverandering, Kp- en Kd-waarden.

Het programma meet op dit moment geen oriëntatiewaarden van het steunscherm. Dit is een werk in uitvoering en wordt bijgewerkt.

Upload TestRun20.ino. In de volgende stappen zullen we zien hoe we door het menu kunnen navigeren, instellingen kunnen aanpassen en hoe we de lijnsensoren kunnen kalibreren, waarna we onze robot zullen testen.

Stap 19: Navigeren door menu en instellingen

Het menu heeft de volgende instellingen die kunnen worden genavigeerd met de linker en rechter drukknoppen en geselecteerd met de middelste drukknop. De instellingen en hun functies worden hieronder beschreven.

  1. KALIBREREN: Om lijnsensoren te kalibreren.
  2. TEST: Om lijnsensorwaarden weer te geven.
  3. LANCERING: Om de volgende regel te starten.
  4. MAX SPEED: Om de bovengrens van de snelheid van de robot in te stellen.
  5. ROTATE SPEED: Om de bovengrens van de snelheid van de robot in te stellen wanneer deze een bocht maakt, d.w.z. wanneer beide wielen met gelijke snelheden in tegengestelde richting draaien.
  6. KP: Proportionele constante.
  7. KD: Afgeleide constante.
  8. RUN MODE: Om te kiezen tussen twee bedrijfsmodi - NORMAAL en ACCL. In de NORMALE modus werkt de robot met vooraf gedefinieerde snelheden die overeenkomen met de lijnpositiewaarden. In de ACCL-modus wordt de MAX. SNELHEID van de robot vervangen door ACCL SNELHEID in vooraf gedefinieerde stadia van de baan. Dit kan worden gebruikt om de robot op rechte stukken van de baan te versnellen. De volgende instellingen zijn alleen toegankelijk als de RUN MODE is ingesteld op ACCL.
  9. RONDEAFSTAND: Om de totale lengte van de racebaan in te stellen.
  10. ACCL SPEED: Om de acceleratiesnelheid van de robot in te stellen. Deze snelheid vervangt de MAX SNELHEID in verschillende stadia van de baan, zoals hieronder gedefinieerd.
  11. NEE. OF STAGES: Om het aantal trappen in te stellen waarin ACCL SPEED wordt gebruikt.
  12. STAGE 1: Om de start- en eindafstanden in te stellen van de etappe waarin MAX SPEED wordt vervangen door ACCL SPEED. Voor elke etappe kunnen de start- en eindafstanden afzonderlijk worden ingesteld.

Stap 20: Lijnsensorkalibratie

Image
Image

Lijnsensorkalibratie is het proces waarmee de drempelwaarde van elk van de 16 sensoren wordt bepaald. Deze drempelwaarde wordt gebruikt om te beslissen of een bepaalde sensor over de lijn is of niet. Om de drempelwaarden van 16 sensoren te bepalen, gebruiken we een van beide methoden.

MEDIAAN FILTER: Bij deze methode worden de lijnsensoren boven het witte oppervlak geplaatst en wordt een vooraf bepaald aantal sensormetingen gedaan voor alle 16 sensoren. De mediaanwaarden van alle 16 sensoren worden bepaald. Hetzelfde proces wordt herhaald nadat de lijnsensoren over het zwarte oppervlak zijn geplaatst. De drempelwaarde is het gemiddelde van de mediaanwaarden van zwarte en witte oppervlakken.

MIN MAX: Bij deze methode worden de sensorwaarden herhaaldelijk gelezen totdat de gebruiker om een stop vraagt. De maximale en minimale waarden die elke sensor tegenkomt, worden opgeslagen. De drempelwaarde is het gemiddelde van minimum- en maximumwaarden.

De aldus verkregen drempelwaarden worden toegewezen aan het bereik van 0 tot 1000.

De kalibratie van lijnsensoren door de MIN MAX-methode wordt getoond in de video. Na het kalibreren van de lijnsensoren kunnen de gegevens worden gevisualiseerd zoals weergegeven in de afbeelding. De volgende informatie wordt weergegeven.

  • Een 16-bits binaire weergave van de lijnpositie met een binaire 1 die aangeeft dat de corresponderende lijnsensor boven de lijn is en een binaire 0 die aangeeft dat de lijnsensor zich buiten de lijn bevindt.
  • Een telling van het totale aantal sensoren dat over de lijn is.
  • Minimum-, maximum- en sensorwaarden (onbewerkt en genormaliseerd) van de 16 sensoren, één sensor tegelijk.
  • Lijnpositie in het bereik -7500 tot +7500.

De minimale en maximale lijnsensorwaarden worden vervolgens opgeslagen in EEPROM.

Stap 21: Proefdraaien

Image
Image

De video is van een testrit waarbij de robot is geprogrammeerd om te stoppen nadat hij één ronde heeft voltooid.

Stap 22: Laatste gedachten en verbeteringen

Robotwedstrijd
Robotwedstrijd

De hardware die is samengesteld om deze robot te bouwen, wordt niet volledig gebruikt door het programma dat hem uitvoert. Op het programmagedeelte konden nog veel verbeteringen worden aangebracht. De bewegingssensoren van prop shield worden momenteel niet gebruikt voor het bepalen van positie en oriëntatie. De odometriegegevens van encoders kunnen worden gecombineerd met de oriëntatiegegevens van prop shield om de positie en richting van de robot nauwkeurig te bepalen. Deze gegevens kunnen vervolgens worden gebruikt om de robot te programmeren om de baan in meerdere ronden te leren. Ik moedig je aan om op dit onderdeel te experimenteren en je resultaten te delen.

Veel geluk.

Robotwedstrijd
Robotwedstrijd

Tweede prijs in de Robots-wedstrijd

Aanbevolen: