Sisällysluettelo:

Mars Roomba Project UTK: 4 vaihetta
Mars Roomba Project UTK: 4 vaihetta

Video: Mars Roomba Project UTK: 4 vaihetta

Video: Mars Roomba Project UTK: 4 vaihetta
Video: EF 230 Roomba Project 2024, Marraskuu
Anonim
Mars Roomba -projekti UTK
Mars Roomba -projekti UTK
Mars Roomba -projekti UTK
Mars Roomba -projekti UTK

VASTUUVAPAUSLAUSEKE: TÄMÄ TOIMII VAIN, jos ROOMBA ON ASETETTU A

TÄSTÄ OHJEESTA TENNESSEE -OPISKELIJOIDEN YLIOPISTO JA TIETEENKÄYTTÖ LUOVAT TÄMÄN TIETTYEN TAVAN

Tätä koodia käytetään asettamaan Roomba suorittamaan paikallisesti kirjoitettu ja tallennettu koodi MATLABissa. Tämä ei toimi, jos et saa tarvittavia kirjastoja Tennessee -yliopiston verkkosivustolta. Jos sinulla on kirjastot, voit käyttää niitä omien Roomba -ohjelmointiisi kirjaston toimintojen avulla. Tämä ohjekirja opettaa sinulle kirjastojen asentamisen, kansion luomisen kaikelle koodille sekä alla toimittamamme ohjelman koodaamisen ja käyttämisen.

Tarvittavat materiaalit:

· Roomba

· MATLAB

· Raspberry Pi- ja Pi -kamera

Vaihe 1: Kirjastojen hankkiminen

Suunnittelusivustolla on työkalupakki/kirjasto, lataa se ja aseta se uuteen kansioon. Tämän kansion on sisällettävä kaikki projektityötiedostot, koska minkä tahansa tekemäsi ohjelman toiminnon on viitattava kirjastoon. Kun olet tehnyt tämän, voit aloittaa ohjelmien käsittelyn

Vaihe 2: Ohjelmien kirjoittaminen

Ohjelmassa on useita toimintoja, joita voidaan käyttää komennolla "doc roomba". Näitä toimintoja käyttämällä voit ohjata Roombaasi monella eri tavalla. Alla annettu koodi käyttää törmäysantureita, valopalkki -antureita, kamera- ja kallioantureita eri tavoilla mars -roverin luomiseen. Käytimme törmäysantureita havaitsemaan, milloin Roomba osuu esineeseen, jolloin robotti peruuttaa, kääntyy ympäri ja jatkaa liikkumista. Ennen kuin Roomba osuu esineeseen, valopalkki tunnistaa kohteen ja hidastaa Roombaa niin, että kun se törmää esineeseen aktivoidakseen törmäysanturin, Roomba vahingoittuu vähemmän. Kamera etsii pinnalta vettä tai laavaa, jos nestettä ei löydy, robotti jatkaa etsintää, jos vettä löytyy, robotti lähettää viestin käyttäjille. Kalliosensorit on suunniteltu pysäyttämään robotti, jos se lähestyy kalliota. Jos robotti havaitsee kallion, se peruuttaa ja kääntyy ympäri välttääkseen putoamisen.

Vaihe 3: Koodi

Kopioi ja liitä tämä MATLAB -tiedostoon, joka sijaitsee samassa kansiossa kirjastojen kanssa

functionMainRoombaFile (r)

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

kun taas true % Infinte while loop pitää koodin käynnissä

dontFall = cliffCheck (r) % Määrittää muuttujan "dontFall" funktiolle "cliffCheck"

if dontFall % if lausunto jatkaa koodissa 'cliffCheck' jälkeen on valmis

r.setDriveVelocity (0,1, 0,1) % Pitää Roomban liikkumassa, kun cliffCheck on valmis

end % lopettaa 'dontFall' if -lauseen

puskuri = bumpcheck (r) % Määrittää muuttujan "puskuri" funktiolle "bumpcheck"

jos puskuriprosentti % jos lause jatkaa koodissa 'bumpcheck' jälkeen

r.setDriveVelocity (0,1, 0,1) % Pitää Roomban liikkumassa, kun "bumpcheck" on valmis

end % lopettaa "puskurin" if -lauseen

nesteet = LiquidCheck (r) % Määrittää muuttujan 'nesteet' toimintoon 'LiquidCheck'

jos nesteet % jos lausunto jatkaa koodissa 'LiquidCheck' jälkeen

r.setDriveVelocity (0,1, 0,1) % Pitää Roomban liikkeessä sen jälkeen, kun LiquidCheck on valmis

end % lopettaa 'nesteet' if -lauseen

lightbumper = lightcheck (r) % Määrittää muuttujan 'lightbumper' toiminnolle 'lightcheck'

tauko (0,1) % Tauko lyhyesti, jotta vältetään jatkuva silmukan iterointi

end % päättyy ääretön while -silmukkaan

end % päättyy funktio

function bumper = bumpcheck (r) % Luo 'bumpcheck' -toiminnon

bumpdata = r.getBumpers % Määrittää kaikki puskurin tiedot muuttujalle 'bumpdata'

puskuri = bumpdata.right || bumpdata.left || bumpdata.front % Luo tallennetun muuttujan "puskurin" eri puskureille

if bumpdata.right> 0 % Jos lauseke aiheuttaa roomban eri toimintoja, jos puskuri törmää

r.stop % Pysäyttää Roomban

r.moveDistance (-0,3, 0,2) % Peruuttaa Roomban 0,3 m

r.turnAngle (90, 0,5) % Kääntää Roomban 90 astetta mahdollisimman nopeasti

loppuun

jos bumpdata.front> 0

r. stop

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

r.turnAngle (randi (270), 0,5) % Kierrä Roombaa satunnaisella aikavälillä 0--270 astetta mahdollisimman nopeasti

loppuun

jos bumpdata.left> 0

r. stop

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

r.turnAngle (-90, 0,5) % Kääntää Roomba -90 astetta mahdollisimman nopeasti

loppuun

loppuun

toiminto lightbumper = lightcheck (r) % Luo lightcheck -toiminnon

lightdata = r.getLightBumpers % Määrittää kaikki valon törmäysanturin tiedot muuttujalle 'lightdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Luo tallennetun muuttujan "lightbumper" eri valopuskureille

jos valopuskuri % If -lause, joka kutsuu valopuskurin tiedot ylhäältä

jos lightdata.left> 10 % Jos lausunto aiheuttaa roomban eri toimintoja, jos valopuskuri havaitsee yli 10 arvoa

r.setDriveVelocity (0,05, 0,05) % Hidasta Roombaa valmistautumaan törmäykseen

end % loppuu, jos lause

jos lightdata.rightCenter> 10

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

loppuun

jos valotiedot.oikea> 10

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

loppuun

jos lightdata.leftCenter> 10

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

loppuun

end % lopettaa "lightbumper" -lauseen

end %päättyy lightcheck -toiminto

function dontFall = cliffCheck (r) % Luo "cliffCheck" -funktion

data = r.getCliffSensors; % Määrittää kaikki kalliosensorin tiedot muuttujalle 'data'

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Luo tallennetun muuttujan "dontFall" eri kalliosensoreille

if dontFall % If -lause kutsuaksesi kallion anturitietoja ylhäältä

jos tiedot. vasen <1010 % Jos lausunto aiheuttaa roomban eri toimintoja, jos kallioanturi havaitsee alle 1010 arvoa

r. stop

r.moveDistance (-0,2, 0,2) % Peruuttaa Roomban 0,2 m

r.turnAngle (-90, 0,5) % Kääntää Roomba -90 astetta mahdollisimman nopeasti

elseif data.leftFront <1010

r. stop

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

r.turnAngle (90, 0,5) % Kääntää Roomban 90 astetta mahdollisimman nopeasti

elseif data.rightFront <1010

r. stop

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

r.turnAngle (90, 0,5) % Kääntää Roomban 90 astetta mahdollisimman nopeasti

elseif data.right <1010

r. stop

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

r.turnAngle (90, 0,5) % Kääntää Roomban 90 astetta mahdollisimman nopeasti

loppuun

loppuun

loppuun

toiminto nesteet = LiquidCheck (r) % Luo 'LiquidCheck' -funktion

kun tosi %aloittaa äärettömän silmukan kalibrointia varten

img = r.getImage; % lukee kameran pois robotista

image (img) % näyttää kuvan kuvaikkunassa

red_mean = keskiarvo (keskiarvo (img (200, 150, 1))))% lukee punaisten pikselien keskimääräisen määrän

blue_mean = keskiarvo (keskiarvo (img (200, 150, 3))))% lukee sinisten pikselien keskimääräisen määrän

nesteet = red_mean || blue_mean % Luo tallennetun muuttujan "nesteet" eri värimuuttujille

jos nesteet % If -lause kutsua kuvatiedot ylhäältä

jos red_mean> 170 % Jos lause saa aikaan Roomban eri toimintoja, jos kamera näkee keskimääräisen punaisen värin yli 170

r.stop % pysäyttää roomban

r.setLEDCenterColor (255) % asettaa ympyrän punaiseksi

r.setLEDDigits (); % tyhjentää näytön

f = odotuspalkki (0, '*TULOSANOMA*'); % luo odotuspalkin ladattavalle viestille

r.setLEDDigits ('KUUMA'); % asettaa LED -näytön lähettämään 'HOT'

tauko (0,5) %Lyhyt tauko hylättyjen tietojen lukemiseen

r.setLEDDigits ('LAVA'); % asettaa LED -näytön lähtöön 'LAVA'

tauko (0,5)

odotuspalkki (.33, f, '*TULEVA VIESTI*'); %lisää odotuspalkkia

r.setLEDDigits ('KUUMA');

tauko (0,5)

r.setLEDDigits ('LAVA');

tauko (0,5)

odotuspalkki (.67, f, '*TULEVA VIESTI*'); % lisää odotuspalkkia

r.setLEDDigits ('KUUMA');

tauko (0,5)

r.setLEDDigits ('LAVA');

odotuspalkki (1, f, '*TULEVA VIESTI*'); %täydentää odotuspalkin

tauko (1)

close (f) %sulkee odotuspalkin

r.setLEDDigits (); % tyhjentää LED -näytön

sulje kaikki %Sulkee kaikki aiemmat ikkunat

akselit ('Väri', 'ei mitään', 'XColor', 'ei mitään', 'YVäri', 'ei mitään') % Tyhjentää akselien ja kaavion kuvaajaikkunan

y = 0,5; % asettaa tekstin y-sijainnin piirtoikkunassa

x = 0,06; % asettaa tekstin x-sijainnin piirtoikkunassa

title ('FROM MARS ROOMBA', 'fontsize', 32) % Lisää otsikon piirtämisikkunaan

quadeqtxt = 'VAARA LAVA'; % Asettaa muuttujan 'quadeqtxt' lähtöön 0

teksti (x, y, quadeqtxt, 'tulkki', 'lateksi', 'fontsize', 36); % näyttää quadeq -tekstin piirtoikkunassa

r.moveDistance (-0,2, 0,2) %kääntää roomban 0,2 m

r.turnAngle (180, 0,5) %kääntää roomban 180 astetta mahdollisimman nopeasti

r.setLEDCenterColor (128, 128); % asettaa roomban keskimmäisen LEDin oranssiksi

sulje kaikki %sulkee jäljellä olevat avoimet ikkunat

elseif blue_mean> 175 % Jos lause saa aikaan Roomban eri toimintoja, jos kamera näkee keskimääräisen sinisen värin olevan yli 175

r.stop % pysäyttää roomban

r.setLEDCenterColor (255) % asettaa ympyrän punaiseksi

r.setLEDDigits (); % tyhjentää näytön

f = odotuspalkki (0, '*TULEVA VIESTI*'); % luo odotuspalkin ladattavalle viestille

r.setLEDDigits ('LOOK'); % asettaa LED -näytön lähtöön 'LOOK'

tauko (0,5) %Lyhyt tauko hylättyjen tietojen lukemiseen

r.setLEDDigits ('WATR'); % asettaa LED -näytön lähettämään 'WATR'

tauko (0,5)

odotuspalkki (.33, f, '*TULEVA VIESTI*'); %lisää odotuspalkkia

r.setLEDDigits ('LOOK');

tauko (0,5)

r.setLEDDigits ('WATR');

tauko (0,5)

odotuspalkki (.67, f, '*TULEVA VIESTI*'); % lisää odotuspalkkia

r.setLEDDigits ('LOOK');

tauko (0,5)

r.setLEDDigits ('WATR');

odotuspalkki (1, f, '*TULEVA VIESTI*'); %täydentää odotuspalkin

tauko (1)

close (f) %sulkee odotuspalkin

r.setLEDDigits (); % tyhjentää LED -näytön

sulje kaikki %Sulkee kaikki aiemmat ikkunat

akselit ('Väri', 'ei mitään', 'XColor', 'ei mitään', 'YVäri', 'ei mitään') % Tyhjentää akselien ja kaavion kuvaajaikkunan

y = 0,5; % asettaa tekstin y-sijainnin piirtoikkunassa

x = 0,06; % asettaa tekstin x-sijainnin piirtoikkunassa

title ('FROM MARS ROOMBA', 'fontsize', 32) % Lisää otsikon piirtämisikkunaan

quadeqtxt = 'ETSITTY VESI'; % Asettaa muuttujan 'quadeqtxt' lähtöön 0

teksti (x, y, quadeqtxt, 'tulkki', 'lateksi', 'fontsize', 36); % näyttää quadeq -tekstin piirtoikkunassa

r.moveDistance (-0,2, 0,2) %kääntää roomban 0,2 m

r.turnAngle (180, 0,5) %kääntää roomban 180 astetta mahdollisimman nopeasti

r.setLEDCenterColor (128, 128); % asettaa roomban keskimmäisen LEDin oranssiksi

sulje kaikki %sulkee jäljellä olevat avoimet ikkunat

end %lopettaa "red_mean" if -lauseen

end %lopettaa 'nesteet' if -lauseen

end % sulkee äärettömän silmukan

end % päättyy toiminto 'LiquidCheck'

Vaihe 4: Koodin suorittaminen

Kun olet kopioinut ja liittänyt koodin MATLABiin, sinun on muodostettava yhteys Roombaan. Kun Roomba on yhdistetty, sinun on nimettävä muuttuja r. Toiminnot käyttävät muuttujaa r, kun viitataan Roombaan, joten Roomba on määritettävä muuttujaksi r. Koodin suorittamisen jälkeen Roomban pitäisi toimia ohjeiden mukaan.

Suositeltava: