Përmbajtje:

Rpibot - Rreth Mësimit të Robotikës: 9 Hapa
Rpibot - Rreth Mësimit të Robotikës: 9 Hapa

Video: Rpibot - Rreth Mësimit të Robotikës: 9 Hapa

Video: Rpibot - Rreth Mësimit të Robotikës: 9 Hapa
Video: Video tutorial rreth montimit të videos përmes Premiere Pro 2024, Korrik
Anonim
Rpibot - Rreth Mësimit të Robotikës
Rpibot - Rreth Mësimit të Robotikës

Unë jam një inxhinier softuer i integruar në një kompani automobilistike gjermane. E fillova këtë projekt si një platformë mësimi për sistemet e ngulitura. Projekti u anulua herët, por më pëlqeu aq shumë saqë vazhdova në kohën time të lirë. Ky është rezultati…

Unë kisha kërkesat e mëposhtme:

  • Pajisje e thjeshtë (fokusi është softueri)
  • Pajisje të lira (rreth 100 €)
  • E zgjerueshme (disa opsione janë tashmë pjesë e përshkrimit)
  • Tensioni i furnizimit për të gjithë përbërësit nga një burim i vetëm 5V (powerbank)

Në të vërtetë nuk kishte një qëllim përveç të mësuarit. Platforma mund të përdoret për mësim, mbikëqyrje, gara robotike,…

Nuk është një mësim fillestar. Keni nevojë për disa njohuri themelore në lidhje me:

  • Programim (Python)
  • Elektronika bazë (për të lidhur modulet së bashku me tensionin e duhur)
  • Teoria themelore e kontrollit (PID)

Më në fund, me siguri do të përballeni me probleme si unë. Me pak kuriozitet dhe qëndrueshmëri, do të kaloni përmes projektit dhe do të zgjidhni sfidat. Kodi im është sa më i thjeshtë dhe linjat kritike të kodit komentohen për të dhënë sugjerime.

Kodi i plotë burimor dhe skedarët janë në dispozicion këtu:

Furnizimet:

Mekanikë

  • 1x dërrasë kompensatë (madhësia A4, 4 mm e trashë)
  • 3x M4 x 80 Vidë dhe arrë
  • 2x Motorë ingranazhesh me bosht dalës dytësor për kodifikues. Rrota.
  • 1x rrotë falas

1x montim në kamera dhe pjerrësi (opsionale)

Elektronikë

  • 1x Raspberry Pi Zero me kokë dhe kamerë
  • 1x kontroll servo PCA 9685
  • 2x rrota dhe qark kodifikues optik
  • 1x tela bluzë për femra
  • 1 x powerbank USB
  • 1x shofer me motor të dyfishtë DRV8833
  • 2x Micro servos SG90 për panën dhe pjerrësinë e kamerës (opsionale)
  • 1x MPU9250 IMU (opsionale)
  • 1x sensor tejzanor i distancës HC-SR04 (opsional)
  • 1x tabelë të shpuar dhe tela bashkimi, kokë,…

Hapi 1: Ndërtoni Shasinë

Ndërtoni Shasinë
Ndërtoni Shasinë
Ndërtoni Shasinë
Ndërtoni Shasinë
Ndërtoni Shasinë
Ndërtoni Shasinë

Unë nuk jam një projektues i mirë mekanik. Gjithashtu qëllimi i projekteve nuk është të kalosh shumë kohë në shasi. Sidoqoftë, unë përcaktova kërkesat e mëposhtme:

  • Materiale të lira
  • Montim dhe çmontim i shpejtë
  • E zgjerueshme (p.sh. hapësirë për sensorë të shtuar)
  • Materiale të lehta për të kursyer energji për pajisjet elektronike

Një shasi e lehtë dhe e lirë mund të bëhet nga kompensatë. Easyshtë e lehtë të përpunohet me një sharrë dore dhe një stërvitje dore. Ju mund të ngjitni pjesë të vogla prej druri për të krijuar mbajtëset për sensorë dhe motorë.

