Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Naudodami „PreciseMovement Arduino“biblioteką, priverskite „Arduino“robotą eiti tam tikrą atstumą tiesiai arba pasukti tam tikru kampu.
Robotui reikia riedančio rutulio ratuko arba jo ekvivalento, kad sukimo metu būtų sumažinta trintis.
www.pololu.com/product/954
Galite nurodyti robotui eiti į priekį tam tikru atstumu arba pasukti tam tikru kampu. Programa nustato savo padėtį naudodama negyvą skaičiavimą. Kadangi padėties įvertinimai priklauso tik nuo rato greičio, slydimas sukels didelę klaidą. Roboto dizaineris turėtų būti atsargus, kad sumažintų slydimo riziką.
Tai buvo išbandyta, kad veiktų su robotu „SnappyXO“.
1 veiksmas: pamokos vieta pakeista
Pamoka perkelta į žemiau esantį puslapį. Ši pamoka nebetaikoma.
sites.google.com/stonybrook.edu/premo
2 žingsnis: Sukurkite „SnappyXO“diferencialinės pavaros robotą
„PreciseMovement“biblioteka, kurią naudosime, yra suderinama tik su diferencinės pavaros robotais. Galite pasirinkti naudoti kitus dviejų ratų pavaros robotus.
3 žingsnis: prijunkite elektroniką
Standartinis „SnappyXO“optinis kodavimo įrenginys:
D0 (kodavimo išvestis) -> „Arduino“skaitmeninis kaištis
VCC -> Arduino 5V
GND -> GND
Variklis ir „Arduino“galia:
Variklio maitinimo šaltinis turi būti tinkamas jūsų naudojamiems varikliams. „SnappyXO“rinkiniui variklio galiai naudojamos 4 AA baterijos, o „Arduino“- 9 V baterija. Įsitikinkite, kad jie visi turi bendrą GND.
4 veiksmas: įdiekite „PreciseMovement Arduino“biblioteką
Parsisiųsti:
github.com/jaean123/PreciseMovement-library/releases
Kaip įdiegti „Arduino“biblioteką:
wiki.seeedstudio.com/How_to_install_Arduino_Library/
5 žingsnis: kodas
„Arduino“kodas:
create.arduino.cc/editor/hileloop/7a35299d-4e73-409d-9f39-2c517b3000d5/preview
Šiuos parametrus reikia koreguoti. Kitus parametrus, pažymėtus rekomenduotinais ant kodo, galima koreguoti, kad jie veiktų geriau.
- Patikrinkite ir nustatykite variklio kaiščius pagal ARDUINO PINS.
-
Nustatykite LENGTH ir RADIUS.
- LENGTH yra atstumas nuo kairiojo rato iki dešiniojo rato.
- RADIUS yra rato spindulys.
-
Nustatykite PULSES_PER_REV, tai yra impulsų, kuriuos kodavimo įrenginys išleidžia per vieną rato apsisukimą, skaičius.
- Atkreipkite dėmesį, kad tai skiriasi nuo impulsų skaičiaus, kurį daviklis išleidžia vienam variklio veleno apsisukimui, nebent kodavimo įrenginiai yra prijungti skaityti tiesiai iš rato veleno.
- PULSES_PER_REV = (impulsai per vieną variklio veleno apsisukimą) x (pavaros santykis)
-
Nustatykite STOP_LENGTH, jei matote, kad robotas peržengia judesį į priekį.
Robotas sustos, kai numatoma padėtis bus STOP_LENGTH nuo tikslo. Taigi STOP_LENGTH yra apytikslis atstumas, reikalingas robotui sustoti
-
PID parametrai
KP_FW: Tai proporcingas judesio į priekį komponentas. Padidinkite tai, kol robotas eis tiesiai. Jei sureguliuodami nepavyks, kad tai vyktų tiesiai, greičiausiai kalta aparatūra. (pvz., ratų poslinkis ir pan.)
KP_TW: tai proporcingas sukimo judesio PID komponentas. Tiesiog pradėkite nuo mažos vertės ir padidinkite ją, kol sukimosi greitis arba roboto kampinis greitis sukantis bus pakankamai greitas, tačiau nesukels perviršio. Norėdami atlikti stebėjimus, galite pakeisti robotą nuo 0 iki 90 ir atgal, įterpdami šią funkciją į kilpos funkciją
Įdėkite tai į kilpą, kad sureguliuotumėte KP_FW:
mover.forward (99999);
Įdėkite tai į kilpą, kad pakaitomis nuo 0 iki 90 sureguliuotumėte KP_TW:
judintojas.suktukas (90); // Tvist 90 CW
vėlavimas (2000 m.);
mover.twist (-90) // Twist 90 CCW
vėlavimas (2000 m.);
Atminkite, kad norint iš tikrųjų pasukti kampinį greitį ties TARGET_TWIST_OMEGA, KI_TW taip pat reikia sureguliuoti, nes proporcinis valdiklis niekada nepasieks tikslaus tikslo. Tačiau nebūtina sukti tokiu kampiniu greičiu. Kampinis greitis tiesiog turi būti pakankamai lėtas.
6 veiksmas: kaip tai veikia
Jei įdomu, kaip tai veikia, skaitykite toliau.
Judėjimas į priekį yra tiesus, naudojant gryno persekiojimo algoritmą tiesia linija. Daugiau apie „Pure Pursuit“:
Sukimo PID valdiklis bando išlaikyti posūkio kampinį greitį esant TARGET_TWIST_OMEGA. Atminkite, kad šis kampinis greitis yra viso roboto, o ne ratų, kampinis greitis. Naudojamas tik vienas PID valdiklis, o išvestis yra kairiojo ir dešiniojo variklių PWM įrašymo greitis. Norint apskaičiuoti kampą, atliekamas skaičiavimas. Kai kampas pasiekia klaidos slenkstį, robotas sustoja.