Tabla de contenido:

Garden Helper Roomba Bot: 8 pasos
Garden Helper Roomba Bot: 8 pasos

Video: Garden Helper Roomba Bot: 8 pasos

Video: Garden Helper Roomba Bot: 8 pasos
Video: ULTIMATE Cleaning Challenge - 5 lbs of Cereal vs Roomba i8+ Robot Vacuum. 2024, Mes de julio
Anonim
Ayudante de jardín Roomba Bot
Ayudante de jardín Roomba Bot

Kiara Myers, Ahmad Alghadeer y Madison Tippet

Objetivo:

Este instructivo le enseñará cómo programar un Roomba Bot, usando MATLAB, para navegar a través de un jardín, detectando frutas / verduras de forma circular que están lo suficientemente maduras para ser recolectadas según su tamaño. Este robot también le envía un correo electrónico, advirtiéndole cuántas frutas están listas para ser recolectadas y la ruta en la que viajó.

Características:

  • Utiliza sensores de luz para detectar paredes y girar ligeramente para evitar golpearlas.
  • Utiliza sensores de golpes para romper el programa cuando golpea la roca al final del jardín.
  • Utiliza procesamiento de imágenes para detectar un círculo en el jardín y luego determinar su radio
  • Utiliza sensores de acantilado para detectar una cinta de color que indica la presencia de una fruta.

Paso 1: Materiales y suministros:

  • Una computadora portátil
  • MATLAB 2017
  • Limpiador de vacío Roomba
  • Frambuesa pi
  • Bloques de madera
  • Papel blanco
  • Papel negro
  • Cinta de color / tira fina de papel de color
  • Roca grande

Paso 2:

Paso 3: Montaje de su "jardín"

Montaje de su
Montaje de su
  1. Toma tu papel negro y corta círculos de varios tamaños.
  2. Pegue estos círculos negros en un papel blanco grande

    Este contraste será necesario a la hora de detectar una fruta

  3. Use sus bloques de madera para construir un camino de jardín en forma de laberinto para que su robot lo navegue

    Elegimos un camino en forma de U como se muestra en la imagen de arriba

  4. Al final de su jardín, agregue una piedra o una puerta u otro objeto para que su robot sepa que está listo.
  5. Pegue su papel blanco con el círculo en las paredes del jardín.

    Usamos cubos para pegarlo porque nuestras paredes eran demasiado cortas para la cámara

  6. Coloque cinta de color / tira fina de papel de color en el suelo delante de la fruta.

Paso 4: escribir el código

Navegando por el jardín

Uso de sensores de impacto: para ejecutar el programa, colocamos la codificación en una instrucción while que recorre varias instrucciones if hasta que se rompe el código. Si se golpea alguno de los parachoques, su valor será igual a verdadero (que en booleano es un valor de 1). Una instrucción if se usa para descifrar el código cuando uno de sus valores es igual a 1.

Uso de sensores de acantilado: dentro de la declaración while, usamos una declaración if para indicarle al Roomba cuándo ha llegado a la ubicación de una planta. El Roomba detecta la cinta de color en el piso al examinar el umbral de rojo que detectan los sensores de desnivel. Si el sensor de desnivel izquierdo o derecho detecta un color con un umbral mayor que el del suelo, detendrá el robot durante 2 segundos (usando el comando de pausa). Durante estos 2 segundos, Roomba tomará y mostrará una imagen de la fruta. Con el comando imfindcircles integrado, establezca un rango para los radios de sus círculos y su Roomba encontrará la llamada fruta.

Uso de procesamiento de imágenes: dentro de la declaración if, incorporamos otra declaración if que dice: si el radio detectado, radii3, es mayor o igual que nuestro requisito mínimo de una fruta madura, r1 (usted decide esto), luego cuente y muestre en el Roomba cuantas frutas están listas y gira para continuar por el jardín. Si no, el turno para continuar por el jardín. Nota: es posible que deba ajustar el ángulo en el que gira porque cada Roomba es diferente

Uso de parachoques ligeros: en otra declaración if, los parachoques ligeros se analizan para asegurarse de que ninguno de ellos supere nuestro umbral determinado. Si el parachoques de luz izquierdo, derecho, centro izquierdo, centro derecho, delantero izquierdo o delantero derecho supera el umbral, el Roomba girará ligeramente en el ángulo apropiado para evitar chocar contra una pared. Por lo tanto, navegar por el laberinto.

El resto del código se usa para trazar la ruta tomada por Roomba y luego enviar los resultados a su correo electrónico.

Paso 5: copia el código

% Propósito: Según sus tamaños, el roomba pasará por un jardín y distinguirá las verduras / frutas que están listas para ser recogidas. % De entradas: sensores de luz, sensores de desnivel, sensores de golpes, imagen de la cámara% de salidas: siempre que los sensores de luz superen el umbral, el roomba girará y tomará una imagen, emite un pitido si el radio de% de verduras / frutas se encuentra entre un rango específico. El código se rompe cuando roomba choca con% un objeto, envía al astronauta un correo electrónico sobre cuántas frutas están listas para ser% recogidas y un mapa del movimiento de roomba. % De uso: declaraciones if y while, comandos de trazado, código de correo electrónico de MATLAB

k = 0

tic

timerVal = tic

si bien es cierto

v = 0,2; % velocidad r.setDriveVelocity (v, v);% roomba avanzar L = r.getLightBumpers; LC = L.leftCenter; Rr = L.derecha; Lf = L.izquierda; RC = L.rightCenter; LF = L.izquierdaFrente; RF = L.rightFront; Q = 75; % umbral. RTH = 30; % Umbral rojo alto RTL = 10; % Umbral rojo bajo B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; si S.leftFront> PL1 || S.rightFront> PL1% detecta si el color en el suelo está por encima del umbral r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% pausa durante 2 segundos img = r.getImage; % tomar imagen imshow (img)% mostrar imagen [centros3, radios3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscírculos (centros3, radios3); % busque círculos de radios dentro del rango especificado en la imagen si radii3> = r1 T = 1 k = k + 1 dist1 = 0.2. * tiempo transcurrido% Si el radio detectado es mayor o igual al% mínimo requerido de una fruta madura, entonces Roomba cuenta esta fruta elseif radii3 <= r3 T = 0 else T = 0 dist2 = 0.2. * elapsedTime% Si no es así, entonces no cuenta el final de la fruta

if T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Si se detectó una fruta, muestre el número en Roomba,% haga un ruido y gire elseif T == 2 r.turnAngle (78)% Si se detectan 2 frutas, gire para continuar por% garden else r.turnAngle (78)% Si no se detectan frutas, gire para continuar por% garden end end if LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end% Si alguno de los valores de los parachoques de luz supera el umbral, entonces% el Roomba girará ligeramente en la dirección apropiada para evitar% golpear una pared

si B.right == 1 || B.izquierda == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Si alguno de los se golpean los botones, luego el roomba reproduce un sonido, gira,% y rompe el código

romper el final

end scatter (0.533, 0, '^') mantener la dispersión (0.533, dist1, '<') mantener la dispersión (-dist2, dist1, 'v') mantener la dispersión (-dist2, 0, 'd') saveas (mcd, 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' contraseña = 'Srsora123 #' host = 'smtp.gmail.com' port = '465'

setpref ('Internet', 'E_mail', correo); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', correo); props.setProperty ('mail.smtp.host', host); props.setProperty ('mail.smtp.port', puerto); props.setProperty ('mail.smtp.starttls.enable', 'verdadero'); props.setProperty ('mail.smtp.debug', 'verdadero'); props.setProperty ('mail.smtp.auth', 'verdadero'); props.setProperty ('mail.smtp.socketFactory.port', puerto); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'falso'); sendmail (mail, '¡Hola astronauta! Hay tantas frutas en el jardín', kmsg, {'movement.png'})

Recomendado: