Sadržaj:

MATLAB kontrolirana Roomba: 5 koraka
MATLAB kontrolirana Roomba: 5 koraka

Video: MATLAB kontrolirana Roomba: 5 koraka

Video: MATLAB kontrolirana Roomba: 5 koraka
Video: Серия видео IJARS: Интервью профессора Питера Корка, июнь (2014 г.) 2024, Novembar
Anonim
MATLAB kontrolirana Roomba
MATLAB kontrolirana Roomba
MATLAB kontrolirana Roomba
MATLAB kontrolirana Roomba

Cilj ovog projekta je korištenje MATLAB -a, kao i modificiranog iRobot programabilnog robota. Naša grupa je kombinirala naše vještine kodiranja kako bi stvorila MATLAB skriptu koja koristi mnoge funkcije iRobota, uključujući senzore litice, senzore odbojnika, svjetlosne senzore i kameru. Očitavanja senzora i kamere koristili smo kao ulaze, omogućavajući nam stvaranje određenih izlaza koje želimo pomoću funkcija i petlji MATLAB koda. Također koristimo MATLAB mobilni uređaj i žiroskop kao način povezivanja s iRobotom i njegove kontrole.

Korak 1: Dijelovi i materijali

Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali
Dijelovi i materijali

MATLAB 2018a

-Verzija MATLAB -a za 2018. je najpoželjnija verzija, uglavnom zato što najbolje funkcionira s kodom koji se povezuje s mobilnim uređajem. Međutim, većina našeg koda može se tumačiti u većini verzija MATLAB -a.

iRobot Create Device

-Ovaj uređaj je posebno napravljen uređaj čija je jedina namjena programiranje i kodiranje. (To nije stvarni vakuum)

Raspberry Pi (sa kamerom)

- Ovo je skupo računalo koje radi kao mozak iRobota. Možda je mali, ali je sposoban za mnoge stvari. Kamera je dodatni dodatak. Također koristi raspberry pi za dobivanje svih svojih funkcija i naredbi. Gore prikazana kamera je postavljena na 3D štampano postolje, koje su izradili odjeli Engineering Fundamentals na Univerzitetu u Tennesseeju

Korak 2: Datoteka baze podataka Roomba

Roomba datoteka baze podataka
Roomba datoteka baze podataka

Postoji glavna datoteka koja će vam trebati za korištenje odgovarajućih funkcija i naredbi za vašu roombu. Ova datoteka je mjesto odakle ste napisali kôd koji crpi funkcije kako bi upravljanje roombom bilo lakše upravljati.

Datoteku možete preuzeti na ovoj vezi ili ispod možete preuzeti datoteku

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Korak 3: Povezivanje s Roombom

Prvo morate provjeriti je li vaš robot spojen na vašu malinu pi ploču pomoću mikro USB priključka. Zatim morate pravilno povezati računalo i robota na istu WiFi mrežu. Nakon što to učinite, možete uključiti robota i povezati se s njim pomoću zadane naredbe u datoteci baze podataka robota. (Uvijek tvrdo resetirajte robota prije i nakon upotrebe). Na primjer, koristimo naredbu "r.roomba (19)" za povezivanje s našim robotom, dodjeljujući varijablu r našem uređaju. Ovo se odnosi na datoteku baze podataka, koja postavlja našu varijablu kao strukturu na koju se možemo pozvati u bilo kojem trenutku.

Korak 4: Kôd

Kodeks
Kodeks
Kodeks
Kodeks

U nastavku smo priložili cijeli kôd, ali ovdje je kratak pregled koji ističe važne elemente u našem scenariju. Koristili smo sve senzore, kao i kameru kako bismo maksimalno iskoristili potencijal našeg robota. Uključili smo i kôd koji nam je omogućio povezivanje mobilnog uređaja s našim robotom i korištenje njegovog grioskopa za ručno upravljanje.

Počeli smo s jednostavnom naredbom "r.setDriveVelocity (.06)" koja postavlja naprednu brzinu robota na 0,06 m/s. Ovo je samo da bi se robot prethodno pokrenuo

Zatim se naša glavna skripta pokreće s while petljom koja dohvaća podatke datog robota stvaranjem struktura koje možemo referencirati i koristiti u dolje navedenim uvjetnim izrazima, omogućavajući nam tako da kažemo robotu da izvrši određenu naredbu na temelju podataka o strukturi robot čita sa svojim senzorima. Postavili smo ga tako da robot čita senzore sa litice i slijedi crnu putanju

dok true % while petlja ide sve dok se ne pojavi nešto "false" (u ovom slučaju se nastavlja beskonačno) data = r.getCliffSensors; data2 = r.getBumpers; % kontinuirano preuzima podatke o vrijednostima senzora litice i dodjeljuje ih varijabli % img = r.getImage; % Snima sliku sa montirane kamere % image (img); % Prikazuje snimljenu sliku % red_mean = mean (mean (img (:,:, 1))); % Uzima prosječnu vrijednost za zelenu boju ako je data.rightFront <2000 r.turnAngle (-2); % okreće Roombu za približno 2 stepena CW nakon što vrijednost za desne prednje senzore litice padne ispod 2000 r.setDriveVelocity (, 05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % govori Roombi da nastavi ići naprijed na približno 0,2 m/s ako obje vrijednosti s desnog prednjeg i lijevog prednjeg senzora padnu ispod 2000 % r.turnAngle (0); % govori Roombi da se ne okreće ako su gore navedeni uvjeti ispunjeni

elseif data2.right == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05); elseif data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05);

Nakon ove while petlje ulazimo u drugu while petlju koja pokreće podatke dobivene kamerom. I koristimo if naredbu unutar ove while petlje koja prepoznaje sliku pomoću određenog programa (alexnet), a nakon što identificira sliku, odmah pokreće daljinski upravljač mobilnog uređaja

anet = alexnet; % Dodjeljuje alexnet duboko učenje promjenljivoj while true % Beskonačnoj while petlji img = r.getImage; img = imresize (img, [227, 227]); oznaka = klasificirati (anet, img); ako je oznaka == "papirnati ubrus" || label == "hladnjak" label = "voda"; završna slika (img); naslov (znak (oznaka)); drawnow;

Dok petlja koja nam omogućava da kontroliramo uređaj telefonom preuzima te podatke iz žiroskopa telefona i mi ih priključujemo u matricu koja kontinuirano struji podatke natrag u MATLAB na računaru. Koristimo if naredbu koja čita podatke matrice i daje izlaz koji pomiče uređaj na osnovu određenih vrijednosti žiroskopa telefona. Važno je znati da smo koristili orijentacijske senzore mobilnog uređaja. Gore spomenuta matrica jedan po tri kategorizirana je prema svakom elementu senzora orijentacije telefona, koji je azimut, visina i bok. Ako su izrazi stvorili uvjete koji navode kada strana prelazi vrijednosti 50 ili pada ispod -50, tada se robot pomiče na određenu udaljenost naprijed (pozitivno 50) ili unatrag (negativno 50). Isto vrijedi i za vrijednost pitch -a. Ako vrijednost visine nagiba prelazi vrijednost 25 padova ispod -25, robot se okreće pod kutom od 1 stupanj (pozitivnih 25) ili negativnih 1 stupnjeva (negativnih 25)

dok je istinska pauza (.1) % Pauza od.5 sekundi prije nego što se uzme svaka vrijednost Controller = iphone. Orientation; % Dodjeljuje matricu za vrijednosti orijentacije iPhonea varijabli Azimuthal = Controller (1); % Dodjeljuje prvu vrijednost matrice varijabli Pitch = Controller (2); % Dodjeljuje drugu vrijednost matrice varijabli (nagib prema naprijed i natrag kada se iPhone drži bočno) Side = Controller (3); % Dodjeljuje treću vrijednost matrice varijabli (nagnite lijevo i desno kada se iPhone drži bočno) % Izaziva izlaz na osnovu orijentacije telefona ako je Bočna strana> 130 || Bočna strana 25 r.moveDistance (-. 1) % Pomera Roombu unazad otprilike 0,1 metra ako je iPhone nagnut unazad najmanje 25 stepeni u suprotnom slučaju Strana 25 r.turnAngle (-1) % Okreće Roombu za približno 1 stepen CCW ako je iPhone je nagnut ulijevo za najmanje 25 stepeni u suprotnom slučaju Pitch <-25 r.turnAngle (1) % Okreće Roombu za približno 1 stepen CW ako je iPhone nagnut za najmanje 25 stepeni

Ovo su samo najvažniji dijelovi našeg koda, koje smo uključili ako trebate brzo kopirati i zalijepiti odjeljak u svoju korist. Međutim, cijeli naš kôd prilažemo u nastavku ako je potrebno

Korak 5: Zaključak

Ovaj kôd koji smo napisali posebno je dizajniran za našeg robota, kao i za našu cjelokupnu viziju projekta. Naš cilj je bio upotrijebiti sve naše vještine kodiranja u MATLAB -u kako bismo izradili skriptu za dizajn bunara koja koristi većinu funkcija robota. Korištenje kontrolera telefona nije tako teško kao što mislite, i nadamo se da će vam naš kôd pomoći da bolje razumijete koncept kodiranja iRobota.

Preporučuje se: