Sisukord:

Mars Roomba projekt UTK: 4 sammu
Mars Roomba projekt UTK: 4 sammu

Video: Mars Roomba projekt UTK: 4 sammu

Video: Mars Roomba projekt UTK: 4 sammu
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Juuli
Anonim
Mars Roomba projekt UTK
Mars Roomba projekt UTK
Mars Roomba projekt UTK
Mars Roomba projekt UTK

LAHTIÜTLUS: See toimib ainult siis, kui ROOMBA on seadistatud asukohta A.

VÄGA KONKREETSELT LOODI SEE JUHEND TENNESSE ÕPILASTE ÜLIKOOLI JA TEADUSKONNA KASUTAMISEKS

Seda koodi kasutatakse Roomba seadistamiseks kohalikult kirjutatud ja salvestatud koodi käivitamiseks MATLABis. See ei toimi, kui te ei saa vajalikke raamatukogusid Tennessee ülikooli veebisaidilt hankida. Kui teil on raamatukogud, saate neid kasutada oma Roomba programmeerimiseks, kasutades raamatukogu funktsioone. See juhend juhendab teid, kuidas raamatukogusid installida, kogu kausta jaoks kausta luua ning allpool pakutud programmi kodeerida ja kasutada.

Nõutavad materjalid:

· Roomba

· MATLAB

· Vaarika Pi ja Pi kaamera

Samm: raamatukogude hankimine

Inseneri veebisaidil on tööriistakast/raamatukogu, laadige see alla ja asetage see uude kausta. See kaust peab sisaldama kõiki projektitöö faile, kuna kõik teie loodud programmis kasutatavad funktsioonid peavad viitama kogule. Kui olete seda teinud, võite hakata oma programmidega töötama

2. samm: programmide kirjutamine

Programmis saab kasutada üsna palju funktsioone, nendele funktsioonidele pääseb juurde käsu "doc roomba" abil. Neid funktsioone kasutades saate oma Roomba juhtida mitmel erineval viisil. Allpool toodud kood kasutab põrkumisandureid, valgusriba andureid, kaamera- ja kaljuandureid marsruuteri loomiseks erineval viisil. Kasutasime põrkeandureid, et tuvastada, kui Roomba tabab objekti, kui see juhtub, pöörab robot tagurdama, pöörab ümber ja jätkab liikumist. Enne kui Roomba tabab objekti, tuvastab valgusriba objekti ja aeglustab Roomba kiirust, nii et kui see põrkub vastu objekti põrkeanduri aktiveerimiseks, on Roomba löök vähem kahjustatud/mõjutatud. Kaamera otsib pinnalt vett või laavat, kui vedelikku ei leita, jätkab robot otsimist, kui vett on leitud, saadab robot operaatoritele sõnumi. Kaljuandurid on mõeldud roboti peatamiseks, kui see läheneb kaljule. Kui robot tunneb kaljut, pöörab ta tagurpidi ja pöörab ümber, et vältida kukkumist.

3. samm: kood

Kopeerige ja kleepige see MATLAB -faili, mis asub teekidega samas kaustas

functionMainRoombaFile (r)

r.setDriveVelocity (0,1, 0,1)

samas tõsi % Infinte while loop, et kood töötaks

dontFall = cliffCheck (r) % Määrab muutuja 'dontFall' funktsioonile 'cliffCheck'

if dontFall % if avaldus koodiga jätkamiseks pärast 'cliffCheck' lõpetamist

r.setDriveVelocity (0,1, 0,1) % Hoiab Roomba pärast „cliffCheck” lõpetamist liikumas

end % lõpetab 'dontFall' if avalduse

kaitseraud = bumpcheck (r) % Määrab muutuja 'kaitseraud' funktsioonile 'bumpcheck'

kui kaitseraud %, kui avaldus koodiga jätkamiseks pärast „bumpcheck” lõpetamist

r.setDriveVelocity (0,1, 0,1) % Hoiab Roomba pärast „bumpcheck” lõpetamist liikumas

end % lõpetab avalduse 'kaitseraud'

vedelikud = LiquidCheck (r) % Määrab muutuja „vedelikud” funktsioonile „LiquidCheck”

kui vedelikud % kui avaldus jätkata koodiga pärast 'LiquidCheck' lõpetamist

r.setDriveVelocity (0,1, 0,1) % Hoiab Roomba pärast „LiquidCheck” lõpetamist liikumas

end % lõpetab 'vedelikud' if

lightbumper = lightcheck (r) % Määrab muutuja 'lightbumper' funktsioonile 'lightcheck'

paus (0,1) % Paus, et vältida pidevat tsükli kordamist

lõpp % lõpeb lõpmatu ajal

end % lõpeb funktsioon

