Turinys:

„Rpibot“- apie robotų mokymąsi: 9 žingsniai
„Rpibot“- apie robotų mokymąsi: 9 žingsniai

Video: „Rpibot“- apie robotų mokymąsi: 9 žingsniai

Video: „Rpibot“- apie robotų mokymąsi: 9 žingsniai
Video: rpibot 2024, Liepa
Anonim
„Rpibot“- apie mokymosi robotiką
„Rpibot“- apie mokymosi robotiką

Esu įmontuotos programinės įrangos inžinierius Vokietijos automobilių kompanijoje. Šį projektą pradėjau kaip įterptųjų sistemų mokymosi platforma. Projektas buvo atšauktas anksti, bet man taip patiko, kad tęsiau laisvalaikiu. Tai rezultatas…

Turėjau šiuos reikalavimus:

  • Paprasta aparatinė įranga (pagrindinis dėmesys skiriamas programinei įrangai)
  • Pigi aparatinė įranga (apie 100 €)
  • Išplečiama (kai kurios parinktys jau yra aprašymo dalis)
  • Maitinimo įtampa visiems komponentams iš vieno 5 V šaltinio („Powerbank“)

Tikrai nebuvo tikslo, išskyrus mokymąsi. Platforma gali būti naudojama mokymuisi, stebėjimui, robotams,…

Tai nėra pradedančiųjų pamoka. Jums reikia pagrindinių žinių apie:

  • Programavimas („Python“)
  • Pagrindinė elektronika (norint prijungti modulius tinkama įtampa)
  • Pagrindinė valdymo teorija (PID)

Galiausiai turbūt susidursite su problemomis, kaip aš. Turėdami šiek tiek smalsumo ir ištvermės, pereisite projektą ir spręsite iššūkius. Mano kodas yra kuo paprastesnis, o svarbios kodo eilutės yra komentuojamos, kad būtų galima pateikti užuominų.

Visą šaltinio kodą ir failus galite rasti čia:

Priedai:

Mechanikai

  • 1x faneros lenta (A4 formato, 4 mm storio)
  • 3x M4 x 80 varžtas ir veržlė
  • 2x pavarų varikliai su antriniu kodavimo velenu. Ratai.
  • 1x laisvas ratas

1x panoraminis ir pakreipiamas fotoaparato tvirtinimas (neprivaloma)

Elektronika

  • 1x „Raspberry Pi Zero“su antrašte ir kamera
  • 1x PCA 9685 servo valdiklis
  • 2x optinio kodavimo ratas ir grandinė
  • 1x jungiamieji laidai
  • 1x USB maitinimo blokas
  • 1x DRV8833 dviejų variklių tvarkyklė
  • 2x „Micro Servos SG90“kameros pakreipimui ir pakreipimui (pasirinktinai)
  • 1x MPU9250 IMU (neprivaloma)
  • 1x HC-SR04 ultragarsinis atstumo jutiklis (pasirinktinai)
  • 1x perforuota lenta ir litavimo viela, antraštės,…

1 žingsnis: sukurkite važiuoklę

Sukurkite važiuoklę
Sukurkite važiuoklę
Sukurkite važiuoklę
Sukurkite važiuoklę
Sukurkite važiuoklę
Sukurkite važiuoklę

Nesu geras mechanikas konstruktorius. Be to, projekto tikslas yra ne per daug laiko praleisti važiuoklėje. Bet kokiu atveju aš nustatiau šiuos reikalavimus:

  • Pigios medžiagos
  • Greitas surinkimas ir išmontavimas
  • Išplečiama (pvz., Vieta papildomiems jutikliams)
  • Lengvos medžiagos taupo energiją elektronikai

Lengva ir pigi važiuoklė gali būti pagaminta iš faneros. Jį lengva apdirbti su freza ir rankiniu grąžtu. Galite klijuoti mažas medines dalis, kad sukurtumėte laikiklius jutikliams ir varikliams.

Pagalvokite apie defektų komponentų pakeitimą arba elektrinį derinimą. Pagrindinės dalys turi būti pritvirtintos varžtais, kuriuos reikia pakeisti. Karštas klijų pistoletas gali būti paprastas, bet tikriausiai ne pats geriausias būdas sukurti važiuoklę … Man reikėjo daug laiko, kad galvočiau apie lengvą dalių išardymo koncepciją. 3D spausdinimas yra gera alternatyva, tačiau tai gali būti gana brangu arba užima daug laiko.

Laisvas ratas pagaliau yra labai lengvas ir lengvai montuojamas. Visos alternatyvos buvo sunkios arba trinties (aš bandžiau keletą iš jų, kol suradau galutinį). Turėjau nupjauti tik medinį tarpiklį, kad išlyginčiau ratą be uodegos, sumontavus pagrindinius ratus.

Rato savybės (programinės įrangos skaičiavimams)

Apimtis: 21, 5 cm Impulsai: 20 impulsų/aps. Rezoliucija: 1, 075 cm (galiausiai 1 impulsas yra apie 1 cm, o tai lengva apskaičiuoti programinę įrangą)

2 žingsnis: Elektronika ir laidai

Elektronika ir laidai
Elektronika ir laidai
Elektronika ir laidai
Elektronika ir laidai
Elektronika ir laidai
Elektronika ir laidai

Projektas naudoja skirtingus modulius, kaip parodyta diagramoje.

„Raspberry Pi Zero“yra pagrindinis valdiklis. Jis skaito jutiklius ir valdo variklius pagal PWM signalą. Jis prijungtas prie nuotolinio kompiuterio per „Wi -Fi“.

DRV8833 yra dvigubo variklio H tiltas. Jis tiekia varikliams pakankamą srovę (ko „Raspberry Pi“negali padaryti, nes išėjimai gali tiekti tik tam tikrą mA).

Optinis kodavimo įrenginys skleidžia kvadrato formos signalą kiekvieną kartą, kai šviesa praeina pro kodavimo ratukus. Mes naudosime „Raspberry Pi“HW pertraukas, kad gautume informaciją kiekvieną kartą, kai signalas perjungiamas.

„Pca9695“yra servo valdymo plokštė. Jį perduoda I2C nuoseklioji magistralė. Ši plokštė teikia PWM signalus ir maitinimo įtampą, kurie kontroliuoja kumštelio pasukimo ir pakreipimo servus.

MPU9265 yra 3 ašių pagreitis, 3 ašių kampinis sukimosi greitis ir 3 ašių magnetinio srauto jutiklis. Mes jį daugiausia naudosime norėdami gauti kompaso antraštę.

Visi skirtingi moduliai yra sujungti sujungimo viela. Duonos lenta veikia kaip dispečeris ir tiekia maitinimo įtampą (5 V ir 3,3 V) ir pagrindus. Visos jungtys aprašytos prijungimo lentelėje (žr. Priedą). Jei prijungsite 5 V prie 3,3 V įvesties, jūsų mikroschema greičiausiai bus sunaikinta. Prieš tiekdami būkite atsargūs ir du kartus patikrinkite visus laidus (čia ypač reikia atsižvelgti į kodavimo įrenginį). Prieš prijungdami visas plokštes, multimetru turėtumėte išmatuoti pagrindinę maitinimo įtampą siuntimo lentoje. Moduliai buvo pritvirtinti nailoniniais varžtais prie važiuoklės. Taip pat čia buvau laimingas, kad juos sutvarkiau, bet taip pat galiu juos pašalinti gedimo atveju.

Vienintelis litavimas pagaliau buvo varikliai, duonos lenta ir antraštės. Tiesą sakant, man patinka jungiamieji laidai, tačiau jie gali atlaisvinti ryšį. Kai kuriais atvejais kai kurie programinės įrangos stebėjimai gali padėti analizuoti ryšius.

3 žingsnis: programinės įrangos infrastruktūra

Programinės įrangos infrastruktūra
Programinės įrangos infrastruktūra
Programinės įrangos infrastruktūra
Programinės įrangos infrastruktūra

Pasiekę mechaniką, sukursime tam tikrą programinės įrangos infrastruktūrą, kad būtų sukurtos patogios plėtros sąlygos.

Git

Tai nemokama ir atviro kodo versijų valdymo sistema. Jis naudojamas dideliems projektams valdyti kaip „Linux“, tačiau taip pat gali būti lengvai naudojamas mažiems projektams (žr. „Github“ir „Bitbucket“).

Projekto pakeitimus galima stebėti vietoje ir perkelti į nuotolinį serverį, kad būtų galima bendrinti programinę įrangą su bendruomene.

Pagrindinės naudojamos komandos yra šios:

git klonas https://github.com/makerobotics/RPIbot.git [Gaukite šaltinio kodą ir „git“konfigūraciją]

„git pull origin master“[gaukite naujausią informaciją iš nuotolinės saugyklos]

git status [gauti vietinės saugyklos būseną. Ar buvo pakeisti failai?] Git log [gauti įsipareigojimų sąrašą] git add. [pridėti visus pakeistus failus į etapą, į kurį reikia atsižvelgti atliekant kitą įsipareigojimą] git įsipareigoti -m "komentaras dėl įsipareigojimo" [padaryti pakeitimus vietinėje saugykloje] git push kilmės pagrindinis [perkelti visus įsipareigojimus į nuotolinę saugyklą]

Registravimas

„Python“teikia kai kurias integruotas registravimo funkcijas. Prieš pradedant tolesnį kūrimą, programinės įrangos struktūra turėtų apibrėžti visą registravimo sistemą.

Žurnalas gali būti sukonfigūruotas taip, kad terminale arba žurnalo faile registruotųsi nustatytu formatu. Mūsų pavyzdyje registratorius yra sukonfigūruotas žiniatinklio serverio klasės, tačiau mes taip pat galime tai padaryti patys. Čia mes nustatome tik registravimo lygį DEBUG:

logger = logging.getLogger (_ vardas_)

logger.setLevel (logging. DEBUG)

Matavimas ir braižymas

Norint analizuoti signalus laikui bėgant, geriausia juos pavaizduoti diagramoje. Kadangi „Raspberry Pi“turi tik konsolės terminalą, mes atsekame duomenis kabliataškiu atskirtame csv faile ir nubraižome juos iš nuotolinio kompiuterio.

Kiemabaliu atskirtas pėdsakų failas generuojamas pagal mūsų pagrindinį „python“kodą ir turi turėti tokias antraštes:

timestamp; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eYaw; cycleT

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

Pirmajame stulpelyje yra laiko žyma. Šie stulpeliai yra nemokami. Braižymo scenarijus vadinamas iškviečiamų stulpelių sąrašu:

nuotolinis@kompiuteris: ~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Siužeto scenarijų galima rasti įrankių aplanke:

Braižytuvas Python naudoja mathplotlib. Turite nukopijuoti jį į savo kompiuterį.

Kad būtų patogiau, „python“scenarijus vadinamas „bash“scenarijumi (plot.sh), kuris naudojamas kopijuoti „Raspberry Pi“pėdsakų failą į nuotolinį kompiuterį ir skambinti braižytuvui, pasirenkant signalą. Klausiamas „bash“scenarijus „plot.sh“jei reikia nukopijuoti failą. Man tai buvo patogiau, o ne kiekvieną kartą kopijuoti rankiniu būdu. „sshpass“naudojamas kopijuoti failą iš „Raspberry Pi“į nuotolinį kompiuterį per scp. Jis gali nukopijuoti failą neprašydamas slaptažodžio (jis perduodamas kaip parametras).

Galiausiai atidaromas langas su siužetu, kaip parodyta paveikslėlyje.

Nuotolinis bendravimas

„Raspberry Pi“kūrimo sąsaja yra SSH. Failai gali būti redaguoti tiesiogiai pagal tikslą arba nukopijuoti naudojant „scp“.

Norėdami valdyti robotą, „Pi“veikia žiniatinklio serveris, kuris valdo per „Websockets“. Ši sąsaja aprašyta kitame žingsnyje.

Nustatykite „Raspberry Pi“

Yra failas, apibūdinantis „Raspberry Pi“sąranką šaltinio kodo „doc“aplanke (setup_rpi.txt). Nėra daug paaiškinimų, bet daug naudingų komandų ir nuorodų.

4 žingsnis: vartotojo sąsaja

Vartotojo sąsaja
Vartotojo sąsaja

Naudodami vartotojo sąsają naudojame lengvą „Tornado“žiniatinklio serverį. Tai „Python“modulis, kurį mes vadiname paleidžiant roboto valdymo programinę įrangą.

Programinės įrangos architektūra

Vartotojo sąsaja sukurta naudojant šiuos failus: gui.html [Tinklalapio valdiklių ir išdėstymo aprašymas] gui.js [Sudėtyje yra „JavaScript“kodas, skirtas valdyti valdiklius ir atverti žiniatinklio lizdo ryšį su mūsų robotu] gui.css [Sudėtyje yra html valdikliai. Valdiklių padėtys yra apibrėžtos čia]

„Websocket“ryšys

Vartotojo sąsaja nėra pati šauniausia, tačiau ji atlieka savo darbą. Čia daugiausia dėmesio skyriau technologijoms, kurios man buvo naujos, pavyzdžiui, „Websockets“.

Svetainė bendrauja su roboto žiniatinklio serveriu per „Websockets“. Tai yra dvikryptis ryšio kanalas, kuris liks atidarytas, kai bus pradėtas ryšys. Mes siunčiame roboto komandas per „Websocket“į „Raspberry Pi“ir gauname informaciją (greitį, padėtį, kameros srautą), kad būtų rodoma.

Sąsajos išdėstymas

Vartotojo sąsajoje yra rankinis komandų įvedimas. Tai buvo naudojama pradžioje komandoms siųsti robotui. Žymimasis laukelis įjungia ir išjungia fotoaparato srautą. Du slankikliai valdo kameros pakreipimą ir pakreipimą. Viršutinė dešinė vartotojo sąsajos dalis valdo robotų judėjimą. Galite valdyti greitį ir tikslinį atstumą. Pagrindinė telemetrijos informacija rodoma roboto brėžinyje.

5 žingsnis: Roboto platformos programavimas

Roboto platformos programavimas
Roboto platformos programavimas
Roboto platformos programavimas
Roboto platformos programavimas
Roboto platformos programavimas
Roboto platformos programavimas

Ši dalis buvo pagrindinis projekto tikslas. Aš pertvarkiau daug programinės įrangos, kai pristatiau naują važiuoklę su nuolatinės srovės varikliais. Aš naudoju „Python“kaip programavimo kalbą dėl įvairių priežasčių:

  • Tai pagrindinė Raspberry Pi kalba
  • Tai aukšto lygio kalba su daugybe integruotų funkcijų ir plėtinių
  • Jis yra orientuotas į objektą, bet taip pat gali būti naudojamas nuosekliam programavimui
  • Nereikia kompiliacijos ar įrankių grandinės. Redaguokite kodą ir paleiskite.

Pagrindinė programinės įrangos architektūra

Programinė įranga yra orientuota į objektus, padalinta į kelis objektus. Mano idėja buvo padalinti kodą į 3 funkcinius blokus:

Sense Think Actuate

Sense.py

Pagrindinis jutiklių gavimas ir apdorojimas. Duomenys saugomi žodyne, kuris bus naudojamas kitam etapui.

Control.py

Įjungimo poklasis valdo variklius ir servo sistemas po tam tikros abstrakcijos. Pagrindinis valdymo objektas yra aukšto lygio komandų valdymas ir variklio valdymo algoritmai (PID).

rpibot.py

Šis pagrindinis objektas yra „Tornado“žiniatinklio serverio valdymas ir jutimo ir valdymo klasių nustatymas atskirose gijose.

Kiekvienas modulis gali būti vykdomas atskirai arba kaip viso projekto dalis. Galite tik pajusti ir išspausdinti jutiklio informaciją, kad patikrintumėte, ar jutikliai yra tinkamai prijungti ir ar pateikiama teisinga informacija.

PID valdiklis

Pirmoji užduotis yra išsiaiškinti, ką norime kontroliuoti. Pradėjau bandydamas kontroliuoti padėtį, kuri buvo labai sudėtinga ir nelabai padėjo.

Galiausiai norime kontroliuoti kiekvieną rato greitį ir roboto kryptį. Norėdami tai padaryti, turime kaskaduoti dvi valdymo logikas.

Kad žingsnis po žingsnio sudėtingumas padidėtų, robotas turėtų būti valdomas:

atvira kilpa (su nuolatine galia)

pwm = K.

tada pridėkite uždaro ciklo algoritmą

pwm = Kp.speedError+Ki. Integracija (speedError)

ir galiausiai pridėkite krypties valdymą kaip paskutinį žingsnį.

Greičio valdymui naudojau „PI“valdiklį, o „P“- tik posūkiui. Aš rankiniu būdu nustatiau parametrus eksperimentuodamas. Tikriausiai čia būtų galima naudoti daug geresnius parametrus. Mano tikslas buvo tik tiesi linija ir aš beveik ją pasiekiau. Programinėje įrangoje sukūriau sąsają, kad naudotojo sąsaja galėtų parašyti kai kuriuos kintamuosius. Nustatant parametrą Kp į 1.0 reikia šios komandos vartotojo sąsajoje:

SET; Kp; 1.0

Galėčiau nustatyti P parametrą pakankamai žemą, kad išvengčiau perkaitimo. Likusią klaidą ištaiso I parametras (integruota klaida)

Man buvo sunku sužinoti, kaip kaskaduoti abu valdiklius. Sprendimas yra paprastas, bet anksčiau išbandžiau daug kitų būdų … Taigi pagaliau pakeičiau ratų greitį, kad pasuktumėte viena ar kita kryptimi. Tiesioginis greičio reguliavimo išvesties keitimas buvo klaida, nes greičio reguliatorius bandė pašalinti šį sutrikimą.

Naudota valdymo schema pridedama. Tai rodo tik kairę roboto valdymo pusę.

6 žingsnis: jutiklių kalibravimas

Jutiklių kalibravimas
Jutiklių kalibravimas
Jutiklių kalibravimas
Jutiklių kalibravimas
Jutiklių kalibravimas
Jutiklių kalibravimas

Pirmiausia reikia atsižvelgti į tai, kad visa IMU turi tinkamai veikti. Aš užsisakiau 3 dalis ir išsiunčiau jas atgal, kol turėjau pilną veikimo jutiklį. Kiekviename ankstesniame jutiklyje kai kurios jutiklio dalys neveikė tinkamai arba visai neveikė. Prieš montuodamas jį į robotą, naudoju keletą pavyzdžių scenarijų, kad išbandyčiau pagrindus.

Prieš naudojant IMU jutiklio signalus reikia sukalibruoti. Kai kurie jutiklių signalai priklauso nuo montavimo kampo ir padėties.

Greičio ir sukimosi greičio kalibravimas

Lengviausias kalibravimas yra išilginis pagreitis (A_x). Sustojus turėtų būti apie 0 m/s². Jei tinkamai pasukate jutiklį, galite išmatuoti gravitaciją (apie 9,8 m/s²). Norėdami sukalibruoti „a_x“, turite jį tinkamai sumontuoti ir nustatyti poslinkį, kad sustojus gautumėte 0 m/s². Dabar A_x yra sukalibruotas. Jūs galite gauti sukimosi greičio kompensavimą panašiai kaip stovint.

Magnetometro kalibravimas kompasui

Magnetinio lauko jutikliams reikalingas sudėtingesnis kalibravimas. Norėdami gauti magnetinį lauką horizontaliame lygyje, naudosime m_x ir m_y. Turėdami m_x ir m_y suteiksime galimybę apskaičiuoti kompaso kryptį.

Mūsų paprastam tikslui kalibruosime tik kietojo geležies nuokrypį. Tai turi būti padaryta, nes jutiklis yra galutinėje padėtyje, nes tai priklauso nuo magnetinio lauko trikdžių.

Mes įrašome m_x ir m_y, kol sukame robotą aplink z ašį. Mes nubrėžiame m_x vs m_y XY diagramoje. Rezultatas yra elipsė, kaip parodyta paveikslėlyje. Elipsė turi būti sutelkta į kilmę. Čia mes atsižvelgiame į maksimalias ir minimalias m_x ir m_y reikšmes, kad gautume poslinkius į abi puses. Galiausiai patikriname kalibravimą ir matome, kad elipsė dabar yra centre.

Minkštosios geležies kalibravimas reikštų, kad paveikslėlį pakeičiame iš elipsės į apskritimą. Tai galima padaryti pridedant koeficientą prie kiekvienos jutiklio vertės.

Dabar galima koduoti bandymo procedūrą, kad būtų galima iš naujo kalibruoti arba bent jau patikrinti, ar jutikliai vis dar kalibruoti.

Kompaso antraštė

Magnetometro duomenys dabar bus naudojami apskaičiuojant kompaso kryptį. Norėdami tai padaryti, m_x ir m_y signalus turime paversti kampu. „Python“tiesiogiai teikia funkciją math.atan2, kuri turi šį tikslą. Visas skaičiavimas yra apibrėžtas faile mpu9250_i2c.py ("calcHeading (mx, my, mz)").

7 žingsnis: alternatyvūs dizainai

Alternatyvūs dizainai
Alternatyvūs dizainai
Alternatyvūs dizainai
Alternatyvūs dizainai
Alternatyvūs dizainai
Alternatyvūs dizainai

Projektas užtruko daug laiko, nes dizainas buvo visiškai atviras. Kiekvienam komponentui sukūriau tam tikrą prototipą ir patyriau sistemos ribas.

Sudėtingiausia tema buvo ratų kodavimo įrenginys. Prieš surasdamas šiuo metu naudojamą optinį kodavimo įrenginį, išbandžiau 3 skirtingas galimybes. Manau, kad nutraukti sprendimai taip pat yra labai įdomūs tokiame projekte. Tai susiję su tomis dalimis, kuriose aš daugiausiai išmokau.

Nuolatinio sukimosi servo, prijungto prie pca 9695

Norėdami išvengti papildomo nuolatinės srovės variklio H tilto, pirmiausia pradėjau nuo nuolatinio sukimosi servo. Juos vairavo jau esantis pca 9695 servo vairuotojas. Visa varomoji mechanika ir atitinkama elektronika buvo daug paprastesnė. Šis dizainas turėjo du trūkumus:

  • Prastas servo valdymo diapazonas.
  • Trūksta kodavimo įrenginio laikymo vietos

Servos pradeda judėti esant 50% pwm, o pilnas greitis yra apie 55%. Tai labai prastas valdymo diapazonas.

Be kodavimo įrenginio buvo labai sunku rasti paruoštą naudoti kodavimo įrenginį. Aš išbandžiau 3 skirtingus atspindžio kodavimo įrenginius, kurie buvo sumontuoti ant važiuoklės. Aš priklijavau savadarbį kodavimo ratą rato išorėje su juodai baltomis sekcijomis. Aš naudoju QTR-1RC jutiklius, kuriems reikia daug signalo apdorojimo, kad gaučiau tinkamą signalą. „Raspberry Pi“negalėjo atlikti tokio apdorojimo realiuoju laiku. Taigi nusprendžiau prie roboto pridėti realaus laiko valdiklį „NodeMCU D1 mini“. Jis buvo prijungtas prie „Raspberry Pi“serijos UART, kad būtų pateikti apdoroti jutiklių duomenys. „NodeMCU“taip pat valdė HC-SR04 jutiklį. Mechanika buvo sunki ir nelabai tvirta, serijinė linija skleidžia triukšmą iš I2C linijos ir variklių, todėl galiausiai sukūriau antrąją važiuoklės versiją su paprastais pavarų nuolatinės srovės varikliais, varomais H tiltas. Šie varikliai turi antrinį išėjimo veleną optiniam kodavimui.

8 žingsnis: vaizdo apdorojimas

Vaizdo apdorojimas
Vaizdo apdorojimas
Vaizdo apdorojimas
Vaizdo apdorojimas
Vaizdo apdorojimas
Vaizdo apdorojimas
Vaizdo apdorojimas
Vaizdo apdorojimas

Norėdami pagerinti autonominį vairavimą, galime šiek tiek apdoroti vaizdus.

„Opencv“biblioteka yra tam skirta nuoroda. Ją „Python“gali naudoti norėdamas greitai įgyvendinti kliūčių aptikimą.

Mes užfiksuojame vaizdą ir taikome kai kurias vaizdo apdorojimo užduotis:

Pirmieji bandymai buvo atlikti naudojant „Canny“ir „Sobel“transformacijas. Canny gali būti geras kandidatas, bet nėra pakankamai protingas. Sobelis yra per daug protingas (aptikta per daug objektų).

Galiausiai aš padariau savo filtrą, kad sumaišyčiau visus horizontalius ir vertikalius nuolydžius (aptiktų baldus):

  • Paverskite spalvotą vaizdą į pilkos spalvos vaizdą
  • Neryškinkite vaizdą, kad pašalintumėte nedidelį triukšmą
  • Sumažinkite vaizdą iki nespalvoto vaizdo
  • Dabar aptinkame horizontalius ir vertikalius nuolydžius, kad aptiktų objektus kaip sienas ir baldus
  • Mes filtruojame tik likusius kontūrus (spalvotus kontūrus žr. Paveikslėlyje)

Dabar mes galime naudoti šią naują informaciją kliūtims aptikti …

9 veiksmas: kiti veiksmai…

Tolesni žingsniai…
Tolesni žingsniai…
Tolesni žingsniai…
Tolesni žingsniai…

Dabar mes turime paprastą roboto platformą su jutikliais, pavaromis ir kamera. Mano tikslas yra judėti savarankiškai ir grįžti į stotį nepridedant jokių papildomų jutiklių. Tam man reikės šių veiksmų:

  • Pasukimo ir magnetinės krypties signalų sintezė
  • Vaizdo kameros apdorojimas (tam skirtas tik mažas procesorius)
  • Susidūrimo aptikimas (ultragarsinis atstumas ir kamera)
  • Žemėlapio kūrimas arba orientacija

Dabar eik ir kurk savo iššūkius ar tikslus …

Rekomenduojamas: