Taula de continguts:
Vídeo: Projecte Mars Roomba UTK: 4 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
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:
Convertint Roomba en un Mars Rover: 5 passos
Convertint Roomba en un Mars Rover:
Mars Roomba: 6 passos
Mars Roomba: aquest manual us guiarà en les direccions d’operació d’un robot aspirador Roomba controlat per Raspberry Pi. El sistema operatiu que utilitzarem és a través de MATLAB
Projecte Roomba MATLAB: 5 passos
Projecte Roomba MATLAB: El pla actual que la NASA té per al rover de Mart és que sigui un recopilador de dades i vagi per Mart, recollint mostres del sòl per tornar a la Terra perquè els científics puguin veure si hi havia alguna forma de vida anterior a el planeta. Addicional
Projecte UTK EF 230 MarsRoomba tardor 2018: 5 passos
Projecte UTK EF 230 MarsRoomba tardor 2018: actualment, els rovers de Mart s’utilitzen per recopilar dades sobre la superfície de Mart mitjançant diversos mètodes, fins al final màxim d’aprendre més sobre el potencial del planeta per a la vida microbiana. Els Rovers utilitzen principalment eines d’anàlisi de sòls i fotografia per a dades
Gravador USB Aquest projecte es pot cremar a través de plàstics / fusta / paper (el divertit projecte també ha de ser fusta molt fina): 3 passos
Gravador alimentat per USB. Aquest projecte pot cremar-se a través de plàstics / fusta / paper (el divertit projecte també ha de ser fusta molt fina): NO FEREU AIX US mitjançant USB !!!! He descobert que pot fer malbé el vostre ordinador per tots els comentaris. el meu ordinador està bé. Utilitzeu un carregador de telèfon de 600 ma 5 v. He utilitzat això i funciona bé i res es pot danyar si utilitzeu un endoll de seguretat per aturar l'alimentació