Obsah:

Projekt Mars Roomba UTK: 4 kroky
Projekt Mars Roomba UTK: 4 kroky

Video: Projekt Mars Roomba UTK: 4 kroky

Video: Projekt Mars Roomba UTK: 4 kroky
Video: Мой новый 3D принтер Elegoo Mars 4 9K 2024, November
Anonim
Projekt Mars Roomba UTK
Projekt Mars Roomba UTK
Projekt Mars Roomba UTK
Projekt Mars Roomba UTK

ODMIETNUTIE VYHLÁSENIA: TOTO FUNGUJE IBA, AK JE ROOMBA ZARIADENÁ A

VEĽMI ŠPECIFICKÝ ZPÔSOB, TENTO NÁVOD NA POUŽITIE BOL VYTVORENÝ A URČENÝ NA POUŽÍVANIE UNIVERZITOU ŠTUDENTOV A FACULTEN TENNESSEE

Tento kód sa používa na nastavenie robota Roomba na spustenie lokálne zapísaného a uloženého kódu v programe MATLAB. To nebude fungovať, ak nemôžete získať potrebné knižnice z webovej stránky University of Tennessee. Ak máte knižnice, môžete ich použiť na programovanie svojej vlastnej roboty Roomba pomocou funkcií v knižnici. Tento návod vás naučí, ako nainštalovať knižnice, vytvoriť priečinok pre všetok kód a ako kódovať a používať program, ktorý sme poskytli nižšie.

Požadované materiály:

· Roomba

· MATLAB

· Raspberry Pi a Pi kamera

Krok 1: Získanie knižníc

Na webovej stránke inžinierstva je k dispozícii súbor nástrojov/knižnica, stiahnite si ho a umiestnite do nového priečinka. Tento priečinok musí obsahovať všetky pracovné súbory k projektu, pretože všetky funkcie použité v programe, ktorý vytvoríte, budú musieť odkazovať na knižnicu. Potom, čo ste to urobili, môžete začať pracovať na svojich programoch

Krok 2: Písanie programov

V programe je možné použiť niekoľko funkcií, ku ktorým je možné získať prístup pomocou príkazu „doc roomba“. Pomocou týchto funkcií môžete ovládať svoju Roombu mnohými rôznymi spôsobmi. Nasledujúci kód používa na vytvorenie mars roveru senzory nárazu, senzory svetelnej lišty, kamery a útesu rôznymi spôsobmi. Pomocou senzorov nárazu sme zistili, kedy robot Roomba narazí na predmet, keď sa to stane, robot cúvne, otočí sa a pokračuje v pohybe. Predtým, ako robot Roomba narazí na predmet, svetelná lišta detekuje predmet a spomalí robot Roomba, takže keď narazí do objektu, aby aktivoval snímač nárazov, robot Roomba bude menej poškodený/ovplyvnený nárazom. Kamera hľadá vodu alebo lávu na povrchu, ak nie je nájdená žiadna kvapalina, robot bude pokračovať v hľadaní, ak sa tam nájde voda, robot pošle správu operátorom. Senzory útesu sú navrhnuté tak, aby zastavili robota, ak sa priblíži k útesu. Ak robot zaznamená útes, cúvne a otočí sa, aby nespadol.

Krok 3: Kód

Skopírujte to a prilepte do súboru MATLAB, ktorý sa nachádza v rovnakom priečinku ako knižnice

functionMainRoombaFile (r)

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

while true % Infinte while loop, aby bol kód spustený

dontFall = cliffCheck (r) % Priradí premennú 'dontFall' k funkcii 'cliffCheck'

if dontFall % if vyhlásenie pokračovať v kóde po 'cliffCheck' je dokončený

r.setDriveVelocity (0,1, 0,1) % udržuje robota Roomba v pohybe aj po dokončení „cliffCheck“

end % skončí príkaz 'dontFall' if

bumper = bumpcheck (r) % Priradí premennú 'bumper' k funkcii 'bumpcheck'

if bumper % if statement to continue in code after 'bumpcheck' is complete

r.setDriveVelocity (0,1, 0,1) % udržuje robot Roomba v pohybe aj po dokončení „bumpcheck“

end % skončí príkaz „nárazník“if

liquids = LiquidCheck (r) % Priradí premenné 'liquids' k funkcii 'LiquidCheck'

if liquids % if statement to continue in code after 'LiquidCheck' is complete

r.setDriveVelocity (0,1, 0,1) % udržuje robot Roomba v pohybe aj po dokončení „LiquidCheck“

end % končí príkazom 'liquids' if

lightbumper = lightcheck (r) % Priradí premennú 'lightbumper' k funkcii 'lightcheck'

pauza (0,1) % Krátka pauza, aby sa zabránilo nepretržitej iterácii slučky

koniec % končí nekonečnou slučkou

end % ukončí funkciu

funkcia nárazník = bumpcheck (r) % Vytvorí funkciu 'bumpcheck'

bumpdata = r.getBumpers % Priradí všetky údaje z nárazníka k premennej 'bumpdata'

nárazník = bumpdata.right || bumpdata.left || bumpdata.front % Vytvorí uloženú premennú „nárazník“pre rôzne nárazníky

ak bumpdata.right> 0 % Ak príkaz, ktorý spôsobí rôzne funkcie roomba, ak dôjde k nárazu na nárazník

r.stop % Zastaví Roomba

r.moveDistance (-0,3, 0,2) % obráti Roomba o 0,3 m

r.turnAngle (90, 0,5) % Otočí robota Roomba o 90 stupňov čo najrýchlejšie

koniec

ak bumpdata.front> 0

r.stop

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

r.turnAngle (randi (270), 0,5) % Otáča robotom Roomba v náhodnom intervale medzi 0 a 270 stupňami čo najrýchlejšie

koniec

ak bumpdata.left> 0

r.stop

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

r.turnAngle (-90, 0,5) % Otočí robota Roomba o 90 stupňov čo najrýchlejšie

koniec

koniec

funkcia lightbumper = lightcheck (r) % Vytvorí funkciu „lightcheck“

lightdata = r.getLightBumpers % Priradí všetky údaje zo senzora svetelných nárazov k premennej „lightdata“

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Vytvorí uloženú premennú „lightbumper“pre rôzne svetelné nárazníky

if lightbumper % If príkaz na vyvolanie údajov lightbumper zhora

if lightdata.left> 10 % If statement to cause different functions of the roomba if if the light bumper zmysly more than 10 values

r.setDriveVelocity (0,05, 0,05) % Spomaľuje roomba, aby sa pripravil na náraz

end % skončí počiatočný príkaz if

ak lightdata.rightCenter> 10

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

koniec

ak lightdata.right> 10

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

koniec

ak lightdata.leftCenter> 10

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

koniec

end % ukončí príkaz „lightbumper“if

end %ukončí funkciu lightcheck

function dontFall = cliffCheck (r) % Vytvorí funkciu 'cliffCheck'

data = r.getCliffSensors; % Priradí všetky údaje zo senzora útesu k premennej „údaje“

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Vytvorí uloženú premennú „dontFall“pre rôzne snímače útesu

if dontFall % If príkaz na vyvolanie údajov senzora útesu zhora

if data.left <1010 % If statement to cause different functions of the roomba, if the cliff sensor senses less than 1010 values

r.stop

r.moveDistance (-0,2, 0,2) % obráti Roomba 0,2 m

r.turnAngle (-90, 0,5) % Otočí robota Roomba o 90 stupňov čo najrýchlejšie

elseif data.leftFront <1010

r.stop

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

r.turnAngle (90, 0,5) % Otočí robota Roomba o 90 stupňov čo najrýchlejšie

elseif data.rightFront <1010

r.stop

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

r.turnAngle (90, 0,5) % Otočí robot Roomba o 90 stupňov čo najrýchlejšie

elseif údaje.vpravo <1010

r.stop

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

r.turnAngle (90, 0,5) % Otočí robot Roomba o 90 stupňov čo najrýchlejšie

koniec

koniec

koniec

function liquids = LiquidCheck (r) % Vytvorí funkciu 'LiquidCheck'

zatiaľ čo pravda %, začnite nekonečnú slučku na kalibráciu

img = r.getImage; % číta kameru mimo robota

image (img) % zobrazuje obrázok v okne obrázku

red_mean = priemer (priemer (obrázok (200, 150, 1)))% znamená priemerný počet červených pixelov

blue_mean = priemer (priemer (obrázok (200, 150, 3)))% znamená priemerný počet modrých pixelov

kvapaliny = red_mean || blue_mean % Vytvorí uloženú premennú „kvapaliny“pre rôzne farebné premenné

ak kvapaliny % If vyhlásenie na vyvolanie obrazových údajov zhora

ak red_mean> 170 % Ak vyhlásenie spôsobujúce rôzne funkcie robota roomba, ak kamera vidí priemernú červenú farbu väčšiu ako 170

r.stop % zastaví roomba

r.setLEDCenterColor (255) % nastaví kruh na červenú farbu

r.setLEDDigits (); % vymazať displej

f = čakacia lišta (0, '*PRÍJEMNÁ SPRÁVA*'); % vytvorí čakaciu lištu pre správu o načítaní

r.setLEDDigits ('HORKÉ'); % nastaví LED displej na výstup „HORKÝ“

pauza (0,5) %Krátka prestávka na prečítanie zobrazených informácií

r.setLEDDigits ('LAVA'); % nastaví LED displej na výstup „LAVA“

pauza (0,5)

čakacia lišta (0,33, f, '*PRÍCHODOVÁ SPRÁVA*'); %spôsobí zvýšenie čakacej lišty

r.setLEDDigits ('HORKÉ');

pauza (0,5)

r.setLEDDigits ('LAVA');

pauza (0,5)

čakacia lišta (0,67, f, '*PRÍCHODOVÁ SPRÁVA*'); % spôsobí zvýšenie čakacej lišty

r.setLEDDigits ('HORKÉ');

pauza (0,5)

r.setLEDDigits ('LAVA');

čakacia lišta (1, f, '*PRÍCHODOVÁ SPRÁVA*'); %dokončí čakaciu lištu

pauza (1)

close (f) %zatvorí čakaciu lištu

r.setLEDDigits (); % vymaže LED displej

zavrieť všetky %Zatvorí všetky predchádzajúce okná

osi ('Farba', 'žiadna', 'XColor', 'žiadna', 'YColor', 'žiadna') % Vymaže okno vykresľovania osí a grafu

y = 0,5; % nastaví polohu y textu v okne vykresľovania

x = 0,06; % nastaví pozíciu x textu v okne vykresľovania

title ('FROM MARS ROOMBA', 'fontsize', 32) % Pridá názov do okna vykresľovania

quadeqtxt = 'NEBEZPEČENSTVO LAVA'; % Nastaví premennú 'quadeqtxt' na výstup 0

text (x, y, quadeqtxt, 'interpret', 'latex', 'veľkosť písma', 36); % zobrazuje text quadeq v okne vykresľovania

r.moveDistance (-0,2, 0,2) %obráti roomba o 0,2 m

r.turnAngle (180, 0,5) %otočí robota Roomba o 180 stupňov čo najrýchlejšie

r.setLEDCenterColor (128, 128); % nastaví strednú diódu LED Roomba na oranžovú

zavrieť všetky %zavrie zostávajúce otvorené okná

elseif blue_mean> 175 % Ak vyhlásenie spôsobí rôzne funkcie robota roomba, ak kamera uvidí priemernú modrú farbu väčšiu ako 175

r.stop % zastaví roomba

r.setLEDCenterColor (255) % nastaví kruh na červenú farbu

r.setLEDDigits (); % vymazať displej

f = čakacia lišta (0, '*PRÍJEMNÁ SPRÁVA*'); % vytvorí čakaciu lištu pre správu o načítaní

r.setLEDDigits ('LOOK'); % nastaví LED displej na výstup „LOOK“

pauza (0,5) %Krátka prestávka na prečítanie zobrazených informácií

r.setLEDDigits ('WATR'); % nastaví LED displej na výstup „WATR“

pauza (0,5)

čakacia lišta (0,33, f, '*PRÍCHODOVÁ SPRÁVA*'); %spôsobí zvýšenie čakacej lišty

r.setLEDDigits ('LOOK');

pauza (0,5)

r.setLEDDigits ('WATR');

pauza (0,5)

čakacia lišta (0,67, f, '*PRÍCHODOVÁ SPRÁVA*'); % spôsobí zvýšenie čakacej lišty

r.setLEDDigits ('LOOK');

pauza (0,5)

r.setLEDDigits ('WATR');

čakacia lišta (1, f, '*PRÍCHODOVÁ SPRÁVA*'); %dokončí čakaciu lištu

pauza (1)

close (f) %zatvorí čakaciu lištu

r.setLEDDigits (); % vymaže LED displej

zavrieť všetky %Zatvorí všetky predchádzajúce okná

osi ('Farba', 'žiadna', 'XColor', 'žiadna', 'YColor', 'žiadna') % Vymaže okno vykresľovania osí a grafu

y = 0,5; % nastaví polohu y textu v okne vykresľovania

x = 0,06; % nastaví pozíciu x textu v okne vykresľovania

title ('FROM MARS ROOMBA', 'fontsize', 32) % Pridá názov do okna vykresľovania

quadeqtxt = 'NAJDENÁ VODA'; % Nastaví premennú 'quadeqtxt' na výstup 0

text (x, y, quadeqtxt, 'interpret', 'latex', 'veľkosť písma', 36); % zobrazuje text quadeq v okne vykresľovania

r.moveDistance (-0,2, 0,2) %obráti roomba o 0,2 m

r.turnAngle (180, 0,5) %otočí robota Roomba o 180 stupňov čo najrýchlejšie

r.setLEDCenterColor (128, 128); % nastaví strednú diódu LED Roomba na oranžovú

zavrieť všetky %zavrie zostávajúce otvorené okná

end %skončí príkaz 'red_mean' if

end %končí príkazom 'liquids' if

end % zatvára nekonečnú slučku

end % ends funkciu 'LiquidCheck'

Krok 4: Spustenie kódu

Po skopírovaní a vložení kódu do MATLAB sa musíte pripojiť k Roomba. Po pripojení robota Roomba musíte pomenovať premennú r. Funkcie používajú pri odkazovaní na Roomba premennú r, takže Roomba musí byť definovaná ako premenná r. Po spustení kódu by sa robot Roomba mal spustiť podľa pokynov.

Odporúča: