INHOUDSOPGAWE:

Mars Roomba -projek UTK: 4 stappe
Mars Roomba -projek UTK: 4 stappe

Video: Mars Roomba -projek UTK: 4 stappe

Video: Mars Roomba -projek UTK: 4 stappe
Video: Дневник хранящий жуткие тайны. Переход. Джеральд Даррелл. Мистика. Ужасы 2024, November
Anonim
Mars Roomba -projek UTK
Mars Roomba -projek UTK
Mars Roomba -projek UTK
Mars Roomba -projek UTK

VRYWARING: DIT SAL SLEGS WERK AS DIE ROOMBA IN A opgerig word

BAIE SPESIFIEKE MANIERE, HIERDIE INSTRUKTIESE WORD GESKEP EN VIR DIE BEDOELING GEBRUIK DEUR DIE UNIVERSITEIT VAN TENNESSEE STUDENTE EN FAKULTEIT

Hierdie kode word gebruik om 'n Roomba op te stel om plaaslik geskrewe en gestoorde kode in MATLAB te laat loop. Dit sal nie werk as u nie die nodige biblioteke van die Universiteit van Tennessee se webwerf kan kry nie. As u die biblioteke het, kan u dit gebruik om u eie Roomba te programmeer met behulp van die funksies in die biblioteek. Hierdie instruksie leer u hoe u die biblioteke moet installeer, 'n gids vir al die kode kan skep en hoe u die program wat ons hieronder verskaf het, kan kodeer en gebruik.

Vereiste materiaal:

· Roomba

· MATLAB

· Framboos Pi en Pi kamera

Stap 1: Kry die biblioteke

Op die ingenieurswebwerf is daar 'n gereedskapskas/biblioteek, laai dit af en plaas dit in 'n nuwe gids. Hierdie gids moet alle projekwerklêers bevat, aangesien enige funksie wat in 'n program gebruik word, na die biblioteek moet verwys. Nadat u dit gedoen het, kan u aan u programme begin werk

Stap 2: Skryf van die programme

Daar is 'n hele paar funksies wat in die program gebruik kan word, u kan toegang tot hierdie funksies kry met die opdrag "doc roomba". Deur hierdie funksies te gebruik, kan u u Roomba op baie verskillende maniere beheer. Die onderstaande kode gebruik die stampsensors, ligstaafsensors, kamera- en kransensors op verskillende maniere om 'n mars -rover te skep. Ons het die stampsensors gebruik om op te spoor wanneer die Roomba 'n voorwerp raak, wanneer dit gebeur, sal die robot omdraai, omdraai en aanhou beweeg. Voordat die Roomba 'n voorwerp tref, sal die ligstaaf die voorwerp opspoor en die Roomba vertraag sodat wanneer dit teen die voorwerp stamp om die stampsensor te aktiveer, die Roomba minder beskadig/geraak sal word deur die impak. Die kamera soek na water of lawa op die oppervlak, as daar geen vloeistof gevind word nie, sal die robot voortgaan om te soek; as daar water is, sal die robot 'n boodskap aan die operateurs stuur. Die kransensors is ontwerp om die robot te stop as dit 'n krans nader. As die robot 'n krans waarneem, sal dit omdraai en omdraai om te voorkom dat hy val.

Stap 3: Kodeer

Kopieer en plak dit in 'n MATLAB -lêer wat in dieselfde gids as die biblioteke geleë is

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

terwyl ware % Infinte terwyl lus om kode aan die gang te hou

dontFall = cliffCheck (r) % Ken veranderlike 'dontFall' toe aan die funksie 'cliffCheck'

if dontFall % as verklaring om in kode voort te gaan nadat 'cliffCheck' voltooi is

r.setDriveVelocity (0.1, 0.1) % Hou Roomba aan die gang nadat 'cliffCheck' voltooi is

end % eindig 'dontFall' if verklaring

bumper = bumpcheck (r) % Ken veranderlike 'bumper' toe aan die funksie 'bumpcheck'

as bumper % as die stelling in die kode moet voortgaan nadat 'bumpcheck' voltooi is

r.setDriveVelocity (0.1, 0.1) % Hou Roomba aan die gang nadat 'bumpcheck' voltooi is

eind % eindig 'bumper' as verklaring

liquids = LiquidCheck (r) % Ken veranderlike 'vloeistowwe' toe aan die funksie 'LiquidCheck'

as vloeistowwe % as verklaring om in kode voort te gaan nadat 'LiquidCheck' voltooi is

r.setDriveVelocity (0.1, 0.1) % Hou Roomba aan die gang nadat 'LiquidCheck' voltooi is

eind % eindig 'vloeistowwe' as verklaring

lightbumper = lightcheck (r) % Ken veranderlike 'lightbumper' toe aan die funksie 'lightcheck'

pouse (0.1) % Onderbreek kortliks om deurlopende herhaling van lusse te voorkom

eind % eindig oneindig terwyl lus

eind % eindig funksie

funksie bumper = bumpcheck (r) % Skep 'bumpcheck' -funksie

bumpdata = r.getBumpers % Ken alle data van die buffer toe aan veranderlike 'bumpdata'

bumper = bumpdata.right || bumpdata.links || bumpdata.front % Skep 'n gestoorde veranderlike, 'bumper', vir die verskillende bumpers

as bumpdata.right> 0 % Indien verklaring verskillende funksies van die roomba laat gebeur as Bumper gestamp word

r.stop % Stop Roomba

r.moveDistance (-0.3, 0.2) % keer Roomba 0.3m om

r.turnAngle (90, 0.5) % Draai Roomba 90 grade so vinnig as moontlik

einde

as bumpdata.front> 0

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % Draai Roomba so vinnig as moontlik tussen 'n willekeurige interval tussen 0 en 270 grade

einde

as bumpdata.left> 0

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Draai Roomba -90 grade so vinnig as moontlik

einde

einde

funksie lightbumper = lightcheck (r) % Skep 'lightcheck' -funksie

lightdata = r.getLightBumpers % Ken alle data van die light bump sensor toe aan veranderlike 'lightdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Skep 'n gestoorde veranderlike, 'lightbumper', vir die verskillende ligbumpers

if lightbumper % If verklaring om die lightbumper data van bo af te roep

as lightdata.left> 10 % As verklaring verskillende funksies van die roomba laat gebeur as die ligbuffer groter as 10 waardes voel

r.setDriveVelocity (0,05, 0,05) % Vertraag roomba om voor te berei op stamp

eind % eindig aanvanklike as verklaring

as lightdata.rightCenter> 10

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

einde

as lightdata.right> 10

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

einde

as lightdata.leftCenter> 10

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

einde

end % eindig 'lightbumper' as verklaring

end %eindig lightcheck -funksie

function dontFall = cliffCheck (r) % Skep 'cliffCheck' -funksie

data = r.getCliffSensors; Ken alle data van die kransensor toe aan veranderlike 'data'

dontFall = data.links <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Skep 'n gestoorde veranderlike, 'dontFall', vir die verskillende kransensors

if dontFall % If verklaring om die kransensordata van bo af te roep

as data.links <1010 % As verklaring om verskillende funksies van die roomba te laat plaasvind as die kransensor minder as 1010 waardes waarneem

r.stop

r.moveDistance (-0.2, 0.2) % keer Roomba 0.2m om

r.turnAngle (-90, 0.5) % Draai Roomba -90 grade so vinnig as moontlik

elseif data.leftFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Draai Roomba 90 grade so vinnig as moontlik

elseif data.rightFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Draai Roomba 90 grade so vinnig as moontlik

andersif data.right <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Draai Roomba 90 grade so vinnig as moontlik

einde

einde

einde

funksie vloeistowwe = LiquidCheck (r) % Skep 'LiquidCheck' -funksie

terwyl ware %oneindige lus begin vir kalibrasie

img = r.getImage; % lees die kamera van die robot af

beeld (img) % toon die beeld in 'n figuurvenster

red_mean = gemiddelde (gemiddelde (img (200, 150, 1)))% lees die gemiddelde hoeveelheid rooi pixels

blue_mean = gemiddelde (gemiddelde (img (200, 150, 3))))% lees die gemiddelde hoeveelheid blou pixels

vloeistowwe = rooi_middel || blue_mean % Skep 'n gestoorde veranderlike, 'vloeistowwe', vir die verskillende kleurveranderlikes

as vloeistowwe % If verklaring om die beelddata van bo af te roep

as red_mean> 170 % As verklaring verskillende funksies van die roomba laat gebeur as die kamera 'n gemiddelde rooi kleur van meer as 170 sien

r.stop % stop roomba

r.setLEDCenterColor (255) % stel die sirkel in rooi

r.setLEDDigits (); maak die skerm skoon

f = wagbalk (0, '*INKOMENDE Boodskap*'); % skep 'n wagbalk vir 'n laaiboodskap

r.setLEDDigits ('HOT'); % stel die LED -skerm op 'warm' uit

pouse (0.5) %Kort pouse om inligting te lees wat versprei word

r.setLEDDigits ('LAVA'); % stel LED -skerm op 'LAVA' uit

pouse (0,5)

wagbalk (.33, f, '*INKOMENDE Boodskap*'); %skep 'n toename in die wagbalk

r.setLEDDigits ('HOT');

pouse (0,5)

r.setLEDDigits ('LAVA');

pouse (0,5)

wagbalk (.67, f, '*INKOMENDE Boodskap*'); % skep 'n toename in die wagbalk

r.setLEDDigits ('HOT');

pouse (0,5)

r.setLEDDigits ('LAVA');

wagbalk (1, f, '*INKOMENDE Boodskap*'); %voltooi die wagbalk

pouse (1)

sluit (f) %sluit die wagbalk

r.setLEDDigits (); % maak die LED -skerm skoon

sluit alle %Sluit alle vorige vensters

asse ('Kleur', 'geen', 'XColor', 'geen', 'YColor', 'geen') % Maak die plotvenster van die asse en grafiek skoon

y = 0,5; % stel die y-posisie van die teks in die plotvenster in

x = 0,06; % stel die x-posisie van die teks in die plotvenster in

title ('FROM MARS ROOMBA', 'fontsize', 32) % Voeg 'n titel by die plotvenster

quadeqtxt = 'GEVAAR LAVA'; % Stel die veranderlike 'quadeqtxt' in op 0

teks (x, y, quadeqtxt, 'tolk', 'latex', 'lettergrootte', 36); % vertoon die quadeq -teks in die plotvenster

r.moveDistance (-0.2, 0.2) %keer die roomba 0.2m om

r.turnAngle (180, 0.5) %draai die roomba 180 grade so vinnig as moontlik

r.setLEDCenterColor (128, 128); % stel die roomba sentrum LED op oranje

sluit alle %sluit die oorblywende oop vensters

elseif blue_mean> 175 % As verklaring om verskillende funksies van die roomba te laat plaasvind as die kamera 'n gemiddelde blou kleur van groter as 175 sien

r.stop % stop roomba

r.setLEDCenterColor (255) % stel die sirkel in rooi

r.setLEDDigits (); maak die skerm skoon

f = wagbalk (0, '*INKOMENDE Boodskap*'); % skep 'n wagbalk vir 'n laaiboodskap

r.setLEDDigits ('KYK'); % stel LED -skerm op 'LOOK' uit

pouse (0.5) %Kort pouse om inligting te lees wat versprei word

r.setLEDDigits ('WATR'); % stel LED -skerm op om 'WATR' uit te voer

pouse (0,5)

wagbalk (.33, f, '*INKOMENDE Boodskap*'); %skep 'n toename in die wagbalk

r.setLEDDigits ('KYK');

pouse (0,5)

r.setLEDDigits ('WATR');

pouse (0,5)

wagbalk (.67, f, '*INKOMENDE Boodskap*'); % skep 'n toename in die wagbalk

r.setLEDDigits ('KYK');

pouse (0,5)

r.setLEDDigits ('WATR');

wagbalk (1, f, '*INKOMENDE Boodskap*'); %voltooi die wagbalk

pouse (1)

sluit (f) %sluit die wagbalk

r.setLEDDigits (); % maak die LED -skerm skoon

sluit alle %Sluit alle vorige vensters

asse ('Kleur', 'geen', 'XColor', 'geen', 'YColor', 'geen') % Maak die plotvenster van die asse en grafiek skoon

y = 0,5; % stel die y-posisie van die teks in die plotvenster in

x = 0,06; % stel die x-posisie van die teks in die plotvenster in

title ('FROM MARS ROOMBA', 'fontsize', 32) % Voeg 'n titel by die plotvenster

quadeqtxt = 'VOND WATER'; % Stel die veranderlike 'quadeqtxt' in op 0

teks (x, y, quadeqtxt, 'tolk', 'latex', 'lettergrootte', 36); % vertoon die quadeq -teks in die plotvenster

r.moveDistance (-0.2, 0.2) %keer die roomba 0.2m om

r.turnAngle (180, 0.5) %draai die roomba 180 grade so vinnig as moontlik

r.setLEDCenterColor (128, 128); % stel die roomba sentrum LED op oranje

sluit alle %sluit die oorblywende oop vensters

eind %eindig 'red_mean' if verklaring

eind %eindig 'vloeistowwe' as verklaring

eind % sluit oneindig terwyl lus

eind % eindig funksie 'LiquidCheck'

Stap 4: Gebruik die kode

Nadat u die kode in MATLAB gekopieer en geplak het, moet u aan die Roomba koppel. Sodra die Roomba gekoppel is, moet u die veranderlike r noem. Die funksies gebruik die veranderlike r wanneer daar na die Roomba verwys word, dus die Roomba moet gedefinieer word as die veranderlike r. Nadat die kode uitgevoer is, moet die Roomba werk soos aangedui.

Aanbeveel: