Turinys:

„Roomba Explorer“: 4 žingsniai
„Roomba Explorer“: 4 žingsniai

Video: „Roomba Explorer“: 4 žingsniai

Video: „Roomba Explorer“: 4 žingsniai
Video: ¿Como solucionar el problema cuando la Roomba no carga? Solución en menos de 2 minutos 2023 2024, Lapkritis
Anonim
„Roomba Explorer“
„Roomba Explorer“

Naudojant MATLAB ir „iRobot“sukurtą robotą „Create2“, šis projektas ištirs įvairias nežinomos vietos sritis. Mes panaudojome roboto jutiklius, kad padėtų manevruoti pavojingoje vietovėje. Gavę nuotraukas ir vaizdo įrašus iš pridėto „Raspberry Pi“, mes sugebėjome nustatyti kliūtis, su kuriomis susidurs robotas, ir jos bus įslaptintos.

Dalys ir medžiagos

Šiam projektui jums reikės

-kompiuteris

-naujausia MATLAB versija (šiam projektui buvo naudojama MATLAB R2018b)

- „roombaInstall“įrankių rinkinys

„iRobot“sukurtas robotas „Create2“

-„Raspberry Pi“su fotoaparatu

1 žingsnis: inicijavimas ir jutikliai

Inicializavimas ir jutikliai
Inicializavimas ir jutikliai

Prieš pradėdami bet kokį programavimą, atsisiuntėme „roombaInstall“įrankių rinkinį, kuris leido pasiekti įvairius roboto komponentus.

Iš pradžių mes sukūrėme GUI, kad inicijuotume bet kurį robotą. Norėdami tai padaryti, įveskite roboto numerį. Tai suteiks prieigą paleisti mūsų programą robotui. Mes dirbome, kad robotas laviruotų daugelyje vietovių, su kuriomis jis susidurs. Mes įdiegėme uolų jutiklius, šviesos smūgio jutiklius ir fizinio smūgio jutiklius, naudodami jų išvestis, kad išjungtume robotą ir pakeistume jo greitį ir (arba) kryptį. Kai kuris iš šešių šviesos smūgių jutiklių aptinka objektą, jų išvesties vertė sumažės, todėl roboto greitis sumažės, kad būtų išvengta susidūrimo visu greičiu. Kai robotas pagaliau susidurs su kliūtimi, „Physical Bump“jutikliai praneš didesnę vertę nei nulis; dėl to robotas sustos, todėl nebus jokių kitų susidūrimų ir bus galima panaudoti daugiau funkcijų. „Cliff Senssors“jie skaitys aplinkui esančios srities ryškumą. Jei vertė didesnė nei 2800, mes nustatėme, kad robotas bus stabilioje vietoje ir saugus. Tačiau, jei vertė yra mažesnė nei 800, uolos jutikliai aptiks skardį ir nedelsdami sustos, kad nenukristų. Bet kokia tarpinė vertė buvo nustatyta kaip vanduo ir privers robotą sustabdyti savo veiksmus. Naudojant aukščiau pateiktus jutiklius, keičiamas roboto greitis, leidžiantis geriau nustatyti, ar yra pavojus.

Žemiau yra kodas (iš MATLAB R2018b)

%% Inicializavimas

dlgPrompts = {'Roomba Number'};

dlgTitle = 'Pasirinkite savo kambarį';

dlgDefaults = {''};

opts. Resize = 'įjungtas';

dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Sukurti langą, raginantį vartotoją įvesti savo „roomba“numerį

n = str2double (dlgout {1});

r = roomba (n); % Inicijuoja vartotojo nurodytą „Roomba“%% Greičio nustatymas pagal „Light Bump Sensors“, o tiesa s = r.getLightBumpers; % gauna šviesos smūgio jutiklius

lbumpout_1 = ištraukimo laukas (-ai, kairė); % paima jutiklių skaitines vertes ir padaro jas patogesnes naudoti lbumpout_2 = extractfield (s, 'leftFront');

lbumpout_3 = ištraukimo laukas (-ai, 'leftCenter');

lbumpout_4 = ištraukimo laukas (-ai, 'rightCenter');

lbumpout_5 = ištraukimo laukas (-ai, 'rightFront');

lbumpout_6 = ištraukimo laukas (-ai, 'dešinė');

lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % konvertuoja reikšmes į matricą

sLbump = rūšiuoti (lbout); Galima išgauti %matricą iki mažiausios vertės

lowLbump = sLbump (1); greitis =.05+(lowLbump)*. 005 %naudojant mažiausią reikšmę, kuri reiškia artimas kliūtis, norint nustatyti greitį, didesnį greitį, kai nieko neaptinkama

r.setDriveVelocity (greitis, greitis)

galas

Fiziniai buferiai

b = r.getBamperiai; %Išvestis teisinga, klaidinga

bsen_1 = ištraukimo laukas (b, „kairė“)

bsen_2 = ištraukimo laukas (b, „dešinė“)

bsen_3 = ištraukimo laukas (b, „priekis“)

bsen_4 = ištraukimo laukas (b, 'leftWheelDrop')

bsen_5 = ištraukimo laukas (b, 'rightWheelDrop')

smūgiai = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = suma (bums)

jei tbump> 0 r.setDriveVelocity (0, 0)

galas

% Uolų jutikliai

c = r.getCliffSensors %% 2800 saugus, kitaip vanduo

csen_1 = ištraukimo laukas (c, „kairė“)

csen_2 = ekstrakto laukas (c, 'dešinė')

csen_3 = ištraukimo laukas (c, 'leftFront')

csen_4 = ekstrakto laukas (c, 'rightFront')

uolos = [csen_1, csen_2, csen_3, csen_4]

ordcliff = rūšiuoti (uolos)

jei ordcliff (1) <2750

r.setDriveVelocity (0, 0)

jei skardis <800

disp 'skardis'

Kitas

išpilti „vandenį“

galas

r. „TurnAngle“(45)

galas

2 žingsnis: Duomenų gavimas

Po fizinių smūgių jutiklių suveikimo robotas įdiegs „Raspberry Pi“, kad nufotografuotų kliūtį. Nufotografavęs, naudodamas teksto atpažinimą, jei paveikslėlyje yra teksto, robotas nustatys, kas yra kliūtis ir ką sako kliūtis.

img = r.getImage; parodyti (img);

imwrite (img, 'imgfromcamera.jpg')

nuotrauka = imread ('imgfromcamera.jpg')

ocrResults = ocr (nuotrauka)

atpažintasTekstas = ocrResults. Text;

figūra;

„imshow“(nuotraukos) tekstas (220, 0, atpažintas tekstas, „BackgroundColor“, [1 1 1]);

3 žingsnis: Užbaikite misiją

Kai robotas nustato, kad kliūtis yra NAMAI, jis atliks savo misiją ir liks namuose. Baigęs misiją, robotas atsiųs el. Paštu įspėjimą, kad grįžo namo, ir atsiųs savo kelionės metu nufotografuotus vaizdus.

% Siunčiami el

setpref ('Internetas', 'SMTP_Server', 'smtp.gmail.com');

setpref („Internetas“, „El. paštas“, „[email protected]“); % pašto paskyra, kurią reikia siųsti iš setpref ('Internetas', 'SMTP_Username', 'enter sender email'); % siuntėjų vartotojo vardas setpref ('Internetas', 'SMTP_Password', 'įveskite siuntėjo slaptažodį'); % Siuntėjų slaptažodis

rekvizitai = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('Įveskite gaunamą el. laišką', 'Roomba', 'Roomba grįžo namo !!', 'imgfromcamera.jpg') % pašto paskyra, kurią reikia siųsti

Tada robotas baigtas.

4 žingsnis: Išvada

Išvada
Išvada

Įtraukta MATLAB programa yra atskirta nuo viso scenarijaus, kuris buvo naudojamas su robotu. Paskutiniame juodraštyje būtinai įveskite visą kodą, išskyrus inicializavimo veiksmą, į laiko ciklą, kad įsitikintumėte, jog buferiai veikia nuolat. Ši programa gali būti redaguojama pagal vartotojo poreikius. Rodoma mūsų roboto konfigūracija.

*Priminimas: nepamirškite, kad „roombaInstall“įrankių rinkinys reikalingas tam, kad MATLAB galėtų sąveikauti su robotu ir „Raspberry Pi“.

Rekomenduojamas: