Obsah:

Mars Roomba Project UTK: 4 kroky
Mars Roomba Project UTK: 4 kroky

Video: Mars Roomba Project UTK: 4 kroky

Video: Mars Roomba Project UTK: 4 kroky
Video: Быстрая укладка плитки на стены в санузле. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #27 2024, Listopad
Anonim
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

UPOZORNĚNÍ: TOTO BUDE FUNGOVAT POUZE, POKUD JE ROOMBA NASTAVENA A

VELMI ZVLÁŠTNÍ ZPŮSOB, TENTO NÁVOD BYL VYTVOŘEN A URČEN K POUŽITÍ UNIVERZITOU STUDENTŮ A FACULTY TENNESSEE

Tento kód slouží k nastavení robota Roomba ke spouštění místně napsaného a uloženého kódu v MATLABu. To nebude fungovat, pokud nemůžete získat potřebné knihovny z webu University of Tennessee. Pokud máte knihovny, můžete je použít k programování vlastní robota Roomba pomocí funkcí v knihovně. Tento Instructable vás naučí, jak nainstalovat knihovny, vytvořit složku pro veškerý kód a jak kódovat a používat program, který jsme poskytli níže.

Požadované materiály:

· Roomba

· MATLAB

· Raspberry Pi a Pi kamera

Krok 1: Získání knihoven

Na technické stránce je k dispozici sada nástrojů/knihovna, stáhněte si ji a umístěte do nové složky. Tato složka musí obsahovat všechny pracovní soubory projektu, protože všechny funkce použité v programu, který vytvoříte, budou muset odkazovat na knihovnu. Až to uděláte, můžete začít pracovat na svých programech

Krok 2: Psaní programů

V programu lze použít několik funkcí, k nimž lze přistupovat pomocí příkazu „doc roomba“. Pomocí těchto funkcí můžete robot Roomba ovládat mnoha různými způsoby. Níže uvedený kód používá senzory nárazu, senzory světelné lišty, kamery a útesu různými způsoby k vytvoření mars roveru. Pomocí senzorů nárazu jsme detekovali, kdy Roomba narazí na předmět, kdy se to stane, robot couvá, otočí se a pokračuje v pohybu. Než robot Roomba narazí na předmět, světelná lišta detekuje předmět a zpomalí robot Roomba, takže když narazí do objektu, aby aktivoval snímač nárazu, bude robot Roomba méně poškozen/ovlivněn nárazem. Kamera hledá vodu nebo lávu na povrchu, pokud není nalezena žádná kapalina, robot bude pokračovat v hledání, pokud je nalezena nějaká voda, robot bude operátorům hlásit. Senzory útesu jsou navrženy tak, aby zastavily robota, pokud se přiblíží k útesu. Pokud robot ucítí útes, couvne a otočí se, aby nespadl.

Krok 3: Kód

Zkopírujte to a vložte do souboru MATLAB, který je umístěn ve stejné složce jako knihovny

functionMainRoombaFile (r)

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

while true % Infinte while loop, aby byl kód spuštěn

dontFall = cliffCheck (r) % Přiřadí proměnnou 'dontFall' funkci 'cliffCheck'

if dontFall % if prohlášení pokračovat v kódu po dokončení 'cliffCheck'

r.setDriveVelocity (0,1, 0,1) % udržuje robot Roomba v pohybu po dokončení 'cliffCheck'

end % končí příkazem 'dontFall' if

bumper = bumpcheck (r) % Přiřadí proměnnou 'nárazník' funkci 'bumpcheck'

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

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

end % končí příkazem „nárazník“if

kapaliny = LiquidCheck (r) % Přiřadí proměnné 'kapaliny' funkci 'LiquidCheck'

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

r.setDriveVelocity (0,1, 0,1) % udržuje robot Roomba v pohybu po dokončení 'LiquidCheck'

end % končí příkazem 'liquids' if

lightbumper = lightcheck (r) % Přiřadí proměnnou 'lightbumper' funkci 'lightcheck'

pauza (0,1) % Krátká pauza, aby se zabránilo kontinuální iteraci smyčky

konec % končí nekonečnou smyčkou

end % ukončí funkci

funkce nárazník = bumpcheck (r) % Vytvoří funkci 'bumpcheck'

bumpdata = r.getBumpers % Přiřadí všechna data z nárazníku k proměnné 'bumpdata'

nárazník = bumpdata.right || bumpdata.left || bumpdata.front % Vytvoří uloženou proměnnou „nárazník“pro různé nárazníky

if bumpdata.right> 0 % If příkaz způsobující různé funkce roomba, pokud dojde k narážení Bumperu

r.stop % Zastaví Roomba

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

r.turnAngle (90, 0,5) % Otočí robot Roomba o 90 stupňů co nejrychleji

konec

pokud bumpdata.front> 0

r.stop

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

r.turnAngle (randi (270), 0,5) % Otáčí robotem Roomba v náhodném intervalu mezi 0 a 270 stupni co nejrychleji

konec

pokud bumpdata.left> 0

r.stop

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

r.turnAngle (-90, 0,5) % Otočí robot Roomba o 90 stupňů tak rychle, jak je to možné

konec

konec

funkce lightbumper = lightcheck (r) % Vytvoří funkci 'lightcheck'

lightdata = r.getLightBumpers % Přiřadí všechna data ze snímače světelných nárazů proměnné 'lightdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Vytvoří uloženou proměnnou „lightbumper“pro různé světelné nárazníky

if lightbumper % If příkaz k volání dat lightbumper shora

if lightdata.left> 10 % If prohlášení způsobit různé funkce roomba dojít, pokud světelný nárazník snímá více než 10 hodnot

r.setDriveVelocity (0,05, 0,05) % Zpomaluje roomba, aby se připravil na náraz

end % skončí initial if

pokud lightdata.rightCenter> 10

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

konec

pokud lightdata.right> 10

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

konec

pokud lightdata.leftCenter> 10

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

konec

end % skončí příkazem 'lightbumper' if

end %ukončí funkci lightcheck

function dontFall = cliffCheck (r) % Vytvoří funkci 'cliffCheck'

data = r.getCliffSensors; % Přiřadí všechna data ze senzoru útesu k proměnné 'data'

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Vytvoří uloženou proměnnou „dontFall“pro různé senzory útesu

if dontFall % If prohlášení pro volání dat senzoru útesu shora

if data.left <1010 % If prohlášení způsobit různé funkce roomba dojít, pokud snímač útesu snímá méně než 1010 hodnot

r.stop

r.moveDistance (-0,2, 0,2) % Obrátí Roomba 0,2 m

r.turnAngle (-90, 0,5) % Otočí robot Roomba o 90 stupňů tak rychle, jak je to možné

elseif data.leftFront <1010

r.stop

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

r.turnAngle (90, 0,5) % Otočí robot Roomba o 90 stupňů co nejrychleji

elseif data.rightFront <1010

r.stop

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

r.turnAngle (90, 0,5) % Otočí robot Roomba o 90 stupňů co nejrychleji

elseif data.right <1010

r.stop

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

r.turnAngle (90, 0,5) % Otočí robot Roomba o 90 stupňů co nejrychleji

konec

konec

konec

function liquids = LiquidCheck (r) % Vytvoří funkci 'LiquidCheck'

zatímco true %, začněte nekonečnou smyčku pro kalibraci

img = r.getImage; % čte kameru z robota

image (img) % ukazuje obrázek v okně obrázku

red_mean = průměr (průměr (obrázek (200, 150, 1)))% čte průměrné množství červených pixelů

blue_mean = průměr (průměr (obrázek (200, 150, 3)))% čte průměrné množství modrých pixelů

kapaliny = red_mean || blue_mean % Vytvoří uloženou proměnnou „kapaliny“pro různé barevné proměnné

if kapaliny % If prohlášení pro volání obrazových dat shora

if red_mean> 170 % If prohlášení způsobit různé funkce roomba dojít, pokud kamera vidí průměrnou červenou barvu větší než 170

r.stop % zastaví roomba

r.setLEDCenterColor (255) % nastaví kruh na červenou barvu

r.setLEDDigits (); % vymazat displej

f = čekací lišta (0, '*PŘÍCHOZÍ ZPRÁVA*'); % vytvoří čekací lištu pro načítání zprávy

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

pauza (0,5) %Krátká pauza k přečtení zobrazených informací

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

pauza (0,5)

čekací lišta (0,33, f, '*PŘÍCHOZÍ ZPRÁVA*'); %vytvoří nárůst na čekací liště

r.setLEDDigits ('HORKÉ');

pauza (0,5)

r.setLEDDigits ('LAVA');

pauza (0,5)

waitbar (0,67, f, '*PŘÍCHOZÍ ZPRÁVA*'); % vytvoří nárůst na čekací liště

r.setLEDDigits ('HORKÉ');

pauza (0,5)

r.setLEDDigits ('LAVA');

čekací lišta (1, f, '*PŘÍCHOZÍ ZPRÁVA*'); %dokončuje čekací lištu

pauza (1)

close (f) %zavře čekací lištu

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

zavřít všechny %Zavře všechna předchozí okna

Axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Clears the plot window of the axes and chart

y = 0,5; % nastaví polohu y textu v okně vykreslování

x = 0,06; % nastaví polohu x textu v okně vykreslování

title ('FROM MARS ROOMBA', 'fontsize', 32) % Přidá název do okna vykreslování

quadeqtxt = 'NEBEZPEČNÁ LAVA'; % Nastaví proměnnou 'quadeqtxt' na výstup 0

text (x, y, quadeqtxt, 'interpret', 'latex', 'fontsize', 36); % zobrazuje text quadeq v okně vykreslování

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

r.turnAngle (180, 0,5) %otočí roomba o 180 stupňů co nejrychleji

r.setLEDCenterColor (128, 128); % nastaví středovou diodu LED Roomba na oranžovou

zavřít všechny %zavře zbývající otevřená okna

elseif blue_mean> 175 % Pokud příkaz způsobí různé funkce roomba, pokud kamera uvidí průměrnou modrou barvu větší než 175

r.stop % zastaví roomba

r.setLEDCenterColor (255) % nastaví kruh na červenou barvu

r.setLEDDigits (); % vymazat displej

f = čekací lišta (0, '*PŘÍCHOZÍ ZPRÁVA*'); % vytvoří čekací lištu pro načítání zprávy

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

pauza (0,5) %Krátká pauza k přečtení zobrazených informací

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

pauza (0,5)

čekací lišta (0,33, f, '*PŘÍCHOZÍ ZPRÁVA*'); %vytvoří nárůst na čekací liště

r.setLEDDigits ('LOOK');

pauza (0,5)

r.setLEDDigits ('WATR');

pauza (0,5)

waitbar (0,67, f, '*PŘÍCHOZÍ ZPRÁVA*'); % vytvoří nárůst na čekací liště

r.setLEDDigits ('LOOK');

pauza (0,5)

r.setLEDDigits ('WATR');

čekací lišta (1, f, '*PŘÍCHOZÍ ZPRÁVA*'); %dokončuje čekací lištu

pauza (1)

close (f) %zavře čekací lištu

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

zavřít všechny %Zavře všechna předchozí okna

Axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Clears the plot window of the axes and chart

y = 0,5; % nastaví polohu y textu v okně vykreslování

x = 0,06; % nastaví polohu x textu v okně vykreslování

title ('FROM MARS ROOMBA', 'fontsize', 32) % Přidá název do okna vykreslování

quadeqtxt = 'NALEZENÁ VODA'; % Nastaví proměnnou 'quadeqtxt' na výstup 0

text (x, y, quadeqtxt, 'interpret', 'latex', 'fontsize', 36); % zobrazuje text quadeq v okně vykreslování

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

r.turnAngle (180, 0,5) %otočí roomba o 180 stupňů co nejrychleji

r.setLEDCenterColor (128, 128); % nastaví středovou diodu LED Roomba na oranžovou

zavřít všechny %zavře zbývající otevřená okna

end %končí příkazem 'red_mean' if

end %končí příkazem 'liquids' if

end % zavírá nekonečnou smyčku

end % ends funkce 'LiquidCheck'

Krok 4: Spuštění kódu

Poté, co zkopírujete a vložíte kód do MATLABu, musíte se připojit k Roomba. Jakmile je Roomba připojena, musíte pojmenovat proměnnou r. Funkce používají při odkazování na Roombu proměnnou r, takže Roomba musí být definována jako proměnná r. Po spuštění kódu by se robot Roomba měl spustit podle pokynů.

Doporučuje: