Sadržaj:
Video: Mars Roomba projekat UTK: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
ODRICANJE: OVO ĆE RADITI SAMO AKO JE SOBA POSTAVLJENA U A
VEOMA POSEBAN NAČIN, OVAJ UPUTSTVO JE STVORENO I NAMJERENO KORISTITI UNIVERZITET TENESIRANIH STUDENATA I FAKULTETA
Ovaj kôd se koristi za postavljanje Roombe za pokretanje lokalno napisanog i spremljenog koda u MATLAB -u. Ovo neće funkcionirati ako ne možete nabaviti potrebne biblioteke s web stranice Sveučilišta Tennessee. Ako imate biblioteke, onda ih možete koristiti za programiranje vlastite Roombe pomoću funkcija u biblioteci. Ovaj Instructable uči vas kako instalirati biblioteke, 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 biblioteka
Na web stranici za inženjering nalazi se paket alata/biblioteka, preuzmite ga i postavite u novu mapu. Ova mapa mora sadržavati sve radne datoteke projekta jer će se bilo koja funkcija korištena u programu koji napravite morati odnositi na biblioteku. 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 funkcijama se može pristupiti pomoću naredbe "doc roomba". Pomoću ovih funkcija možete kontrolirati svoju Roombu na mnogo različitih načina. Dolje navedeni kôd koristi senzore udara, senzore svjetlosne trake, kamere i senzore na različite načine za stvaranje marsovera. Koristili smo senzore udara za otkrivanje kada Roomba udari u 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 prilikom udara u objekt 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 pretraživati, ako je pronađeno nešto vode, robot će poslati poruku operaterima. Senzori litice su dizajnirani 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 biblioteke
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
while true % Infinte while petlja za održavanje koda
dontFall = cliffCheck (r) % Dodjeljuje varijablu 'dontFall' funkciji 'cliffCheck'
if dontFall % if naredba da se nastavi 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'
if 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' završen
end % završava 'odbojnik' if naredbu
tečnosti = LiquidCheck (r) % Dodeljuje promenljivu 'tečnosti' funkciji 'LiquidCheck'
if tequids % if naredba da se nastavi u kodu nakon što je 'LiquidCheck' dovršen
r.setDriveVelocity (0,1, 0,1) % Održava Roombu u pokretu nakon završetka 'LiquidChecka'
end % završava izraz 'tečnosti' 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) % Kreira funkciju 'bumpcheck'
bumpdata = r.getBumpers % Dodjeljuje sve podatke od branika varijabli 'bumpdata'
branik = bumpdata.desno || bumpdata.left || bumpdata.front % Kreira pohranjenu varijablu, 'branik', za različite odbojnike
if bumpdata.right> 0 % If naredba da izazove različite funkcije roombe ako se odbije branik
r.stop % Zaustavlja Roomba
r.moveDistance (-0.3, 0.2) % Obrće Roombu 0.3m
r.turnAngle (90, 0.5) % Rotira Roombu za 90 stepeni š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 stepeni što je brže moguće
kraj
ako je bumpdata.left> 0
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (-90, 0.5) % Rotira Roombu -90 stepeni što je brže moguće
kraj
kraj
funkcija lightbumper = lightcheck (r) % Kreira funkciju 'lightcheck'
lightdata = r.getLightBumpers % Dodjeljuje sve podatke sa senzora svjetlosne neravnine varijabilnim 'lightdata'
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Kreira pohranjenu varijablu, 'lightbumper', za različite svjetlosne odbojnike
if lightbumper % If naredba za pozivanje podataka lightbumpera odozgo
if lightdata.left> 10 % If izjava koja uzrokuje različite funkcije roombe ako svjetlosni branik osjeti veće od 10 vrijednosti
r.setDriveVelocity (0.05, 0.05) % Usporava roombu kako bi se pripremio za nalet
end % završava početni if izraz
ako lightdata.rightCenter> 10
r.setDriveVelocity (0.05, 0.05)
kraj
if lightdata.right> 10
r.setDriveVelocity (0.05, 0.05)
kraj
ako je lightdata.leftCenter> 10
r.setDriveVelocity (0.05, 0.05)
kraj
end % završava 'lightbumper' if naredbu
end %završava funkciju lightcheck
funkcija dontFall = cliffCheck (r) % Kreira funkciju 'cliffCheck'
data = r.getCliffSensors; % Dodjeljuje sve podatke sa senzora litice varijabilnim 'podacima'
dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Kreira 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) % Okreće Roomba 0.2m
r.turnAngle (-90, 0.5) % Rotira Roombu -90 stepeni š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 stepeni što je brže moguće
elseif data.rightFront <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5) % Rotira Roombu za 90 stepeni što je brže moguće
elseif data.right <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5) % Rotira Roombu za 90 stepeni što je brže moguće
kraj
kraj
kraj
function tequids = LiquidCheck (r) % Kreira funkciju 'LiquidCheck'
dok true %pokreće beskonačnu petlju za kalibraciju
img = r.getImage; % čita kameru sa 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
tečnosti = crveno_sredstvo || blue_mean % Kreira uskladištenu promenljivu, 'tečnosti', za različite promenljive boje
if tečnosti % If naredba za pozivanje slikovnih podataka odozgo
if red_mean> 170 % If naredba da izazove 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 (); % obriši prikaz
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 pauza za čitanje prikazanih informacija
r.setLEDDigits ('LAVA'); % postavlja LED zaslon na izlaz 'LAVA'
pauza (0,5)
traka čekanja (.33, f, '*DOLAZNA PORUKA*'); %stvara povećanje na traci čekanja
r.setLEDDigits ('HOT');
pauza (0,5)
r.setLEDDigits ('LAVA');
pauza (0,5)
traka čekanja (.67, f, '*DOLAZNA PORUKA*'); % stvara povećanje na traci čekanja
r.setLEDDigits ('HOT');
pauza (0,5)
r.setLEDDigits ('LAVA');
traka čekanja (1, f, '*DOLAZNA PORUKA*'); %dovršava traku čekanja
pauza (1)
close (f) %zatvara traku čekanja
r.setLEDDigits (); % briše LED ekran
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, '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 stepeni što je brže moguće
r.setLEDCenterColor (128, 128); % postavlja roomba središnju LED lampicu u narandžastu
zatvori sve %zatvara preostale otvorene prozore
elseif blue_mean> 175 % If naredba da izazove 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 (); % obriši prikaz
f = traka čekanja (0, '*DOLAZNA PORUKA*'); % stvara traku čekanja za učitavanje poruke
r.setLEDDigits ('LOOK'); % postavlja LED ekran na izlaz 'LOOK'
pauza (0,5) %Kratka pauza za čitanje prikazanih informacija
r.setLEDDigits ('WATR'); % postavlja LED zaslon na izlaz 'WATR'
pauza (0,5)
traka čekanja (.33, f, '*DOLAZNA PORUKA*'); %stvara povećanje na traci čekanja
r.setLEDDigits ('LOOK');
pauza (0,5)
r.setLEDDigits ('WATR');
pauza (0,5)
traka čekanja (.67, f, '*DOLAZNA PORUKA*'); % stvara povećanje na traci čekanja
r.setLEDDigits ('LOOK');
pauza (0,5)
r.setLEDDigits ('WATR');
traka čekanja (1, f, '*DOLAZNA PORUKA*'); %dovršava traku čekanja
pauza (1)
close (f) %zatvara traku čekanja
r.setLEDDigits (); % briše LED ekran
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 stepeni što je brže moguće
r.setLEDCenterColor (128, 128); % postavlja roomba središnju LED lampicu u narandžastu
zatvori sve %zatvara preostale otvorene prozore
end %završava 'red_mean' if naredbom
end %završava izraz 'tečnosti' 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. Kada se Roomba poveže, 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 trebala raditi prema uputama.
Preporučuje se:
Linefollower HoGent - sintetički projekat: 8 koraka
Linefollower HoGent - Syntheseproject: Za vaš sintetički projekat kreirajte našu liniju praćenja linija za izradu. In deze instructable zal ik uitleggen hoe ik deze gemaakt heb, en tegen welke problems ik o.a ben aangelopen
Mars Roomba: 6 koraka
Mars Roomba: Ovaj Instructable vodit će vas u smjerovima upravljanja Raspberry Pi Roomba vakuumskim botom. Operativni sistem koji ćemo koristiti je preko MATLAB -a
Roomba roomba upravljani preglednikom sa Raspberry Pi modelom 3 A+: 6 koraka (sa slikama)
Roomba robotski upravljani Roomba robot s Raspberry Pi modelom 3 A+: PregledOva instrukcija će se fokusirati 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. Ja nemam
UTK EF 230 MarsRoomba projekat 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 potencijalima planete za život mikroorganizama. Roveri prvenstveno koriste fotografije i alate za analizu tla za podatke c
Roomba projekat: 5 koraka (sa slikama)
Roomba projekt: Ova instrukcija nastala je u skladu sa zahtjevima projekta Makecoursea na Univerzitetu Južne Floride (www.makecourse.com). Ova instrukcija će obuhvatiti sve potrebne korake i komponente potrebne za sastavljanje moje Roomba projekcije