Kazalo:
- 1. korak: Nastavitev strojne opreme
- 2. korak: Poiščite vse te senzorje
- 3. korak: Preizkus nastavitve parametrov
- 4. korak: Zagon kode
- 5. korak: Vrh zanke While: Fizični senzorji udarcev
- 6. korak: Po poti
- 7. korak: Obdelava slik
- 8. korak: Končni izdelek
Video: Robotehnik: 8 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:06
Za trenutek si predstavljajte, da ste eden izmed astronavtov, ki pristanejo na Marsu. Pred vami je milijon stvari, vzorci, poskusi za izvajanje, zbiranje podatkov, vendar morate enkrat ali dvakrat na dan teči po stanovanjskih in/ali raziskovalnih modulih, v katerih živite in delate, da jih pregledate. Nujno je, da mora nekdo zagotoviti, da je stvar v dobrem stanju, da vsi tisoči kosov in delov delujejo in so na svojem mestu. Kaj pa, če bi obstajal avtomatiziran pomočnik, ki bi vas razrešil nekaterih od teh nalog. Kaj pa, če bi bil znotraj modulov majhen robot, da bi se prepričal, da je vse na svojem mestu, delujoče in varno.
Robo-tehnik na pomoč.
Ta koda v bistvu nadzoruje Robotehnika, saj sledi svetlo obarvani poti na tleh. Sledil bo tej poti, dokler ne najde križišča na poti ali ovinka, ki bo zahteval fotografiranje za obdelavo slik, da se bo Robotehnik odločil, kam naprej. Senzorji lahkih udarcev in udarcev ščitijo Robotehnika pred poškodbami, senzorji udarcev pa nadzorujejo, kdaj bo posneta diagnostična fotografija. Robo-tehnik je skupaj oblikovan tako, da približuje pomorske module, pri čemer astronavtom sprošča čas med opravljanjem osnovne naloge inšpekcijskega pregleda, pri čemer zahteva le človeški vnos, ko ugotovi, da je kaj narobe.
Še enkrat v opozorilo, to je delo v teku. Koda, kot obstaja, deluje, vendar ima težave, še posebej, ker je vpletenih več programov, ki se prekrivajo. Tudi, da bi ta projekt deloval v dejanski misiji na Marsu, bi bilo treba za ta poseben namen zgraditi robota, zato spet mislim, da je to "dokaz koncepta".
Nekaj stvari boste potrebovali, da to zaženete. Potrebovali boste drag program, podporne pakete za ta program in malo ozadja pri kodiranju. Ker sem študent in je bila podana nekatera koda v pritličju (za malinovo pi), ne bom posebej govoril o postavitvi. Spodaj najdete vse povezave do te osnovne kode. Pojdimo na seznam materialov.
Strojna oprema
- Raspberry Pi (uporabili smo različico 3)
- iRobot ®
- nekakšno držalno napravo, s katero je Raspberry Pi pritrjen na robotehnika
- Kamera Raspberry Pi (ne glede na to, kakšna je, če ima dobro samodejno ostrenje in ločljivost slike)
- nekakšno stojalo ali ohišje, s katerim bo fotoaparat obrnjen naprej na Robo-tehniku
- material za uporabo kot trak, bel (ali zelo svetle barve), ki je varno pritrjen na tla. Biti mora le nekoliko širši od prostora med sprednjima dvema senzorjema pečine.
- 4 znaki z zelo velikim besedilom (z natisnjenimi besedami IMAGE, RIGHT, BACK in LEFT)
- Listi barvnega papirja (vsaj trije in po možnosti rdeči, zeleni in modri)
Programska oprema
- Matlab (2018a in 2017b sta bila uporabljena in zdi se, da ne vplivata)
- Podporni paket Raspberry Pi za Matlab
- Koda Raspberry Pi za povezavo z Matlabom (povezava do spodaj navedene izvorne kode)
- Orodjarna za obdelavo slik za Matlab (tega projekta skoraj ne morete narediti brez orodjarne)
- NEOBVEZNO: Matlab Mobile je nameščen na vašem telefonu, kar bom razložil kasneje
1. korak: Nastavitev strojne opreme
ef.engr.utk.edu/ef230-2018-08/projects/roo…
To je povezava do osnovne kode, ki zagotavlja, da lahko iRobot® komunicira z Matlabom, skupaj z osnovno vadnico. Kot sem že rekel, tega posebnega dela ne bom obravnaval, saj je vadnica že zelo dobro zastavljena. Omenil bom, da lahko po tem, ko sledite korakom na povezavi, uporabite Matlabov ukaz "doc" za pregledovanje vključenih informacij. Natančneje:
doc roomba
In še ena zelo pomembna točka.
Ko prenesete datoteke s zgornje povezave, jih postavite v mapo, ki sem jo opisal zgoraj, saj Matlab od uporabnikov zahteva, da so datoteke v trenutni delovni mapi.
S tem se izognimo, pojdimo na kodo.
2. korak: Poiščite vse te senzorje
Vzemite si trenutek in pregledajte iRobot®. Dobro je vedeti, kje so, da boste imeli predstavo o vložkih, ki jih Robo-tehnik prejema, in lahko boste ugotovili, zakaj se stvar vrti v krogih, namesto da bi sledili poti, ki jo nastavite (to bi lahko ali pa se morda ne bi zgodilo). Očitno boste videli velik fizični senzor udarcev na sprednji strani. Senzorje pečine je nekoliko težje videti, zato ga morate obrniti in poiskati štiri prozorna plastična okna blizu sprednjega roba. Senzorji svetlobnih udarcev so še bolj skriti, zaenkrat pa bo dovolj, da v živo v sijočem črnem pasu pobegnemo po sprednji strani iRobot®, ki je na sprednji strani fizičnega senzorja.
Obstajajo senzorji padca koles, ki pa v tem projektu niso uporabljeni, zato bomo prešli na testiranje senzorjev.
3. korak: Preizkus nastavitve parametrov
Preden lahko pošljemo Robotehnika, da opravi svoje delo, moramo ugotoviti njegove posebne posebnosti in območja senzorjev. Ker je vsak iRobot® nekoliko drugačen in se spreminja skozi življenjsko dobo robota, moramo ugotoviti, kako senzorji berejo območja, na katerih bo deloval. Najlažji način za to je, da nastavite svetlo obarvano pot (Uporabil sem trakove belega papirja za tiskalnik, toda vse, kar je svetlo obarvano, bo delovalo na površini, na kateri bo deloval Robo-tehnik.
Zaženite Matlab in odprite nov skript. Skript shranite v isto mapo, ki sem jo opisal prej, in jo poimenujte, kakor želite (poskusite biti kratki, ker bo ime te datoteke ime funkcije). Vklopite robota in uporabite nastavitev spremenljivke roomba iz vadnice ter vnesite ukaze v ukazno okno.
Prepričajte se, da je Raspberry Pi priključen na iRobot® in da je računalnik povezan z isto internetno povezavo. Porabili boste manj časa, da bi odkrili, zakaj se Matlab ne poveže
r = roomba (številka, ki ste jo nastavili)
Spremenljivka "r" v tem primeru ni potrebna, lahko jo pokličete, kot želite, vendar olajša uporabo enočrkovne spremenljivke.
Ko je pot nastavljena in je roomba uspešno povezana, postavite bodočega Robotehnika tam, kjer sta eden ali dva senzorja pečine na vrhu poti. Očitno to pomeni, da sta preostala dva ali tri na vrhu izbrane površine.
Zdaj zaženite preskusne senzorje z ukazom:
r.testSensors
Upoštevajte, da je "r." Spremenljivka, ki ste jo definirali prej, zato, če ni "r", spremenite "r." na karkoli ste se odločili. To bo prikazalo zaslon testnega senzorja s tono informacij.
Pri tem projektu se osredotočite na odseke lightBumper, odbijače in pečine. Premikajte Robo-tehnika naokoli in pazite, kako se senzorji spreminjajo na različnih površinah ali kako blizu mora biti predmet, da se spremenijo vrednosti ligthBumper itd. Upoštevajte te številke (ali jih zapišite), ker boste potrebujete jih, da v sekundi nastavite parametre.
4. korak: Zagon kode
Najprej boste zgradili funkcijo. Poimenoval sem jo "pot", vendar spet ime ni potrebno, vendar bom od zdaj naprej to imenoval "pot".
Zgornji del kode nastavlja nekatere možnosti vnosa uporabnika. Ustvari nekaj seznamov, ki bodo uporabljeni v inlistdlg, nato pa prikaže pogovorno okno s seznamom. To uporabniku omogoča, da izbere, katero barvo poti želi slediti, kar pride v poštev kasneje.
list = {'Rdeča', 'Modra', 'Zelena'}
problist = {'Naključje, Shrani sliko', 'Komponenta ni na mestu, Shrani sliko', 'Pričakovano, Nadaljuj'} pathcolor = listdlg ('PromptString', 'Izberite barvo poti', … 'SelectionMode', 'single', 'ListString', list) prob = 0; driv = ;
Spremenljivki "prob" in "driv" je treba tukaj prijaviti, saj se bosta uporabljali znotraj glavne zanke while funkcije, vendar spet, če želite preimenovati katero koli od teh spremenljivk ali spremeniti izbire seznama, je v redu, dokler v preostalem delu kode ste dosledni.
5. korak: Vrh zanke While: Fizični senzorji udarcev
Na vrhu zanke while je logika fizičnega senzorja udarcev. V bistvu, ko Robo-tehnik naleti na nekaj, kar se ustavi (ali za senzor sprednjega udarca naredi varnostno kopijo 0,1 metra), se nato postavi za fotografiranje. Najprej pokrijemo del za nadzor hitrosti in položaja.
Če ste v prejšnjih korakih preizkusili vse senzorje na Robo-Technicianu, boste vedeli, da imajo senzorji udarcev logično vrednost (0 ali 1) z ničlo, ki predstavlja normalen, ne pritisnjen položaj senzorja. Imejte to v mislih za kodo.
medtem ko true %main medtem ko zanka %prejme informacije o odbijaču S = r.getBumpers if S.left ~ = 0 r.stop elseif S. right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end
To je osnovni del "če nekaj udari, ustavi". Če senzorji zaznajo trk, se premaknejo na naslednji del kode, ki ponovno prilagodi položaj robotehnike, da dobi fotografijo.
če je S.left ~ = 0 %, če zanka vzame podatke o odbijaču in poravna kamero za fotografijo r.turnAngle (5) premor (0,5) img = r.getImage %posname fotografijo in prikaže sliko (img) %pogovorno okno prob = listdlg (' PromptString ',' Najdena je nepričakovana ovira, prosimo, identificirajte '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Najdena je nepričakovana ovira, prosimo, identificirajte'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0,1) premor (0,5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Najdena je nepričakovana ovira, prosimo, prepoznajte'…, 'SelectionMode', 'single', 'ListString', problist) konec
V bistvu, ko je slika posneta, se prikaže drugo pogovorno okno s tremi možnostmi. Prvi dve možnosti shranita fotografijo v določeno mapo, ki jo bom kasneje obravnaval, tretja pa preprosto zapre pogovorno okno in nadaljuje skozi zanko. Če se ne spomnite možnosti, si oglejte prejšnji korak.
Zdaj sem med del senzorja udarcev in del za shranjevanje fotografij vstavil kodni odsek. To vzame vrednosti lightBumper in nastavi hitrost vožnje na 0,025 metra/sekundo (zelo počasno), kar dejansko ni potrebno, vendar zmanjša robota, ki trči v stvari in sčasoma obrabi senzorje fizičnega udarca.
L = r.getLightBumpers, če je L.levo> 100 || L.levo spredaj> 100 || L. desno spredaj> 100 || L. desno> 100 driv = 0,025 r.setDriveVelocity (0,025) else driv = 0,1 konec
To bi bil del, kjer so se uveljavile vrednote, ki ste jih prej opazili (in upajmo, da ste jih zapisali)
"L. (stran in smer senzorja)> 100" je temeljilo na vrednostih, ki sem jih opazil, zato, če so vaša opažanja drugačna, spremenite te številke. Ideja je, da če bo Robotehnik nekaj centimetrov pred seboj začutil, se bo to upočasnilo, nič več kot to ni potrebno.
Naslednji del je, kjer se fotografije shranijo za pozneje.
%, če je bila v pogovornem oknu prob izbrana prva ali druga možnost, shrani sliko, če je verjetnost == 1 %, če zanka gradi podatke o datoteki za fotografijo, piše s časovnim žigom t = ura; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; polno ime datoteke = polna datoteka (mapa, ime baze); imwrite (img, fullFileName) close Slika 1 premor (2) elseif prob == 2 t = ura; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; polno ime datoteke = polna datoteka (mapa, ime baze); imwrite (img, fullFileName) zaprite Slika 1 premor (2) konec
Vsa imena datotek in lokacije, kjer so fotografije shranjene, so neobvezna. Izbral sem mapo, ki je ugnezdena v mapi roomba, ki sem jo ustvaril v uvodnem koraku, vendar je lahko kjer koli izberete. Tudi fotografije so shranjene s časovnim žigom, vendar to ni posebej potrebno (čeprav bi bilo hipotetično koristno za misijo na Mars).
S pokritimi fizičnimi senzorji udarcev se lahko premaknemo na senzorje pečine in sledimo poti.
6. korak: Po poti
Koda za senzorje pečine je nastavljena za primerjavo vrednosti dveh vrednosti sprednjega in dveh stranskih senzorjev. Te vrednosti (verjetno) boste morali spremeniti glede na opazovane vrednosti. Te vrednosti boste verjetno morali urediti tudi po nekaj preskusih in jih spremeniti glede na svetlobo okolice, čas dneva (odvisno od tega, kako dobro je osvetljeno preskusno območje) ali ko so okna senzorja umazana.
Preden pridemo do kode senzorja pečine, pa sem vstavil kratek segment kode, ki izbriše nekaj nepotrebnih podatkov iz Matlaba. Ta del ni potreben, vendar sem ga uporabil za zmanjšanje prostora za shranjevanje, potrebnega za zagon programa.
clear img clear t clear basename clear fullFileName počisti mapo
Naslednji kodni segment je meso projekta. Robo-tehniku omogoča sledenje svetlo obarvani poti, ki je bila postavljena na tla. Na kratko, poskuša se usmeriti tako, da sta sprednja dva senzorja pečine glede na vaše opazovane vrednosti nad pragom, in programu omogoči, da začne postopke obdelave slike malo kasneje.
C = r.getCliffSensors %if zanka sledi barvnemu pasu (belo), če C.leftFront> 2000 && C.rightFront> 2000 %vodenje po naravni poti r.setDriveVelocity (driv) elseif C.leftFront 2000 %zavije desno, če gre robot predaleč levo r.turnAngle (-2,5) elseif C.leftFront> 2000 && C.rightFront <2000%zavije levo, če gre robot predaleč desno r.turnAngle (2.5) elseif C.leftFront <2000 && C.rightFront 100 || L.levo spredaj> 100 || L. desno spredaj> 100 || L. desno> 100 img = r.getImage end %preveri, ali je na poti ovinek, če je C.levo> 2800 && C. desno <2800 vrt. 2.5) konec %imetnik mesta za pot prepoznavanja slike poti ('GETTING IMAGE') konec end end
Upoštevajte, da so imena spremenljivk, ki sem jih izbrala, neobvezna, vendar mislim, da olajša uporabo spremenljivk z eno črko, kadar je to mogoče
Za razlago srednjega dela kode, ko dva sprednja senzorja odtečeta od roba poti (ko pride do križišča ali ko pride do konca poti), se pogleda, če je pred njim nekaj. Da bo to delovalo, morate postaviti predmet na tla na koncu poti ali na katerem koli križišču.
Ko je fotografija posneta, se s prepoznavanjem slike ugotovi, kaj storiti. V tem razdelku kode je tudi imetnik mesta:
%imetnik mesta za prepoznavanje slike poti disp ('GETTING IMAGE')
Zaenkrat sem to uporabil, ker sem se želel posebej pogovarjati o besedilu in barvni obdelavi, ki je v naslednjem koraku.
7. korak: Obdelava slik
Obdelava slik je sestavljena iz dveh delov. Prvi je prepoznavanje barv, ki izračuna intenzivnost barve na sliki, da se odloči, ali bo nadaljeval s prepoznavanjem besedila ali ne. Izračuni barv temeljijo na izbiri, ki je bila izbrana v prvem pogovornem oknu na začetku (uporabil sem rdečo, modro, zeleno, vendar lahko izberete vse barve, ki jih želite, če le lahko prepoznate povprečne vrednosti intenzivnosti barve). Kamera Raspberry Pi).
img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) rdeča = povprečna (srednja (imgb (:,:, 1))); g = povprečje (povprečje (imgb (:,:, 2))); b = povprečje (povprečje (imgb (:,:, 3)));
To je preverjanje intenzivnosti. To bo uporabljeno v naslednjem segmentu za odločitev, kaj želi narediti.
če je rdeča> g && rdeča> b, če je barvna pot == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img), če R. Besede {1} == IMAGE || R. Besede {2} == SLIKA || R. Besede {3} == SLIKA t = ura; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; polno ime datoteke = polna datoteka (mapa, ime baze); imwrite (img, fullFileName) premor (2) elseif R. Besede {1} == DESNO || R. Besede {2} == DESNO || R. Besede {3} == DESNO r.turnAngle (-75) drugače, če R. Besede {1} == LEVO || R. Besede {2} == LEVO || R. Besede {3} == LEVO r.turnAngle (75) drugače, če R. Besede {1} == NAZAJ || R. Besede {2} == NAZAJ || R. Besede {3} == BACK r.turnAngle (110) end else r.turnAngle (110) end end
Ta segment odloča, ali se barva, izbrana v prvem pogovornem oknu, ujema z barvo, ki jo vidi kamera. Če se to zgodi, zažene prepoznavanje besedila. Ogleda se, katera beseda (SLIKA, NAZAJ, DESNO ali LEVO) se prikaže, nato pa se obrne (za desno in levo), se vrti (za hrbet) ali posname sliko in jo shrani na enak način kot prej.
Za različne barve sem navedel samo en del kode
Če želite, da koda prepozna modro in zeleno, preprosto kopirajte kodo in spremenite logično preverjanje na vrhu segmenta ter nastavite "pathcolor == (number)" tako, da ustreza izbiri barv v zgornjem pogovornem oknu (za kodo, kot je prikazana, bo modra 2 in zelena 3).
8. korak: Končni izdelek
Zdaj bi moral Robo-tehnik približati module misije Mars in poročati astronavtom, ko kaj ni na mestu.
Ne pozabite, da je treba vse vrednosti senzorja pečine in svetlobnega odbijača spremeniti na vaše opazovane vrednosti. Tudi iz izkušenj se mi je zdelo bolje preizkusiti ta projekt na temno obarvanih tleh in še bolje je, če ta tla ne odsevajo. Tako se poveča kontrast med potjo in tlemi, zaradi česar je bolj verjetno, da jo bo Robotehnik pravilno upošteval.
Upam, da ste uživali v postavitvi malega pomočnika za misijo Mars in se zabavali pri gradnji.
Priporočena:
Števec korakov - mikro: Bit: 12 korakov (s slikami)
Števec korakov - Micro: Bit: Ta projekt bo števec korakov. Za merjenje korakov bomo uporabili senzor pospeška, ki je vgrajen v Micro: Bit. Vsakič, ko se Micro: Bit trese, bomo štetju dodali 2 in ga prikazali na zaslonu
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): 8 korakov
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): ultrazvočni pretvorniki zvoka L298N Dc ženski adapter z napajalnim vtičem za enosmerni tok Arduino UNOBreadboard Kako to deluje: Najprej naložite kodo v Arduino Uno (to je mikrokrmilnik, opremljen z digitalnim in analogna vrata za pretvorbo kode (C ++)
Vijak - Nočna ura za brezžično polnjenje DIY (6 korakov): 6 korakov (s slikami)
Bolt - Nočna ura za brezžično polnjenje DIY (6 korakov): Induktivno polnjenje (znano tudi kot brezžično polnjenje ali brezžično polnjenje) je vrsta brezžičnega prenosa energije. Za zagotavljanje električne energije prenosnim napravam uporablja elektromagnetno indukcijo. Najpogostejša aplikacija je brezžično polnjenje Qi
Merilnik korakov 1. del: Enobarvni zaslon 128x32 in Arduino: 5 korakov
Pedometer 1. del: Enobarvni zaslon 128x32 in Arduino: To je osnovna vadnica, ki uči, kako uporabljati zaslon OLED s svojim Arduinom. Uporabljam zaslon velikosti 128x32, lahko pa uporabite tudi drugačen zaslon z ločljivostjo in po potrebi spremenite ločljivost/koordinate. V tem delu vam bom pokazal, kako
Preklopna obremenitvena banka z manjšo velikostjo korakov: 5 korakov
Preklopna banka odpornikov obremenitve z manjšo velikostjo korakov: Banke uporovnih obremenitev so potrebne za preskušanje energetskih proizvodov, za karakterizacijo sončnih kolektorjev, v preskusnih laboratorijih in v industriji. Reostati zagotavljajo stalno spreminjanje odpornosti na obremenitev. Ker pa se vrednost upora zmanjša, moč