Kazalo:
Video: Mars Roomba Project UTK: 4 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
IZJAVA O ODGOVORNOSTI: TO bo delovalo SAMO, ČE JE ROOMBA NASTAVLJENA V A.
ZELO POSEBEN NAČIN, KI JE TO NAVODILO USTVARIL IN NAMENUJAL UPORABLJATI UNIVERZA TENESIRANIH ŠTUDENTOV IN FAKULTETE
Ta koda se uporablja za nastavitev Roombe za izvajanje lokalno napisane in shranjene kode v MATLAB -u. To ne bo delovalo, če ne morete dobiti potrebnih knjižnic s spletnega mesta Univerze v Tennesseeju. Če imate knjižnice, jih lahko uporabite za programiranje lastne Roombe z uporabo funkcij v knjižnici. Ta Instructable vas uči, kako namestiti knjižnice, ustvariti mapo za vso kodo ter kako kodirati in uporabljati program, ki smo ga predstavili spodaj.
Potrebni materiali:
· Roomba
· MATLAB
· Raspberry Pi in Pi kamera
Korak: Pridobite knjižnice
Na inženirskem spletnem mestu je na voljo zbirka orodij/knjižnica, jo naložite in postavite v novo mapo. Ta mapa mora vsebovati vse delovne datoteke projekta, saj se mora vsaka funkcija v programu, ki ga ustvarite, sklicevati na knjižnico. Ko to storite, lahko začnete delati na svojih programih
2. korak: Pisanje programov
V programu je mogoče uporabiti kar nekaj funkcij, do teh funkcij lahko dostopate z ukazom "doc roomba". S temi funkcijami lahko upravljate svojo Roombo na veliko različnih načinov. Spodnja koda na različne načine uporablja senzorje udarcev, senzorje svetlobnih palic, kamero in pečine na različne načine za ustvarjanje mars roverja. S senzorji udarcev smo zaznali, kdaj Roomba zadene predmet, ko se to zgodi, se bo robot obrnil, obrnil in se še naprej premikal. Preden Roomba zadene predmet, bo svetlobna vrstica zaznala objekt in upočasnila Roombo, tako da bo Roomba pri udarcu v objekt za aktiviranje senzorja udarcev manj poškodovana/prizadeta. Kamera išče vodo ali lavo na površini, če ni najdene tekočine, bo robot nadaljeval iskanje, če je nekaj vode, bo robot sporočil operaterjem. Tipala pečine so zasnovana tako, da ustavijo robota, če se približa pečini. Če robot zazna skalo, se bo obrnil in se obrnil, da ne bi padel.
3. korak: Koda
To kopirajte in prilepite v datoteko MATLAB, ki se nahaja v isti mapi kot knjižnice
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
medtem ko true % Infinte while zanka za ohranitev delovanja kode
dontFall = cliffCheck (r) % Funkciji 'cliffCheck' dodeli spremenljivko 'dontFall'
if dontFall % if stavek za nadaljevanje v kodi po 'cliffCheck' je dokončan
r.setDriveVelocity (0,1, 0,1) % Ohrani Roombo, da se premika po končanem "cliffCheck"
end % konča 'dontFall' if stavek
odbijač = bumpcheck (r) % Funkciji 'bumpcheck' dodeli spremenljivko 'odbijač'
če odbijač % if stavek za nadaljevanje v kodi po zaključku 'bumpcheck'
r.setDriveVelocity (0,1, 0,1) % Ohrani Roombo, da se premika po zaključku "bumpcheck"
end % konča "odbijač" if stavek
tekočine = LiquidCheck (r) % Funkciji "LiquidCheck" dodeli spremenljivko "tekočine"
if tekočine % if stavek za nadaljevanje kode po zaključku 'LiquidCheck'
r.setDriveVelocity (0,1, 0,1) % Ohrani Roombo v gibanju po končanem "LiquidCheck"
end % konča izraz "tekočine" if
lightbumper = lightcheck (r) % Funkciji 'lightcheck' dodeli spremenljivko 'lightbumper'
pause (0,1) % Kratek premor, da se izognete ponavljanju neprekinjene zanke
end % konča neskončno zanko while
end % konča funkcijo
function bumper = bumpcheck (r) % Ustvari funkcijo 'bumpcheck'
bumpdata = r.getBumpers % Dodeli vse podatke od odbijača spremenljivki 'bumpdata'
odbijač = bumpdata.right || bumpdata.left || bumpdata.front % Ustvari shranjeno spremenljivko, 'odbijač', za različne odbijače
če bumpdata.right> 0 % Če izjava povzroči različne funkcije roombe, če se odbija odbijač
r.stop % Ustavi Roombo
r.moveDistance (-0,3, 0,2) % Obrne Roombo 0,3 m
r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje
konec
če je bumpdata.front> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (randi (270), 0,5) % Čim hitreje vrti Roombo v naključnem intervalu med 0 in 270 stopinjami
konec
če je bumpdata.left> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (-90, 0,5) % Rotira Roombo -90 stopinj čim hitreje
konec
konec
function lightbumper = lightcheck (r) % Ustvari funkcijo 'lightcheck'
lightdata = r.getLightBumpers % Dodeli vse podatke iz senzorja svetlobnih udarcev spremenljivki 'lightdata'
lightbumper = lightdata.levo || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Ustvari shranjeno spremenljivko, 'lightbumper', za različne svetlobne odbijače
if lightbumper % If stavek za klicanje podatkov lightbumperja od zgoraj
če lightdata.left> 10 % Če izjava povzroči različne funkcije roombe, če odbijač zazna več kot 10 vrednosti
r.setDriveVelocity (0,05, 0,05) % Upočasni roombo pri pripravi na udarce
end % konča začetni stavek if
če lightdata.rightCenter> 10
r.setDriveVelocity (0,05, 0,05)
konec
if lightdata.right> 10
r.setDriveVelocity (0,05, 0,05)
konec
če je lightdata.leftCenter> 10
r.setDriveVelocity (0,05, 0,05)
konec
end % konča 'lightbumper' if stavek
end %konča funkcijo lightcheck
function dontFall = cliffCheck (r) % Ustvari funkcijo 'cliffCheck'
data = r.getCliffSensors; % Dodeli vse podatke s senzorja pečine spremenljivim "podatkom"
dontFall = podatki.levo <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Ustvari shranjeno spremenljivko 'dontFall' za različne senzorje pečine
if dontFall % If izjava, da pokličete podatke senzorja pečine od zgoraj
if data.left <1010 % Če izjava povzroči različne funkcije roombe, če senzor pečine zazna manj kot 1010 vrednosti
r.stop
r.moveDistance (-0,2, 0,2) % Obrne Roombo 0,2 m
r.turnAngle (-90, 0,5) % Rotira Roombo -90 stopinj čim hitreje
elseif data.leftFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje
elseif data.rightFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje
elseif data.right <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje
konec
konec
konec
function tekočine = LiquidCheck (r) % Ustvari funkcijo 'LiquidCheck'
medtem ko true %začne neskončno zanko za umerjanje
img = r.getImage; % bere kamero z robota
image (img) % prikazuje sliko v oknu s sliko
red_mean = mean (mean (img (200, 150, 1)))% bere povprečno količino rdečih slikovnih pik
blue_mean = mean (mean (img (200, 150, 3)))% bere povprečno količino modrih slikovnih pik
tekočine = rdeče_pomeni || blue_mean % Ustvari shranjeno spremenljivko "tekočine" za različne barvne spremenljivke
if tekočine % If stavek za klic slikovnih podatkov od zgoraj
if red_mean> 170 % If izjava, ki povzroči različne funkcije roombe, če kamera vidi srednjo rdečo barvo večjo od 170
r.stop % ustavi roombo
r.setLEDCenterColor (255) % nastavi krog na rdečo barvo
r.setLEDDigits (); % počisti zaslon
f = čakalna vrstica (0, '*PRIHODLJIVO SPOROČILO*'); % ustvari čakalno vrstico za nalaganje sporočila
r.setLEDDigits ('HOT'); % nastavi LED zaslon na izhod 'HOT'
premor (0,5) %Kratek premor za branje prikazanih informacij
r.setLEDDigits ('LAVA'); % nastavi LED zaslon na izhod 'LAVA'
premor (0,5)
čakalna vrstica (.33, f, '*PRIHODLJIVO SPOROČILO*'); %ustvari povečanje čakalne vrstice
r.setLEDDigits ('HOT');
premor (0,5)
r.setLEDDigits ('LAVA');
premor (0,5)
čakalna vrstica (.67, f, '*PRIHODLJIVO SPOROČILO*'); % ustvari povečanje čakalne vrstice
r.setLEDDigits ('HOT');
premor (0,5)
r.setLEDDigits ('LAVA');
čakalna vrstica (1, f, '*PRIHODLJIVO SPOROČILO*'); %dokonča čakalno vrstico
premor (1)
close (f) %zapre čakalno vrstico
r.setLEDDigits (); % počisti LED zaslon
close all %Zapre vsa prejšnja okna
osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Počisti okno ploskve osi in grafikona
y = 0,5; % nastavi y-položaj besedila v oknu za risanje
x = 0,06; % nastavi x-položaj besedila v oknu za risanje
title ('FROM MARS ROOMBA', 'fontsize', 32) % Doda naslov v okno za risanje
quadeqtxt = 'NEVARNA LAVA'; % Nastavi spremenljivko 'quadeqtxt' na izhod 0
besedilo (x, y, quadeqtxt, 'tolmač', 'lateks', 'velikost pisave', 36); % prikaže besedilo quadeq v oknu za risanje
r.moveDistance (-0,2, 0,2) %obrne roombo 0,2 m
r.turnAngle (180, 0,5) %obrne roombo za 180 stopinj čim hitreje
r.setLEDCenterColor (128, 128); % nastavi roomba center LED na oranžno
zaprite vse %zapre preostala odprta okna
elseif blue_mean> 175 % Če izjava povzroči različne funkcije roombe, če kamera vidi srednjo modro barvo večjo od 175
r.stop % ustavi roombo
r.setLEDCenterColor (255) % nastavi krog v rdečo barvo
r.setLEDDigits (); % počisti zaslon
f = čakalna vrstica (0, '*PRIHODLJIVO SPOROČILO*'); % ustvari čakalno vrstico za nalaganje sporočila
r.setLEDDigits ('LOOK'); % nastavi LED zaslon na izhod 'LOOK'
premor (0,5) %Kratek premor za branje prikazanih informacij
r.setLEDDigits ('WATR'); % nastavi LED zaslon na izhod 'WATR'
premor (0,5)
čakalna vrstica (.33, f, '*PRIHODLJIVO SPOROČILO*'); %ustvari povečanje čakalne vrstice
r.setLEDDigits ('LOOK');
premor (0,5)
r.setLEDDigits ('WATR');
premor (0,5)
čakalna vrstica (.67, f, '*PRIHODLJIVO SPOROČILO*'); % ustvari povečanje čakalne vrstice
r.setLEDDigits ('LOOK');
premor (0,5)
r.setLEDDigits ('WATR');
čakalna vrstica (1, f, '*PRIHODLJIVO SPOROČILO*'); %dokonča čakalno vrstico
premor (1)
close (f) %zapre čakalno vrstico
r.setLEDDigits (); % počisti LED zaslon
close all %Zapre vsa prejšnja okna
osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Počisti okno ploskve osi in grafikona
y = 0,5; % nastavi y-položaj besedila v oknu za risanje
x = 0,06; % nastavi x-položaj besedila v oknu za risanje
title ('FROM MARS ROOMBA', 'fontsize', 32) % Doda naslov v okno za risanje
quadeqtxt = 'NAJDENA VODA'; % Nastavi spremenljivko 'quadeqtxt' na izhod 0
besedilo (x, y, quadeqtxt, 'tolmač', 'lateks', 'velikost pisave', 36); % prikaže besedilo quadeq v oknu za risanje
r.moveDistance (-0,2, 0,2) %obrne roombo 0,2 m
r.turnAngle (180, 0,5) %obrne roombo za 180 stopinj čim hitreje
r.setLEDCenterColor (128, 128); % nastavi roomba center LED na oranžno
zaprite vse %zapre preostala odprta okna
end %konča 'red_mean' if stavek
end %konča izraz "tekočine" if
end % zapre neskončno zanko while
end % konca funkcija "LiquidCheck"
4. korak: Zaženite kodo
Ko ste kodo kopirali in prilepili v MATLAB, se morate povezati z Roombo. Ko je Roomba povezana, morate poimenovati spremenljivko r. Funkcije uporabljajo spremenljivko r pri sklicevanju na Roombo, zato je treba Roombo definirati kot spremenljivko r. Po zagonu kode mora Roomba delovati po navodilih.
Priporočena:
Robotski projekt UTK 2017: 3 koraki
Robotski projekt UTK 2017: Poslanstvo: Našo ekipo inženirjev je najela neprofitna fundacija Froogle za razvoj odprtokodne tehnologije za razvoj inovativnih skupin Mars Rover, ki pomagajo človeku. Izhod " rover " je roomba, ki smo jo kodirali za izvedbo serije o
Mars Roomba: 6 korakov
Mars Roomba: Ta navodila vas bodo vodila v smeri delovanja vakuumskega robota Roomba, ki ga upravlja Raspberry Pi. Operacijski sistem, ki ga bomo uporabljali, je prek programa MATLAB
Roomba Explorer: 4 koraki
Roomba Explorer: Ta projekt bo z uporabo MATLAB -a in iRobotovega robota Create2 raziskal različna področja neznane lokacije. Na robotu smo uporabili senzorje za lažje manevriranje na nevarnem terenu. S pridobivanjem fotografij in video virov iz Raspberry Pi, ki
UTK EF 230 MarsRoomba Project jesen 2018: 5 korakov
UTK EF 230 MarsRoomba Project jesen 2018: Trenutno se Mars roverji uporabljajo za zbiranje podatkov o površini Marsa z različnimi metodami do končnega spoznavanja potenciala planeta za življenje mikrobov. Roverji za podatke uporabljajo predvsem fotografije in orodja za analizo tal
IRobot Create-Mars Expedition Rover Mark I: 4 koraki
IRobot Create-Mars Expedition Rover Mark I: Ta navodila vas bodo naučila, kako nastaviti iRobot Create s kodiranjem MatLab. Vaš robot bo imel možnost iskanja mineralov z razlikovanjem oblik, manevriranjem po neravnem terenu s pomočjo senzorjev pečine in zmožnostjo