Mendoni për zëvendësimin e komponentëve të defektit ose korrigjimin elektrik. Pjesët kryesore duhet të fiksohen me vida për t'u zëvendësuar. Një armë ngjitëse e nxehtë mund të jetë e thjeshtë, por ndoshta jo mënyra më e mirë për të ndërtuar një shasi … Më duhej shumë kohë për të menduar për një koncept të lehtë për të çmontuar pjesët me lehtësi. Shtypja 3D është një alternativë e mirë, por mund të jetë mjaft e shtrenjtë ose kërkon kohë.

Rrota e lirë është më në fund shumë e lehtë dhe e lehtë për tu montuar. Alternativat ishin të gjitha të rënda ose plot fërkime (provova disa prej tyre para se të gjeja atë të fundit). Më duhej të prisja vetëm një ndarës druri për të rrafshuar rrotën pa bisht pas montimit të rrotave kryesore.

Karakteristikat e rrotave (për llogaritjet e softuerit)

Rrethi: 21, 5 cm Impulset: 20 impulse/rev. Rezolucioni: 1, 075 cm (më në fund 1 puls është rreth 1 cm, gjë që është e lehtë për llogaritjet e softuerit)

Hapi 2: Elektronikë dhe instalime elektrike

Elektronikë dhe instalime elektrike
Elektronikë dhe instalime elektrike
Elektronikë dhe instalime elektrike
Elektronikë dhe instalime elektrike
Elektronikë dhe instalime elektrike
Elektronikë dhe instalime elektrike

Projekti po përdor module të ndryshme siç tregohet në diagram.

Raspberry Pi Zero është kontrolluesi kryesor. Po lexon sensorët dhe kontrollon motorët me një sinjal PWM. Isshtë e lidhur me një kompjuter të largët me wifi.

DRV8833 është një urë H me motor të dyfishtë. Po siguron rrymë të mjaftueshme për motorët (gjë që Raspberry Pi nuk mund ta bëjë pasi daljet mund të japin vetëm disa mA).

Kodifikuesi optik po jep një sinjal në formë katrore sa herë që drita po kalon nëpër rrotat e koduesit. Ne do të përdorim ndërprerjet HW të Raspberry Pi për të marrë informacionin sa herë që sinjali po ndryshon.

Pca9695 është një bord kontrolli servo. Po komunikon me një autobus serial I2C. Ky bord po siguron sinjalet PWM dhe tensionin e furnizimit të cilët kontrollojnë servot për tiganin dhe pjerrësinë e kamerës.

MPU9265 është një nxitim me 3 boshte, shpejtësi rrotullimi këndore me 3 akse dhe sensor i fluksit magnetik me 3 boshte. Ne do ta përdorim atë kryesisht për të marrë titullin e busullës.

Modulet e ndryshme janë të lidhura të gjitha së bashku me tela kërcyes. Një pjatë po vepron si shpërndarës dhe siguron tensione të furnizimit (5V dhe 3.3V) dhe baza. Lidhjet përshkruhen të gjitha në tabelën e lidhjeve (shiko shtojcën). Lidhja e 5V me një hyrje 3.3V ndoshta do të shkatërrojë çipin tuaj. Kini kujdes dhe kontrolloni të gjitha instalimet tuaja elektrike dy herë para se të furnizoni (këtu veçanërisht duhet të merret parasysh kodifikuesi). Ju duhet të matni tensionet kryesore të furnizimit në tabelën e dërgimit me një multimetër para se të lidhni të gjitha bordet. Modulet u fiksuan me vida najloni në shasi. Gjithashtu këtu kam qenë i lumtur që i kam rregulluar por edhe të heqshëm në rast mosfunksionimi.

Lidhja e vetme më në fund ishin motorët, bordi i bukës dhe titujt. Për të qenë i sinqertë, më pëlqejnë telat e kërcyesit, por ato mund të çojnë në lidhje të lirshme. Në disa situata, disa monitorime softuerësh mund t'ju ndihmojnë në analizimin e lidhjeve.

Hapi 3: Infrastruktura e Softuerit

Infrastruktura e Softuerit
Infrastruktura e Softuerit
Infrastruktura e Softuerit
Infrastruktura e Softuerit

Pas arritjes së mekanikës, ne do të krijojmë një infrastrukturë softuerike për të pasur kushte të rehatshme zhvillimi.

Git

Ky është një sistem kontrolli i versionit falas dhe me burim të hapur. Përdoret për të menaxhuar projekte të mëdha si Linux, por gjithashtu mund të përdoret lehtësisht për projekte të vogla (shiko Github dhe Bitbucket).

Ndryshimet e projektit mund të gjurmohen në vend dhe gjithashtu të shtyhen në një server të largët për të ndarë softuerin me komunitetin.

Komandat kryesore të përdorura janë:

git klon https://github.com/makerobotics/RPIbot.git [Merr kodin burimor dhe konfigurimin git]

master git pull origjinës [merrni më të fundit nga depoja e largët]

statusi git [merrni statusin e depove lokale. A ka ndonjë skedar të ndryshuar?] Git log [merrni listën e komisioneve] git add. [shtoni të gjithë skedarët e ndryshuar në fazën që do të merren parasysh për kryerjen e ardhshme] git commit -m "koment për kryerjen" [kryej ndryshimet në depon lokale] git push master origjinës [shtyji të gjitha komisionet në depon e largët]

Prerje

Python po siguron disa funksione të integruara të regjistrimit. Struktura e softuerit duhet të përcaktojë tashmë të gjithë kuadrin e prerjeve para fillimit të zhvillimit të mëtejshëm.

Regjistruesi mund të konfigurohet që të regjistrohet me një format të përcaktuar në terminal ose në një skedar regjistri. Në shembullin tonë, logger është konfiguruar nga klasa e serverëve të uebit, por ne gjithashtu mund ta bëjmë atë vetë. Këtu ne vendosim vetëm nivelin e regjistrimit në DEBUG:

logger = logging.getLogger (_ emri_)

logger.setLevel (regjistrimi. DEBUG)

Matja dhe vizatimi

Për të analizuar sinjalet me kalimin e kohës, më e mira është t'i vizatoni ato në një tabelë. Meqenëse Raspberry Pi ka vetëm një terminal të tastierës, ne do t'i gjurmojmë të dhënat në një skedar csv të ndarë me pikëpresje dhe do t'i nxjerrim ato nga kompjuteri i largët.

Gjurma e ndarë me pikëpresje krijohet nga kodi ynë kryesor python dhe duhet të ketë tituj si ky:

vula kohore; 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;

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;

Kolona e parë përmban vulën kohore. Kolonat e mëposhtme janë falas. Skenari i komplotit quhet me një listë kolonash që do të vizatohen:

telekomandë@pc: ~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Skripti i komplotit është i disponueshëm në dosjen e mjeteve:

Komploti po përdor mathplotlib në Python. Duhet ta kopjoni në kompjuterin tuaj.

Për më shumë rehati, shkrimi python thirret nga një shkrim bash (plot.sh) i cili përdoret për të kopjuar skedarin e gjurmës Raspberry Pi në kompjuterin e largët dhe për të thirrur komplotuesin me një përzgjedhje sinjali. Skenari bash "plot.sh" pyet nëse skedari duhet të kopjohet. Kjo ishte më e përshtatshme për mua në vend që të kopjoja me dorë çdo herë. "sshpass" përdoret për të kopjuar skedarin nga Raspberry Pi në kompjuterin e largët përmes scp. Shtë në gjendje të kopjojë një skedar pa kërkuar fjalëkalimin (ai kalohet si parametër).

Më në fund hapet një dritare me komplotin siç tregohet në figurë.

Komunikim në distancë

Ndërfaqja e zhvillimit për Raspberry Pi është SSH. Skedarët mund të redaktohen drejtpërdrejt në shënjestër, ose të kopjohen nga scp.

Për të kontrolluar robotin, një server në internet po funksionon në Pi, duke siguruar kontroll përmes websockets. Kjo ndërfaqe përshkruhet në hapin tjetër.

Vendosni Raspberry Pi

Ekziston një skedar që përshkruan konfigurimin e Raspberry Pi në dosjen "doc" të kodit burimor (setup_rpi.txt). Nuk ka shumë shpjegime, por shumë komanda dhe lidhje të dobishme.

Hapi 4: Ndërfaqja e Përdoruesit

Ndërfaqja e Përdoruesit
Ndërfaqja e Përdoruesit

Ne përdorim serverin e lehtë të uebit Tornado për të pritur ndërfaqen e përdoruesit. Shtë një modul Python të cilin e quajmë ndërsa fillojmë programin e kontrollit të robotëve.

Arkitektura e softuerit

Ndërfaqja e përdoruesit është ndërtuar nga skedarët e mëposhtëm: gui.html [Përshkrimi i kontrolleve dhe faqosjes së faqes në internet] gui.js [Përmban kodin javascript për të trajtuar kontrollet dhe për të hapur një lidhje websocket me robotin tonë] gui.css [Përmban stilet e kontrollet html. Pozicionet e kontrolleve përcaktohen këtu]

Komunikimi në rrjet

Ndërfaqja e përdoruesit nuk është më e lezetshmja, por po bën punën. Unë u përqëndrova këtu në teknologjitë që ishin të reja për mua si Websockets.

Faqja e internetit po komunikon me serverin robot në internet nga websockets. Ky është një kanal komunikimi dydrejtimor i cili do të qëndrojë i hapur me fillimin e lidhjes. Ne i dërgojmë komandat e robotit përmes Websocket tek Raspberry Pi dhe marrim informacion (shpejtësia, pozicioni, rryma e kamerës) përsëri për t’u shfaqur.

Paraqitja e ndërfaqes

Ndërfaqja e përdoruesit ka një hyrje manuale për komandat. Kjo u përdor në fillim për të dërguar komanda te roboti. Një kuti kontrolli po ndez dhe fik çeljen e kamerës. Dy rrëshqitësit po kontrollojnë tiganin dhe pjerrësinë e kamerës. Pjesa e sipërme e djathtë e ndërfaqes së përdoruesit është kontrollimi i lëvizjes së robotëve. Ju mund të kontrolloni shpejtësinë dhe distancën e synuar. Informacioni bazë i telemetrisë shfaqet në vizatimin e robotëve.

Hapi 5: Programimi i Platformës Robot

Programimi i Platformës Robot
Programimi i Platformës Robot
Programimi i Platformës Robot
Programimi i Platformës Robot
Programimi i Platformës Robot
Programimi i Platformës Robot

Kjo pjesë ishte qëllimi kryesor i projektit. Unë rifaktorova shumë softuer ndërsa prezantova shasinë e re me motorët DC. Përdora Python si gjuhë programimi për arsye të ndryshme:

  • Shtë gjuha kryesore e Raspberry Pi
  • Languageshtë një gjuhë e nivelit të lartë me shumë veçori dhe shtesa të ndërtuara
  • Isshtë i orientuar drejt objekteve por mund të përdoret edhe për programim vijues
  • Asnjë përpilim as zinxhir mjetesh nuk është i nevojshëm. Ndryshoni kodin dhe ekzekutoni atë.

Arkitektura kryesore e softuerit

Softueri është i orientuar drejt objekteve, i ndarë në disa objekte. Ideja ime ishte ndarja e kodit në 3 blloqe funksionale:

Mendo Sense Aktivizo

Ndjesi.py

Marrja dhe përpunimi i sensorit kryesor. Të dhënat ruhen në një fjalor për t'u përdorur në fazën vijuese.

Kontrolli.py

Një nënklasë e aktivizimit po kontrollon motorët dhe servot pas një abstragimi. Objekti kryesor i Kontrollit është trajtimi i komandave të nivelit të lartë dhe gjithashtu algoritmet e kontrollit (PID) për motorin.

rpibot.py

Ky objekt kryesor është menaxhimi i serverit të uebit Tornado dhe krijimi i klasave të kuptimit dhe kontrollit në fije të veçanta.

Çdo modul mund të ekzekutohet vetëm ose si pjesë e të gjithë projektit. Ju mund të ndjeni vetëm dhe të printoni informacionin e sensorit për të kontrolluar që sensorët janë të lidhur në mënyrë korrekte dhe japin informacionin e duhur.

Kontrolli PID

Detyra e parë është të zbulojmë se çfarë duam të kontrollojmë. Fillova duke u përpjekur për të kontrolluar pozicionin, i cili ishte shumë kompleks dhe nuk ndihmoi shumë.

Së fundi, ne duam të kontrollojmë çdo shpejtësi të rrotës dhe gjithashtu drejtimin e robotit. Për ta bërë këtë, ne duhet të kaskadojmë dy logjika kontrolli.

Për të rritur kompleksitetin hap pas hapi, roboti duhet të kontrollohet:

lak i hapur (me një fuqi konstante)

pwm = K

pastaj shtoni algoritmin e qarkut të ngushtë

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

dhe në fund shtoni kontrollin e drejtimit si hapin e fundit.

Për kontrollin e shpejtësisë kam përdorur një kontroll "PI" dhe "P" vetëm për lakimin. I vendosa parametrat me dorë duke eksperimentuar. Ndoshta parametra shumë më të mirë mund të përdoren këtu. Synimi im ishte vetëm një vijë e drejtë dhe pothuajse e arrita. Kam krijuar një ndërfaqe në softuer për të shkruar disa ndryshore nga ndërfaqja e përdoruesit. Vendosja e parametrit Kp në 1.0 ka nevojë për komandën e mëposhtme në ndërfaqen e përdoruesit:

SET; Kp; 1.0

Mund ta vendosja parametrin P aq të ulët sa të shmangte çdo tejkalim. Gabimi i mbetur korrigjohet me parametrin I (gabim i integruar)

Ishte e vështirë për mua të zbuloja se si të kaskadoja të dy kontrollet. Zgjidhja është e thjeshtë, por unë provova shumë mënyra të tjera më parë… Kështu, më në fund, ndryshova objektivin e shpejtësisë së rrotave për t'u kthyer në njërin ose tjetrin drejtim. Ndryshimi i daljes së kontrollit të shpejtësisë drejtpërdrejt ishte një gabim pasi kontrolli i shpejtësisë po përpiqej të hiqte këtë shqetësim.

Diagrami i përdorur i kontrollit është i bashkangjitur. Ajo tregon vetëm anën e majtë të kontrollit të robotit.

Hapi 6: Kalibrimet e sensorit

Kalibrimet e sensorit
Kalibrimet e sensorit
Kalibrimet e sensorit
Kalibrimet e sensorit
Kalibrimet e sensorit
Kalibrimet e sensorit

Gjëja e parë që duhet marrë parasysh është se i gjithë IMU duhet të punojë siç duhet. Unë porosita 3 pjesë dhe i dërgova përsëri derisa kisha një sensor të plotë pune. Çdo sensor i mëparshëm kishte disa pjesë të sensorit që nuk funksiononin siç duhet ose aspak. Kam përdorur disa skripte shembull për të testuar bazat para se ta montoni atë në robot.

Sinjalet e sensorit IMU duhet të kalibrohen para përdorimit të tij. Disa sinjale të sensorit varen nga këndi dhe pozicioni i montimit.

Kalibrimet e shpejtësisë së nxitimit dhe rrotullimit

Kalibrimi më i lehtë është për nxitimin gjatësor (A_x). Në ndalesë duhet të ketë rreth 0 m/s². Nëse e rrotulloni sensorin siç duhet, mund të matni gravitetin (rreth 9, 8 m/s²). Për të kalibruar a_x, ju vetëm duhet ta montoni siç duhet dhe më pas të përcaktoni kompensimin për të marrë 0 m/s² në ndalesë. Tani A_x është kalibruar. Ju mund të merrni kompensimet për shpejtësitë e rrotullimit në një mënyrë të ngjashme në vendndodhje.

Kalibrimi i magnetometrit për busullën

Një kalibrim më kompleks është i nevojshëm për sensorët e fushës magnetike. Ne do të përdorim m_x dhe m_y për të marrë fushën magnetike në nivelin horizontal. Duke pasur m_x dhe m_y do të na japë mundësinë për të llogaritur një titull të busullës.

Për qëllimin tonë të thjeshtë ne do të kalibrojmë vetëm devijimin e hekurit të fortë. Kjo duhet të kryhet pasi sensori është në pozicionin përfundimtar pasi varet nga shqetësimet e fushës magnetike.

Ne regjistrojmë m_x dhe m_y ndërsa e kthejmë robotin rreth boshtit z. Ne vizatojmë m_x vs m_y në një tabelë XY. Rezultati në një elipsë siç tregohet në foto. Elipsi duhet të përqendrohet në origjinën. Këtu ne marrim parasysh vlerat maksimale dhe minimale të m_x dhe m_y për të marrë kompensimet në të dy drejtimet. Më në fund ne kontrollojmë kalibrimin dhe shohim që elipsi tani është i përqendruar.

Kalibrimi i butë i hekurit do të thotë që ne ta ndryshojmë figurën nga një elips në një rreth. Kjo mund të bëhet duke shtuar një faktor në secilën vlerë të senorit.

Një rutinë testi tani mund të kodohet për të kalibruar ose të paktën për të kontrolluar që sensorët janë ende të kalibruar.

Titulli i busullës

Të dhënat e magnetometrit tani do të përdoren për të llogaritur titullin e busullës. Për këtë, ne duhet të konvertojmë sinjalet m_x dhe m_y në një kënd. Python po siguron drejtpërdrejt funksionin math.atan2 i cili ka këtë qëllim. Llogaritja e plotë përcaktohet në skedarin mpu9250_i2c.py ("calcHeading (mx, my, mz)").

Hapi 7: Dizajne alternative

Dizajne Alternative
Dizajne Alternative
Dizajne alternative
Dizajne alternative
Dizajne alternative
Dizajne alternative

Projekti mori shumë kohë pasi dizajni ishte plotësisht i hapur. Për secilin komponent bëra një zbatim prototip dhe përjetova kufijtë e sistemit.

Tema më komplekse ishte kodifikuesi i rrotave. Kam testuar 3 opsione të ndryshme para se të gjeja koduesin optik të përdorur aktualisht. Unë mendoj se zgjidhjet e abortuara janë gjithashtu shumë interesante në një projekt të tillë. Ka të bëjë me pjesët ku kam mësuar më shumë.

Servo rrotullimi i vazhdueshëm i lidhur me pca 9695

Për të shmangur një urë shtesë H për një motor DC, fillova së pari me servos të rrotullimit të vazhdueshëm. Këto u drejtuan nga shoferi tashmë i pranishëm servo pca 9695. E gjithë mekanika shtytëse dhe elektronika korresponduese ishin shumë më të thjeshta. Ky dizajn kishte dy të meta:

  • Gama e dobët e kontrollit të servos.
  • Kodifikuesi që mungon mban vendndodhjen

Servo -të fillojnë të lëvizin me 50% pwm dhe kanë shpejtësi të plotë në rreth 55%. Ky është një gamë shumë e dobët e kontrollit.

Pa mbajtjen e një koduesi, ishte shumë e vështirë të gjesh një kodues të gatshëm për të shkuar. Unë testova 3 kodues të ndryshëm të reflektimit të cilët ishin montuar në shasi. Kam ngjitur një rrotë kodimi të bërë vetë në pjesën e jashtme të timonit me seksione bardh e zi. Kam përdorur sensorët QTR-1RC të cilët kanë nevojë për shumë përpunim të sinjalit për të marrë sinjalin e duhur. Raspberry Pi nuk ishte në gjendje të kryente atë lloj përpunimi në kohë reale. Kështu që vendosa të shtoj një NodeMCU D1 mini si një kontrollues në kohë reale në robot. Ajo u lidh me mjedrën Pi nga seriali UART për të dhënë të dhënat e përpunuara të sensorit. NodeMCU po menaxhonte edhe sensorin HC-SR04. Mekanika ishte e vështirë dhe jo shumë e fortë, linja serike po merrte zhurmë nga linja I2C dhe motorët, kështu që më në fund ndërtova versionin e dytë të shasisë me motorë DC të thjeshtë të drejtuar nga një urë H Këta motorë kanë një bosht dalës sekondar për të vendosur një kodues optik.

Hapi 8: Përpunimi i imazhit

Përpunimi i imazhit
Përpunimi i imazhit
Përpunimi i imazhit
Përpunimi i imazhit
Përpunimi i imazhit
Përpunimi i imazhit
Përpunimi i imazhit
Përpunimi i imazhit

Për të përmirësuar drejtimin autonom, ne mund të bëjmë disa përpunime të imazhit.

Biblioteka opencv është një referencë për këtë. Mund të përdoret nga Python për të zbatuar me shpejtësi zbulimin e pengesave.

Ne kapim një imazh dhe zbatojmë disa detyra të përpunimit të imazhit:

Testet e para u bënë me transformimet e Canny dhe Sobel. Canny mund të jetë një kandidat i mirë, por nuk është mjaft i arsyeshëm. Sobel është shumë i ndjeshëm (shumë objekte të zbuluara).

Më në fund bëra filtrin tim për të përzier të gjitha gradientet horizontale dhe vertikale (zbuloni mobiljet):

  • Transformoni imazhin me ngjyra në një imazh të nivelit gri
  • Mjegulloni imazhin për të hequr zhurmën e vogël
  • Pragoni imazhin në një imazh bardh e zi
  • Tani ne zbulojmë gradiente horizontale dhe vertikale për të zbuluar objektet si mure dhe mobilje
  • Ne filtrojmë vetëm konturet e mëdha të mbetura (shihni konturet me ngjyrë në figurë)

Tani mund ta përdorim këtë informacion të ri për të zbuluar pengesat…

Hapi 9: Hapat e ardhshëm…

Hapat e ardhshëm…
Hapat e ardhshëm…
Hapat e ardhshëm…
Hapat e ardhshëm…

Tani, ne kemi një platformë të thjeshtë roboti me sensorë, aktivizues dhe një aparat fotografik. Qëllimi im është të lëviz në mënyrë autonome dhe të kthehem në stacion pa shtuar sensorë të tjerë. Për këtë do të më duhen hapat e mëposhtëm:

  • Shkrirja e sensorit të sinjaleve të drejtimit dhe magnetikës
  • Përpunimi i imazhit të kamerës (vetëm CPU e ulët në dispozicion për këtë)
  • Zbulimi i përplasjes (distanca tejzanor dhe kamera)
  • Ndërtimi i hartës ose orientimi

Tani shkoni dhe krijoni sfidat ose objektivat tuaja…

Recommended: