Tabla de contenido:

Proyecto UTK EF 230 MarsRoomba Otoño 2018: 5 pasos
Proyecto UTK EF 230 MarsRoomba Otoño 2018: 5 pasos

Video: Proyecto UTK EF 230 MarsRoomba Otoño 2018: 5 pasos

Video: Proyecto UTK EF 230 MarsRoomba Otoño 2018: 5 pasos
Video: Испытание двигателя бесконечной энергии. Часть 2 | Двигатель свободы №3 2024, Noviembre
Anonim
Proyecto UTK EF 230 MarsRoomba Otoño 2018
Proyecto UTK EF 230 MarsRoomba Otoño 2018

Actualmente, los vehículos exploradores de Marte se utilizan para recopilar datos sobre la superficie de Marte a través de varios métodos, con el fin último de aprender más sobre el potencial del planeta para la vida microbiana. Los rovers utilizan principalmente fotografías y herramientas de análisis del suelo para la recopilación de datos, pero también incluyen instrumentos de navegación, detectores de radiación, sensores atmosféricos y un láser para la vaporización de muestras de rocas. El objetivo de la misión rover planificada para 2020 es prácticamente el mismo, pero con la tarea especial de "recolectar muestras de suelo y roca y almacenarlas en la superficie para un posible retorno a la Tierra en una misión futura", según la NASA.

Sin embargo, bajo la premisa de que los futuros rovers se utilizarán para la asistencia humana, nuestro equipo consideró qué aspectos de los humanos podría monitorear el rover. Llegamos a la conclusión de que si alguna emergencia deja a un astronauta inconsciente con un equipo y un soporte vital defectuosos, nuestro rover podría servir como una baliza de emergencia móvil al observar que el astronauta que siguió está inmóvil y transmitir un mensaje de socorro. Para seguir al humano y determinar la inmovilidad, el rover tomaría datos como el color de los zapatos del humano y su movimiento. Otra entrada a considerar es que tendría que recordar su ruta para transmitir una señal de socorro en caso de emergencia. Nuestro rover satisface una necesidad en Marte en el sentido de que intentar una misión tan costosa en un terreno tan extraño requiere múltiples capas de dispositivos de seguridad, y si un astronauta no puede obtener su propia ayuda debido a un mal funcionamiento o inconsciencia del traje, el rover puede alertar a otros..

Este Instructable está diseñado para ayudar al lector a programar su Roomba para seguir con éxito a un "astronauta" y enviar una señal de socorro si corresponde.

Paso 1: Materiales necesarios

Materiales necesitados
Materiales necesitados

1) Computadora / laptop con acceso a Internet

2) MATLAB_R2018a

3) Descarga de Roomba y Roomba

Paso 2: configuración / descarga

Configuración / Descarga
Configuración / Descarga

Ejecute este script en MATLAB para descargar el software necesario para acceder a Roomba (guardado en su propio archivo en la carpeta del proyecto)

Ayuda adicional:

% Programa de instalación para EF 230 Roomba Project% Última actualización: 13 de septiembre de 2017 (Se corrigieron problemas de seguridad asociados con el servidor https y se eliminó la advertencia de eliminación de archivos si ocurrieron errores) function roombaInstall clc; % lista de archivos para instalar archivos = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % ubicación para instalar desde options = weboptions ('CertificateFilename', ''); % decirle que ignore los requisitos del certificado server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instalación / Actualización de Roomba'; % propósito de visualización y solicitud de confirmación = {'Este programa descargará estos archivos EF 230 Roomba:' '' strjoin (archivos, '') '' 'a esta carpeta:' '' cd '' '¿Desea continuar? '}; bip; yn = questdlg (indicador,… dlgTitle,… 'Sí', 'No', 'Sí');

si ~ strcmp (yn, 'Yes'), return; fin

% obtener la lista de archivos que existen existing_files = files (cellfun (@exist, files)> 0); if ~ isempty (existing_files)% asegúrese de que esté realmente bien reemplazarlos prompt = {'Está reemplazando estos archivos:' '' strjoin (existing_files, '') '' '¿Está bien reemplazar?' }; bip; yn = questdlg (indicador,… dlgTitle,… 'Sí', 'No', 'Sí'); si ~ strcmp (yn, 'Yes'), return; fin fin

% descarga los archivos cnt = 0; para i = 1: longitud (archivos) f = archivos {i}; disp (['Descargando' f]); intente url = [servidor f]; websave (f, url, opciones); % de opciones agregadas para evitar errores de seguridad cnt = cnt + 1; catch disp (['Error al descargar' f]); ficticia = [f '.html']; si existe (ficticio, 'archivo') == 2 eliminar (ficticio) end end end

if cnt == longitud (archivos) msg = 'Instalación exitosa'; esperar (msgbox (msg, dlgTitle)); else msg = 'Error de instalación; consulte la ventana de comandos para obtener más detalles'; esperar (errordlg (msg, dlgTitle)); fin

end% roombaInstalar

Paso 3: Código Parte 1: Función de seguimiento

Parte del código 1: función de seguimiento
Parte del código 1: función de seguimiento

Esta función toma la variable Roomba y la imagen de la cámara del Roomba y encuentra las coordenadas xy centrales del objeto rastreado

Guarde este código en otro archivo de la misma carpeta.

function [xm, ym] = trackingblue (r)% Entradas: variable roomba% Salidas: valor xey del centro del siguiente objeto% Propósito: encuentra el centro de un objeto azul dada una imagen% Uso [valor x, y valor] = trackingblue (variable roomba) img = r.getImage; % lee la cámara fuera de la subtrama del robot (1, 2, 2) subimagen (img); % muestra la imagen en la misma ventana que el título de la ruta ('Imagen de seguimiento') red = img (:,:, 1); verde = img (:,:, 2); azul = img (:,:, 3); justBlue = azul - verde / 2 - rojo / 2; bw = justBlue> 40; mantener la subparcela (1, 2, 2) subimagen (bw); [x, y] = encontrar (bw); si ~ está vacío (x) && ~ está vacío (y) xm = redondo (media (x)); ym = redondo (media (y)); xx = max (1, xm-5): min (xm + 5, tamaño (bw, 1)); yy = max (1, ym-5): min (ym + 5, tamaño (bw, 2)); bwbw = ceros (tamaño (bw), 'uint8'); bwbw (xx, yy) = 255; mantener la subparcela (1, 2, 2) subimagen (justBlue + bwbw); fin

Paso 4: Parte de código 2: Bucle while

Este código impulsa el Roomba en función de la ubicación xey del objeto de la función de seguimiento. Esto hará que Roomba tenga cuidado con las paredes y los acantilados, mientras busca el azul. Esto también tomará las coordenadas xey de la ruta de Roomba y creará un gráfico correspondiente con la imagen de seguimiento. Si el sensor de golpes está activado, pasará a la sección de correo electrónico

% Proyecto Rover

% Jonah Zahn, Wade Price, Noah Sloan% jzahn2, wprice15, nsloan1% Entradas: valor de roomba, datos de la cámara, sensores de golpes, luces y paredes% Propósito: sigue al astronauta y evita obstáculos. Si recibe una alerta, roomba envía un correo electrónico% detallando un mapa y dónde se encuentra de acuerdo con su posición de inicio. % Uso: simplemente ejecute el programa con haber declarado una variable roomba, también% tiene un objeto verde en movimiento% Salidas: muestra la imagen de seguimiento de la imagen, el mapa de correos electrónicos y el texto al usuario %% Siguiente sección b = 0; % Inicializando variables c = 0; x = 0; y = 0; theta = 0; while c == 0% Bucle para que detecte el objeto azul y los obstáculos t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); acantilado = getCliffSensors (r); % inicializando las estructuras para los valores del sensor light = getLightBumpers (r); golpe = getBumpers (r); si light.leftCenter> = 10 || light.rightCenter> = 10% Detecta si hay una pared cerca de r.stop r.setLEDDigits ('ayuda') c = 1% while b == 0% if bump.right == 1 || bump.left == 1 || bump.front == 1% Detecta si ha chocado con algo después de detectar una pared% c = 1% b = 1% disp ('bump')% end% end elseif bump.right == 1 || bump.left == 1 || bump.front == 1% Detecta si ha chocado con algo, si es así, enviará un correo electrónico r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || acantilado.derechoFrente <= 100 || acantilado.izquierda <= 100 || cliff.right <= 100% Detecta si hay un acantilado cerca de r.stop c = 1 r.setLEDDigits ('help') else% Establece las velocidades de conducción para que sigan al azul si yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d. * cosd (theta) + x; % x coordenada de roomba y = d. * sind (theta). * d + y; % y coordenada de la subparcela roomba (1, 2, 1) plot (x, y, 'bd')% traza la ruta y agrega un título título ('Roomba Path') espera; fin

Paso 5: Código Parte 3: Sección de correo electrónico

Esto tomará la ruta y la imagen trazadas y las enviará a una dirección de correo electrónico especificada

(Aquí se muestra con un correo electrónico de ejemplo)

%% Sección de correo electrónico

if b == 1 saveas (gcf, 'rovermap.png')% guarda la figura setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % cuenta de correo para enviar desde setpref ('Internet', 'SMTP_Username', '[email protected]'); % remitentes nombre de usuario setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Props de contraseña de remitentes = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'verdadero'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('email de ejemplo', 'RoverBeacon', 'El astronauta ha dejado de moverse. Para la recuperación, siga las instrucciones en el archivo adjunto.', 'rovermap.png') disp ('email enviado') end

Recomendado: