Sadržaj:
Video: Mars Roomba projekt UTK: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
ODRICANJE ODGOVORNOSTI: OVO ĆE RADITI SAMO AKO JE ROOMBA POSTAVLJENA U A
VRLO POSEBAN NAČIN, OVAJ UPUTSTVO JE STVORENO I NAMJERENO KORISTITI SVEUČILIŠTE TENESIRANIH STUDENATA I FAKULTETA
Ovaj se kôd koristi za postavljanje Roombe za pokretanje lokalno napisanog i spremljenog koda u MATLAB -u. To neće funkcionirati ako ne možete nabaviti potrebne knjižnice s web stranice Sveučilišta Tennessee. Ako imate knjižnice, tada ih možete koristiti za programiranje vlastite Roombe pomoću funkcija u knjižnici. Ovaj Instructable uči vas kako instalirati knjižnice, stvoriti mapu za sav kôd te kako kodirati i koristiti program koji smo dali u nastavku.
Potrebni materijali:
· Roomba
· MATLAB
· Raspberry Pi i Pi kamera
Korak 1: Dobivanje knjižnica
Na web stranici za inženjering nalazi se skup alata/knjižnica, preuzmite je i postavite u novu mapu. Ova mapa mora sadržavati sve radne datoteke projekta jer će se sve funkcije koje koristite u programu koji napravite morati odnositi na knjižnicu. Nakon što to učinite, možete početi raditi na svojim programima
Korak 2: Pisanje programa
Postoji dosta funkcija koje se mogu koristiti u programu, tim se funkcijama može pristupiti pomoću naredbe "doc roomba". Pomoću ovih funkcija možete upravljati svojom Roombom na mnogo različitih načina. Dolje navedeni kôd koristi senzore udara, senzore svjetlosnih traka, kamere i senzore na različite načine za stvaranje marsovera. Koristili smo bump senzore za otkrivanje kada Roomba pogodi objekt, kada se to dogodi robot će se okrenuti, okrenuti se i nastaviti kretati. Prije nego što Roomba udari u objekt, svjetlosna traka će otkriti objekt i usporiti Roombu, tako da će Roomba u slučaju sudara s objektom aktivirati senzor udara biti manje oštećena/pogođena udarcem. Kamera traži vodu ili lavu na površini, ako nema pronađene tekućine, robot će nastaviti tražiti, ako je pronađeno nešto vode, robot će poslati poruku operaterima. Senzori litice dizajnirani su da zaustave robota ako se približi litici. Ako robot osjeti liticu, okrenuti će se unatrag i okrenuti se kako bi izbjegao pad.
Korak 3: Kodirajte
Kopirajte i zalijepite ovo u MATLAB datoteku koja se nalazi u istoj mapi kao i knjižnice
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
dok je istina % Infinte while petlja za održavanje koda
dontFall = cliffCheck (r) % Dodjeljuje varijablu 'dontFall' funkciji 'cliffCheck'
if dontFall % if naredba za nastavak u kodu nakon što je 'cliffCheck' dovršena
r.setDriveVelocity (0,1, 0,1) % Održava Roombu u pokretu nakon što završi 'cliffCheck'
end % završava 'dontFall' if naredbom
bumper = bumpcheck (r) % Dodjeljuje varijablu 'bumper' funkciji 'bumpcheck'
ako bumper % if naredba da se nastavi u kodu nakon što je 'bumpcheck' dovršen
r.setDriveVelocity (0,1, 0,1) % Održava Roombu u pokretu nakon što je 'bumpcheck' dovršen
end % završava 'odbojnik' if naredbu
tekućine = LiquidCheck (r) % Dodjeljuje varijablu 'tekućine' funkciji 'LiquidCheck'
if tekućine % if naredba da se nastavi u kodu nakon što je 'LiquidCheck' dovršen
r.setDriveVelocity (0,1, 0,1) % Održava kretanje Roombe nakon što je dovršena "LiquidCheck"
end % završava izraz 'tekućine' if
lightbumper = lightcheck (r) % Dodjeljuje varijablu 'lightbumper' funkciji 'lightcheck'
pause (0,1) % Kratko pauzirajte kako biste izbjegli kontinuiranu iteraciju petlje
end % završava beskonačno while petlja
end % završava funkciju
funkcija bumper = bumpcheck (r) % Stvara funkciju 'bumpcheck'
bumpdata = r.getBumpers % Dodjeljuje sve podatke od odbojnika varijabli 'bumpdata'
branik = bumpdata.desno || bumpdata.lijevo || bumpdata.front % Stvara pohranjenu varijablu, 'odbojnik', za različite odbojnike
if bumpdata.right> 0 % If izjava koja uzrokuje različite funkcije roombe ako se odbije branik
r.stop % Zaustavlja Roombu
r.moveDistance (-0.3, 0.2) % Obrće Roombu 0.3m
r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće
kraj
ako je bumpdata.front> 0
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (randi (270), 0,5) % Rotira Roombu u slučajnom intervalu između 0 i 270 stupnjeva što je brže moguće
kraj
ako je bumpdata.levo> 0
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (-90, 0,5) % Rotira Roombu -90 stupnjeva što je brže moguće
kraj
kraj
function lightbumper = lightcheck (r) % Stvara funkciju 'lightcheck'
lightdata = r.getLightBumpers % Dodjeljuje sve podatke sa osjetnika udara svjetlosti varijabli "lightdata"
lightbumper = lightdata.lijevo || lightdata.desno || lightdata.rightCenter || lightdata.leftCenter % Stvara pohranjenu varijablu, "svjetlosni bumper", za različite odbojnike svjetla
if lightbumper % If naredba za pozivanje svjetlosnih podataka odozgo
if lightdata.left> 10 % If izjava da izazove različite funkcije roombe ako svjetlosni branik osjeti veće od 10 vrijednosti
r.setDriveVelocity (0,05, 0,05) % Usporava roombu za pripremu za udar
end % završava početni if izraz
ako lightdata.rightCenter> 10
r.setDriveVelocity (0,05, 0,05)
kraj
ako su svjetlosni podaci.desno> 10
r.setDriveVelocity (0,05, 0,05)
kraj
ako lightdata.leftCenter> 10
r.setDriveVelocity (0,05, 0,05)
kraj
end % završava 'lightbumper' if naredbom
end %završava funkciju lightcheck
funkcija dontFall = cliffCheck (r) % Stvara funkciju 'cliffCheck'
podaci = r.getCliffSensors; % Dodjeljuje sve podatke s senzora litice varijabilnim 'podacima'
dontFall = podaci.lijevo <1020 || podaci.lijevoPreda <1020 || podaci.desnoPred <1020 || data.right <1020 % Stvara pohranjenu varijablu, 'dontFall', za različite senzore litice
if dontFall % If izjava za pozivanje podataka senzora litice odozgo
if data.left <1010 % If izjava da izazove različite funkcije roombe ako senzor litice osjeti manje od 1010 vrijednosti
r.stop
r.moveDistance (-0.2, 0.2) % Obrće Roombu 0.2m
r.turnAngle (-90, 0,5) % Rotira Roombu -90 stupnjeva što je brže moguće
elseif data.leftFront <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće
inače podaci.desnoFront <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće
inače podaci.desno <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće
kraj
kraj
kraj
funkcija tekućine = LiquidCheck (r) % Stvara funkciju 'LiquidCheck'
dok true %start beskonačna petlja za kalibraciju
img = r.getImage; % čita kameru s robota
image (img) % prikazuje sliku u prozoru sa slikom
red_mean = mean (mean (img (200, 150, 1)))% čita srednju količinu crvenih piksela
blue_mean = mean (mean (img (200, 150, 3)))% čita srednju količinu plavih piksela
tekućine = crveno_sredstvo || blue_mean % Stvara pohranjenu varijablu, 'tekućine', za različite varijable boja
if tekućine % If naredba za pozivanje slikovnih podataka odozgo
if red_mean> 170 % If izjava koja uzrokuje različite funkcije roombe ako kamera vidi srednju crvenu boju veću od 170
r.stop % zaustavlja roomba
r.setLEDCenterColor (255) % postavlja krug na crvenu boju
r.setLEDDigits (); % očisti zaslon
f = traka čekanja (0, '*DOLAZNA PORUKA*'); % stvara traku čekanja za učitavanje poruke
r.setLEDDigits ('HOT'); % postavlja LED zaslon na izlaz 'HOT'
pauza (0,5) %Kratka stanka za čitanje prikazanih informacija
r.setLEDDigits ('LAVA'); % postavlja LED zaslon na izlaz 'LAVA'
stanka (0,5)
traka čekanja (.33, f, '*DOLAZNA PORUKA*'); %stvara povećanje trake čekanja
r.setLEDDigits ('HOT');
stanka (0,5)
r.setLEDDigits ('LAVA');
stanka (0,5)
traka čekanja (.67, f, '*DOLAZNA PORUKA*'); % stvara povećanje trake čekanja
r.setLEDDigits ('HOT');
stanka (0,5)
r.setLEDDigits ('LAVA');
traka čekanja (1, f, '*DOLAZNA PORUKA*'); %dovršava traku čekanja
stanka (1)
close (f) %zatvara traku čekanja
r.setLEDDigits (); % briše LED zaslon
close all %Zatvara sve prethodne prozore
osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Briše prozor crtanja osi i grafikona
y = 0,5; % postavlja y-poziciju teksta u prozoru za crtanje
x = 0,06; % postavlja položaj x teksta u prozoru za crtanje
title ('FROM MARS ROOMBA', 'fontsize', 32) % Dodaje naslov u prozor za iscrtavanje
quadeqtxt = 'OPASNA LAVA'; % Postavlja varijablu 'quadeqtxt' na izlaz 0
tekst (x, y, quadeqtxt, 'tumač', 'lateks', 'veličina slova', 36); % prikazuje tekst quadeq u prozoru za crtanje
r.moveDistance (-0.2, 0.2) %preokreće roombu 0.2m
r.turnAngle (180, 0,5) %okreće roombu za 180 stupnjeva što je brže moguće
r.setLEDCenterColor (128, 128); % postavlja središnju LED diodu roombe na narančastu
zatvori sve %zatvara preostale otvorene prozore
elseif blue_mean> 175 % If izjava koja uzrokuje različite funkcije roombe ako kamera vidi srednju plavu boju veću od 175
r.stop % zaustavlja roomba
r.setLEDCenterColor (255) % postavlja krug na crvenu boju
r.setLEDDigits (); % očisti prikaz
f = traka čekanja (0, '*DOLAZNA PORUKA*'); % stvara traku čekanja za učitavanje poruke
r.setLEDDigits ('LOOK'); % postavlja LED zaslon na izlaz 'LOOK'
pauza (0,5) %Kratka stanka za čitanje prikazanih informacija
r.setLEDDigits ('WATR'); % postavlja LED zaslon na izlaz 'WATR'
stanka (0,5)
traka čekanja (.33, f, '*DOLAZNA PORUKA*'); %stvara povećanje trake čekanja
r.setLEDDigits ('LOOK');
stanka (0,5)
r.setLEDDigits ('WATR');
stanka (0,5)
traka čekanja (.67, f, '*DOLAZNA PORUKA*'); % stvara povećanje trake čekanja
r.setLEDDigits ('LOOK');
stanka (0,5)
r.setLEDDigits ('WATR');
traka čekanja (1, f, '*DOLAZNA PORUKA*'); %dovršava traku čekanja
stanka (1)
close (f) %zatvara traku čekanja
r.setLEDDigits (); % briše LED zaslon
close all %Zatvara sve prethodne prozore
osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Briše prozor crtanja osi i grafikona
y = 0,5; % postavlja y-poziciju teksta u prozoru za crtanje
x = 0,06; % postavlja položaj x teksta u prozoru za crtanje
title ('FROM MARS ROOMBA', 'fontsize', 32) % Dodaje naslov u prozor za iscrtavanje
quadeqtxt = 'NAĐENA VODA'; % Postavlja varijablu 'quadeqtxt' na izlaz 0
tekst (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % prikazuje tekst quadeq u prozoru za crtanje
r.moveDistance (-0.2, 0.2) %preokreće roombu 0.2m
r.turnAngle (180, 0,5) %okreće roombu za 180 stupnjeva što je brže moguće
r.setLEDCenterColor (128, 128); % postavlja roomba središnju LED diodu u narančastu
zatvori sve %zatvara preostale otvorene prozore
end %završava 'red_mean' if naredbom
end %završava izraz 'tekućine' if
end % zatvara beskonačnu while petlju
end % završava funkciju 'LiquidCheck'
Korak 4: Pokretanje koda
Nakon što ste kopirali i zalijepili kôd u MATLAB, morate se povezati s Roombom. Nakon što se Roomba spoji, morate imenovati varijablu r. Funkcije koriste varijablu r kada se odnose na Roombu, pa se Roomba mora definirati kao varijabla r. Nakon pokretanja koda, Roomba bi se trebala pokrenuti prema uputama.
Preporučeni:
Mars Roomba: 6 koraka
Mars Roomba: Ovaj Instructable vodit će vas u smjerovima upravljanja Raspberry Pi kontroliranim Roomba vakuumskim botom. Operativni sustav koji ćemo koristiti je putem MATLAB -a
Roomba Roomba upravljani preglednikom s Raspberry Pi modelom 3 A+: 6 koraka (sa slikama)
Roomba Roomba upravljani preglednikom robot s modelom Raspberry Pi 3 A+: pregledOva instrukcija će se usredotočiti na to kako mrtvoj Roombi dati novi mozak (Raspberry Pi), oči (web kamera) i način da kontrolirate sve iz web preglednika. Postoji mnogo Roomba hakova koji omogućuju kontrolu putem serijskog sučelja. Nisam
Roomba MATLAB projekt: 5 koraka
Roomba MATLAB projekt: Trenutni plan koji NASA ima za Mars rover je da on bude sakupljač podataka i da luta po Marsu, prikupljajući uzorke tla kako bi se vratio na Zemlju kako bi znanstvenici mogli vidjeti postoje li neki prethodni oblici života planeta. Dodatni
UTK EF 230 MarsRoomba projekt jesen 2018: 5 koraka
UTK EF 230 MarsRoomba projekt jesen 2018.: Trenutno se Mars roveri koriste za prikupljanje podataka o površini Marsa različitim metodama, do konačnog kraja saznanja više o potencijalu planeta za život mikroorganizama. Rover prvenstveno koristi fotografije i alate za analizu tla za podatke c
Roomba projekt: 5 koraka (sa slikama)
Roomba projekt: Ova instrukcija nastala je u skladu sa zahtjevima projekta Makecoursea na Sveučilištu Južne Floride (www.makecourse.com). Ova instrukcija će obuhvatiti sve potrebne korake i komponente potrebne za sastavljanje moje Roomba projekcije