Taula de continguts:

Projecte Mars Roomba UTK: 4 passos
Projecte Mars Roomba UTK: 4 passos

Vídeo: Projecte Mars Roomba UTK: 4 passos

Vídeo: Projecte Mars Roomba UTK: 4 passos
Vídeo: Дневник хранящий жуткие тайны. Переход. Джеральд Даррелл. Мистика. Ужасы 2024, Desembre
Anonim
Projecte Mars Roomba UTK
Projecte Mars Roomba UTK
Projecte Mars Roomba UTK
Projecte Mars Roomba UTK

EXCLUSIÓ DE RESPONSABILITAT: AQUEST FUNCIONAMENT NOMÉS SI LA ROOMBA ESTÀ CONFIGURADA EN A

UNA MANERA MOLT ESPECÍFICA, AQUEST INSTRUCTABLE VA SER CREAT I INTENCIONAT PER A LA UTILITZACIÓ I LA FACULTAT DE LA UNIVERSITAT DE TENNESSEE

Aquest codi s'utilitza per configurar un Roomba per executar codi escrit i desat localment a MATLAB. Això no funcionarà si no podeu obtenir les biblioteques necessàries del lloc web de la Universitat de Tennessee. Si teniu les biblioteques, podreu utilitzar-les per programar el vostre propi Roomba mitjançant les funcions de la biblioteca. Aquest instructable us ensenya a instal·lar les biblioteques, a crear una carpeta per a tot el codi i a codificar i utilitzar el programa que us proporcionem a continuació.

Materials requerits:

· Roomba

· MATLAB

· Càmera Raspberry Pi i Pi

Pas 1: Obtenir les biblioteques

Al lloc web d'enginyeria hi ha una caixa d'eines / biblioteca proporcionada, descarregueu-la i col·loqueu-la en una carpeta nova. Aquesta carpeta ha de contenir tots els fitxers de treball del projecte, ja que qualsevol funció que utilitzeu en un programa que creeu haurà de referir-se a la biblioteca. Un cop fet això, podeu començar a treballar en els vostres programes

Pas 2: escriure els programes

Hi ha moltes funcions que es poden utilitzar al programa, a les quals es pot accedir mitjançant aquestes funcions mitjançant l'ordre "doc roomba". Mitjançant aquestes funcions, podeu controlar el Roomba de moltes maneres diferents. El codi que es mostra a continuació utilitza els sensors de cops, els sensors de la barra de llum, la càmera i els sensors de penya-segats de diferents maneres per crear un rover de Marte. Hem utilitzat els sensors de cops per detectar quan el Roomba colpeja un objecte, quan això passa, el robot invertirà, girarà i continuarà movent-se. Abans que Roomba toqui un objecte, la barra de llum detectarà l'objecte i alentirà el Roomba, de manera que quan toqui l'objecte per activar el sensor de cops, Roomba es veurà menys danyat / afectat per l'impacte. La càmera busca aigua o lava a la superfície, si no es troba líquid, el robot continuarà buscant, si hi ha aigua, el robot enviarà un missatge als operadors. Els sensors de penya-segats estan dissenyats per aturar el robot si s’acosta a un penya-segat. Si el robot detecta un penya-segat, invertirà i girarà per evitar caure.

Pas 3: Codi

Copieu-lo i enganxeu-lo en un fitxer MATLAB que es troba a la mateixa carpeta que les biblioteques

functionMainRoombaFile (r)

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

while true% Infinte while loop per mantenir el codi en execució

dontFall = cliffCheck (r)% Assigna la variable 'dontFall' a la funció 'cliffCheck'

si dontFall% if la instrucció per continuar al codi després de completar 'cliffCheck'

r.setDriveVelocity (0,1, 0,1)% Manté Roomba en moviment després que s'hagi completat 'cliffCheck'

end% termina la sentència "dontFall" if

bumper = bumpcheck (r)% Assigna la variable "bumper" a la funció "bumpcheck"

if bumper% if sentència per continuar al codi després que s'hagi completat 'bumpcheck'

r.setDriveVelocity (0,1, 0,1)% Manté Roomba en moviment després que s'hagi completat el "bumpcheck"

end% acaba la declaració "bumper" if

liquids = LiquidCheck (r)% Assigna una variable "liquids" a la funció "LiquidCheck"

if liquids% if sentència per continuar en codi després que s'hagi completat 'LiquidCheck'

r.setDriveVelocity (0,1, 0,1)% Manté Roomba en moviment després que s'hagi completat 'LiquidCheck'

end% acaba la declaració 'liquids' if

lightbumper = lightcheck (r)% Assigna la variable "lightbumper" a la funció "lightcheck"

pausa (0,1)% Pausa breu per evitar la iteració de bucle continu

end% acaba infinit mentre el bucle

funció final de% ends

function bumper = bumpcheck (r)% Crea la funció 'bumpcheck'

bumpdata = r.getBumpers% Assigna totes les dades del bumper a la variable 'bumpdata'

bumper = bumpdata.right || bumpdata.left || bumpdata.front% Crea una variable emmagatzemada, "bumper", per als diferents bumper

si bumpdata.right> 0% Si la sentència provoca que funcions diferents de roomba succeeixin si Bumper està topat

r.stop% Atura Roomba

r.moveDistance (-0,3, 0,2)% Inverteix Roomba 0,3 m

r.turnAngle (90, 0,5)% Gira Roomba 90 graus el més ràpid possible

final

si bumpdata.front> 0

r. aturar-se

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

r.turnAngle (randi (270), 0,5)% Gira Roomba a un interval aleatori entre 0 i 270 graus el més ràpid possible

final

si bumpdata.left> 0

r. aturar-se

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

r.turnAngle (-90, 0,5)% Gira Roomba -90 graus el més ràpid possible

final

final

funció lightbumper = lightcheck (r)% Crea la funció "lightcheck"

lightdata = r.getLightBumpers% Assigna totes les dades del sensor de cops de llum a la variable "lightdata"

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter% Crea una variable emmagatzemada, "lightbumper", per als diferents para-xocs de llum

instrucció if lightbumper% If per trucar a les dades lightbumper des de dalt

si lightdata.left> 10% Si la sentència provoca diferents funcions de la sala si el para-xocs de llum detecta més de 10 valors

r.setDriveVelocity (0,05, 0,05)% Alenteix roomba per preparar-se per al cop

final% finalitza la sentència inicial if

si lightdata.rightCenter> 10

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

final

si lightdata.right> 10

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

final

si lightdata.leftCenter> 10

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

final

end% termina "lightbumper" if sentència

end% finalitza la funció lightcheck

funció dontFall = cliffCheck (r)% Crea la funció 'cliffCheck'

dades = r.getCliffSensors; % Assigna totes les dades del sensor de penya-segat a la variable "dades"

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020% Crea una variable emmagatzemada, "dontFall", per als diferents sensors del penya-segat

if dontFall Sentència% If per trucar a les dades del sensor de penya-segat des de dalt

if data.left <1010% Si la sentència provoca diferents funcions de la sala si el sensor de penya-segat detecta menys de 1010 valors

r. aturar-se

r.moveDistance (-0,2, 0,2)% Inverteix Roomba 0,2 m

r.turnAngle (-90, 0,5)% Gira Roomba -90 graus el més ràpid possible

elseif data.leftFront <1010

r. aturar-se

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

r.turnAngle (90, 0,5)% Gira Roomba 90 graus el més ràpid possible

elseif data.rightFront <1010

r. aturar-se

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

r.turnAngle (90, 0,5)% Gira Roomba 90 graus el més ràpid possible

elseif data.right <1010

r. aturar-se

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

r.turnAngle (90, 0,5)% Gira Roomba 90 graus el més ràpid possible

final

final

final

function liquids = LiquidCheck (r)% Crea la funció 'LiquidCheck'

mentre que true% inicia un bucle infinit per calibrar

img = r.getImage; % llegeix la càmera del robot

image (img)% mostra la imatge en una finestra de la figura

red_mean = mitjana (mitjana (img (200, 150, 1))))% llegeix la quantitat mitjana de píxels vermells

blue_mean = mitjana (mitjana (img (200, 150, 3)))% llegeix la quantitat mitjana de píxels blaus

líquids = vermell_mig || blue_mean% Crea una variable emmagatzemada, "líquids", per a les diferents variables de color

instrucció if liquids% If per trucar a les dades de la imatge des de dalt

if red_mean> 170% Si l'afirmació provoca diferents funcions del roomba si la càmera veu un color vermell mitjà superior a 170

r.stop% para roomba

r.setLEDCenterColor (255)% estableix el cercle a color vermell

r.setLEDDigits (); % neteja la pantalla

f = barra d'espera (0, '* MISSATGE ENTRANT *'); % crea una barra d'espera per a un missatge de càrrega

r.setLEDDigits ('HOT'); % estableix la pantalla LED per a la sortida "CALENT"

pausa (0,5)% Pausa breu per llegir la informació enviada

r.setLEDDigits ('LAVA'); % estableix la pantalla LED per a la sortida "LAVA"

pausa (0,5)

barra d'espera (.33, f, '* MISSATGE ENTRANT *'); % crea un augment a la barra d'espera

r.setLEDDigits ('HOT');

pausa (0,5)

r.setLEDDigits ('LAVA');

pausa (0,5)

barra d'espera (.67, f, '* MISSATGE ENTRANT *'); % crea un augment a la barra d'espera

r.setLEDDigits ('HOT');

pausa (0,5)

r.setLEDDigits ('LAVA');

barra d'espera (1, f, '* MISSATGE ENTRANT *'); % completa la barra d'espera

pausa (1)

close (f)% tanca la barra d'espera

r.setLEDDigits (); % neteja la pantalla LED

tanca-ho tot% Tanca totes les finestres anteriors

eixos ('Color', 'cap', 'XColor', 'cap', 'YColor', 'cap')% Esborra la finestra de gràfica dels eixos i del gràfic

y = 0,5; % estableix la posició y del text a la finestra de traçat

x = 0,06; % estableix la posició x del text a la finestra de traçat

title ('FROM MARS ROOMBA', 'fontsize', 32)% Afegeix un títol a la finestra de traçat

quadeqtxt = 'LAVA DE PERILL'; % Estableix la variable 'quadeqtxt' a la sortida 0

text (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % mostra el text de quadeq a la finestra de traçat

r.moveDistance (-0,2, 0,2)% inverteix la sala 0,2 m

r.turnAngle (180, 0,5)% gira el roomba 180 graus el més ràpid possible

r.setLEDCenterColor (128, 128); % estableix el LED del centre roomba a taronja

tanca tot% tanca les finestres restants obertes

elseif blue_mean> 175% Si la sentència provoca diferents funcions de la sala si la càmera veu un color blau mitjà superior a 175

r.stop% para roomba

r.setLEDCenterColor (255)% estableix el cercle a color vermell

r.setLEDDigits (); % neteja la pantalla

f = barra d'espera (0, '* MISSATGE ENTRANT *'); % crea una barra d'espera per a un missatge de càrrega

r.setLEDDigits ('MIRAR'); % estableix la pantalla LED per a la sortida "LOOK"

pausa (0,5)% Pausa breu per llegir la informació enviada

r.setLEDDigits ('WATR'); % estableix la pantalla LED per a la sortida "WATR"

pausa (0,5)

barra d'espera (.33, f, '* MISSATGE ENTRANT *'); % crea un augment a la barra d'espera

r.setLEDDigits ('MIRAR');

pausa (0,5)

r.setLEDDigits ('WATR');

pausa (0,5)

barra d'espera (.67, f, '* MISSATGE ENTRANT *'); % crea un augment a la barra d'espera

r.setLEDDigits ('MIRAR');

pausa (0,5)

r.setLEDDigits ('WATR');

barra d'espera (1, f, '* MISSATGE ENTRANT *'); % completa la barra d'espera

pausa (1)

close (f)% tanca la barra d'espera

r.setLEDDigits (); % neteja la pantalla LED

tanca-ho tot% Tanca totes les finestres anteriors

eixos ('Color', 'cap', 'XColor', 'cap', 'YColor', 'cap')% Esborra la finestra de gràfica dels eixos i del gràfic

y = 0,5; % estableix la posició y del text a la finestra de traçat

x = 0,06; % estableix la posició x del text a la finestra de traçat

title ('FROM MARS ROOMBA', 'fontsize', 32)% Afegeix un títol a la finestra de traçat

quadeqtxt = 'AIGUA TROBADA'; % Estableix la variable 'quadeqtxt' a la sortida 0

text (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % mostra el text de quadeq a la finestra de traçat

r.moveDistance (-0,2, 0,2)% inverteix la sala 0,2 m

r.turnAngle (180, 0,5)% gira el roomba 180 graus el més ràpid possible

r.setLEDCenterColor (128, 128); % estableix el LED del centre roomba a taronja

tanca tot% tanca les finestres restants obertes

final% finalitza 'red_mean' sentència if

end% acaba la declaració "líquids" if

end% tanca infinit mentre es fa un bucle

funció final de% ends "LiquidCheck"

Pas 4: execució del codi

Després de copiar i enganxar el codi a MATLAB, us heu de connectar a Roomba. Un cop connectat Roomba, heu de posar el nom a la variable r. Les funcions utilitzen la variable r quan es refereixen a Roomba, de manera que s’ha de definir Roomba com la variable r. Després d'executar el codi, Roomba hauria d'executar-se segons les instruccions.

Recomanat: