Obsah:
Video: Mars Roomba Project UTK: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
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:
Robot Project UTK 2017: 3 kroky
Robot Project UTK 2017: Mission: Náš tým inženýrů byl najat společností Froogle, neziskovou nadací pro vývoj technologií s otevřeným zdrojovým kódem, s cílem vyvinout inovativní týmy pro lidskou pomoc Mars Rover.-Out „rover“je roomba, kterou jsme zakódovali k provedení série
Mars Roomba: 6 kroků
Mars Roomba: Tento návod vás provede pokyny k ovládání vakuového robota Roomba ovládaného Raspberry Pi. Operační systém, který budeme používat, je prostřednictvím MATLABu
Roomba MATLAB Project: 5 kroků
Roomba MATLAB Project: Současný plán, který má NASA pro Mars rover, je, že bude sběratelem dat a bude se toulat po Marsu a sbírat vzorky půdy, které by se daly přivést zpět na Zemi, aby vědci mohli zjistit, zda na ní byly nějaké předchozí formy života planetu. Další
UTK EF 230 MarsRoomba Project Fall 2018: 5 Steps
UTK EF 230 MarsRoomba Project Fall 2018: V současné době se Mars rovery používají ke shromažďování dat na povrchu Marsu různými metodami, až ke konečnému konci, kdy se dozvíte více o potenciálu planety pro mikrobiální život. Rovers primárně používají nástroje pro fotografování a analýzu půdy pro data
Roomba Project: 5 kroků (s obrázky)
Roomba Project: Tento instruktážní program byl vytvořen v rámci splnění projektového požadavku Makecourse na University of South Florida (www.makecourse.com). Tento instruktážní program pokryje všechny potřebné kroky a komponenty potřebné k sestavení mého projektoru Roomba