Sisällysluettelo:
- Vaihe 1: Kirjastojen hankkiminen
- Vaihe 2: Ohjelmien kirjoittaminen
- Vaihe 3: Koodi
- Vaihe 4: Koodin suorittaminen
Video: Mars Roomba Project UTK: 4 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
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:
Roomban muuttaminen Mars Roveriksi: 5 vaihetta
Roomban muuttaminen Mars Roveriksi:
Robottiprojekti UTK 2017: 3 vaihetta
Robottiprojekti UTK 2017: Tehtävä: Froogle, joka on avoimen lähdekoodin teknologian kehittämisen voittoa tavoittelematon säätiö, on palkannut insinööritiimimme kehittämään innovatiivisen Human Assisting Mars Rover.-Out -tiimin " rover " on roomba, jonka koodasimme suorittamaan sarjan
Mars Rover Raspberry Pi: n avulla: 5 vaihetta
Mars Rover Raspberry Pi: llä: Rakas kaikki suuri oppija, olen aina utelias tietämään mars -roverista, jolla on 6 pyörää, jotka voivat kulkea Marsin koko pinnalle ja tutkia asioita Maasta. Haluan myös tutkia asiaa istumalla kannettavalle tietokoneelleni. Joten nyt on mielestäni oikea aika tehdä se ja
Mars Roomba: 6 vaihetta
Mars Roomba: Tämä opastettava opastaa sinua Raspberry Pi -ohjatun Roomba -tyhjiöbotin käytön suuntiin. Käyttämämme käyttöjärjestelmä on MATLABin kautta
UTK EF 230 MarsRoomba -hanke syksyllä 2018: 5 vaihetta
UTK EF 230 MarsRoomba -hanke syksyllä 2018: Tällä hetkellä Mars -rovereita käytetään tietojen keräämiseen Marsin pinnalla eri menetelmillä, jotta voimme oppia lisää planeetan mahdollisuuksista mikrobielämään. Rovers käyttävät pääasiassa valokuvaus- ja maaperäanalyysityökaluja datan c