function bumper = bumpcheck (r) % Loob 'bumpcheck' funktsiooni

bumpdata = r.getBumpers % Määrab kõik kaitseraua andmed muutujale "bumpdata"

kaitseraud = bumpdata.right || bumpdata.left || bumpdata.front % Loob erinevate kaitseraudade jaoks salvestatud muutuja „kaitseraud”

if bumpdata.right> 0 % Kui lause põhjustab kaitseraua põrkumise korral toa erinevaid funktsioone

r.stop % Peatab Roomba

r.moveDistance (-0,3, 0,2) % Tagurdab Roomba 0,3 m

r.turnAngle (90, 0,5) % Pöörab Roomba 90 kraadi nii kiiresti kui võimalik

lõpp

kui bumpdata.front> 0

r.peatus

r.moveDistance (-0,3, 0,2)

r.turnAngle (randi (270), 0,5) % Pöörab Roomba nii kiiresti kui võimalik juhusliku intervalliga vahemikus 0 kuni 270 kraadi

lõpp

kui bumpdata.left> 0

r.peatus

r.moveDistance (-0,3, 0,2)

r.turnAngle (-90, 0,5) % Pöörab Roomba -90 kraadi nii kiiresti kui võimalik

lõpp

lõpp

funktsioon lightbumper = lightcheck (r) % Loob 'lightcheck' funktsiooni

lightdata = r.getLightBumpers % Määrab kõik valgustugevuse anduri andmed muutujale 'lightdata'

kerge kaitseraud = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Loob erinevatele põrkeraudadele salvestatud muutuja „lightbumper”

kui välklamp % Kui avaldus, et helistada välklambi andmetele ülalt

kui lightdata.left> 10 % Kui lause põhjustab toa erinevate funktsioonide toimumist, kui valgus kaitseraud tunneb rohkem kui 10 väärtust

r.setDriveVelocity (0,05, 0,05) % Aeglustab Roomba liikumist, et valmistuda löögiks

end % lõpeb kui if lause

kui lightdata.rightCenter> 10

r.setDriveVelocity (0,05, 0,05)

lõpp

kui lightdata.right> 10

r.setDriveVelocity (0,05, 0,05)

lõpp

kui lightdata.leftCenter> 10

r.setDriveVelocity (0,05, 0,05)

lõpp

end % lõpetab 'lightbumper' if lause

end %lõpetab lightcheck funktsiooni

funktsioon dontFall = cliffCheck (r) % Loob funktsiooni "cliffCheck"

andmed = r.getCliffSensors; % Määrab kõik andmed kaljuandurilt muutujale 'data'

dontFall = andmed.vasak <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Loob erinevate kaljuandurite jaoks salvestatud muutuja „dontFall“

if dontFall % If avaldus, et helistada kaljuanduri andmetele ülalt

kui andmed. vasakule <1010 % Kui lause põhjustab ruumi erinevate funktsioonide toimumist, kui kaljuandur tuvastab vähem kui 1010 väärtust

r.peatus

r.moveDistance (-0,2, 0,2) % Tagurdab Roomba 0,2 m

r.turnAngle (-90, 0,5) % Pöörab Roomba -90 kraadi nii kiiresti kui võimalik

elseif data.leftFront <1010

r.peatus

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Pöörab Roomba 90 kraadi nii kiiresti kui võimalik

elseif data.rightFront <1010

r.peatus

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Pöörab Roomba 90 kraadi nii kiiresti kui võimalik

elseif andmed.õigus <1010

r.peatus

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Pöörab Roomba 90 kraadi nii kiiresti kui võimalik

lõpp

lõpp

lõpp

funktsiooni vedelikud = LiquidCheck (r) % Loob funktsiooni "LiquidCheck"

tõene %käivitab kalibreerimiseks lõpmatu tsükli

img = r.getImage; % loeb kaamera robotilt välja

image (img) % näitab pilti akna joonisel

red_mean = keskmine (keskmine (img (200, 150, 1)))% loeb punaste pikslite keskmist kogust

blue_mean = keskmine (keskmine (img (200, 150, 3))))% loeb siniste pikslite keskmist kogust

vedelikud = punane_mean || blue_mean % Loob erinevatele värvimuutujatele salvestatud muutuja vedelikud

kui vedelikud % If avaldus, et helistada pildiandmetele ülalt

kui red_mean> 170 % Kui väide põhjustab toa erinevaid funktsioone, kui kaamera näeb keskmist punast värvi üle 170

r.stop % peatab roomba

r.setLEDCenterColor (255) % määrab ringi punaseks

r.setLEDDigits (); % tühjendage ekraan

f = ooteriba (0, '*Sissetulev teade*'); % loob laadimissõnumi jaoks ooteriba

r.setLEDDigits ('KUUM'); % seab LED -ekraani väljundisse „HOT”

paus (0,5) %Lühike paus hajutatud teabe lugemiseks

r.setLEDDigits ('LAVA'); % määrab LED -ekraani väljundiks „LAVA”

paus (0,5)

ooteriba (.33, f, '*Sissetulev sõnum*'); %suurendab ooteaega

r.setLEDDigits ('KUUM');

paus (0,5)

r.setLEDDigits ('LAVA');

paus (0,5)

ooteriba (.67, f, '*Sissetulev sõnum*'); % suurendab ooteaega

r.setLEDDigits ('KUUM');

paus (0,5)

r.setLEDDigits ('LAVA');

ooteriba (1, f, '*Sissetulev sõnum*'); %täidab ooterežiimi

paus (1)

close (f) %sulgeb ooteriba

r.setLEDDigits (); % kustutab LED -ekraani

sulge kõik %Sulgeb kõik eelmised aknad

teljed ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Puhastab telgede ja diagrammi graafikuakna

y = 0,5; % määrab joonistamisaknas teksti y-positsiooni

x = 0,06; % määrab joonistamisaknas teksti x-positsiooni

title ('FROM MARS ROOMBA', 'fontsize', 32) % Lisab joonistusaknale pealkirja

quadeqtxt = 'OHTLAVA'; % Määrab muutuja 'quadeqtxt' väljundiks 0

tekst (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % kuvab joonistusaknas quadeq teksti

r.moveDistance (-0,2, 0,2) %muudab toa 0,2 m

r.turnAngle (180, 0,5) %pöörab toa nii kiiresti kui võimalik 180 kraadi

r.setLEDCenterColor (128, 128); % määrab roomba keskuse LED -i oranžiks

sulge kõik %sulgeb ülejäänud avatud aknad

elseif blue_mean> 175 % Kui väide põhjustab ruumi erinevaid funktsioone, kui kaamera näeb keskmist sinist värvi üle 175

r.stop % peatab roomba

r.setLEDCenterColor (255) % määrab ringi punaseks

r.setLEDDigits (); % tühjendage ekraan

f = ooteriba (0, '*Sissetulev teade*'); % loob laadimissõnumi jaoks ooteriba

r.setLEDDigits ('LOOK'); % määrab LED -ekraani väljundiks „LOOK”

paus (0,5) %Lühike paus hajutatud teabe lugemiseks

r.setLEDDigits ('WATR'); % määrab LED -ekraani väljundiks „WATR”

paus (0,5)

ooteriba (.33, f, '*Sissetulev sõnum*'); %suurendab ooteaega

r.setLEDDigits ('LOOK');

paus (0,5)

r.setLEDDigits ('WATR');

paus (0,5)

ooteriba (.67, f, '*Sissetulev sõnum*'); % suurendab ooteaega

r.setLEDDigits ('LOOK');

paus (0,5)

r.setLEDDigits ('WATR');

ooteriba (1, f, '*Sissetulev sõnum*'); %täidab ooterežiimi

paus (1)

close (f) %sulgeb ooteriba

r.setLEDDigits (); % kustutab LED -ekraani

sulge kõik %Sulgeb kõik eelmised aknad

teljed ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Puhastab telgede ja diagrammi graafikuakna

y = 0,5; % määrab joonistamisaknas teksti y-positsiooni

x = 0,06; % määrab joonistamisaknas teksti x-positsiooni

title ('FROM MARS ROOMBA', 'fontsize', 32) % Lisab joonistusaknale pealkirja

quadeqtxt = 'LEITUD VESI'; % Määrab muutuja 'quadeqtxt' väljundiks 0

tekst (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % kuvab joonistusaknas quadeq teksti

r.moveDistance (-0,2, 0,2) %muudab toa 0,2 m

r.turnAngle (180, 0,5) %pöörab toa nii kiiresti kui võimalik 180 kraadi

r.setLEDCenterColor (128, 128); % määrab roomba keskuse LED -i oranžiks

sulge kõik %sulgeb ülejäänud avatud aknad

end %lõpetab 'red_mean' kui lause

end %lõpetab 'vedelikud' if

lõpp % sulgub lõpmatu ajal

end % end funktsioon "LiquidCheck"

Samm: koodi käivitamine

Pärast koodi kopeerimist ja kleepimist MATLAB -i peate Roombaga ühenduse looma. Kui Roomba on ühendatud, peate nimetama muutuja r. Funktsioonid kasutavad Roombale viidates muutujat r, seega tuleb Roomba määratleda muutujana r. Pärast koodi käivitamist peaks Roomba töötama vastavalt juhistele.

Soovitan: