Tabla de contenido:

Proyecto Roomba MATLAB: 5 pasos
Proyecto Roomba MATLAB: 5 pasos

Video: Proyecto Roomba MATLAB: 5 pasos

Video: Proyecto Roomba MATLAB: 5 pasos
Video: Introducción al modelado y simulación de robots con MATLAB y Simulink 2024, Mes de julio
Anonim
Proyecto Roomba MATLAB
Proyecto Roomba MATLAB

El plan actual que tiene la NASA para el rover de Marte es que sea un recolector de datos y deambule por Marte, recolectando muestras del suelo para traer de regreso a la Tierra para que los científicos puedan ver si hubo formas de vida anteriores en el planeta. Además, el rover envía imágenes a los científicos para que puedan ayudar a navegar el rover y solucionar cualquier problema que pueda tener.

La idea de nuestro grupo para nuestro proyecto es que el rover haga lo mismo que el rover de la NASA que dejará la Tierra en 2020, pero que también traza un mapa de la geografía de la tierra. El roomba podría detectar acantilados y detenerse antes de que se caiga, y luego retroceder, girar y cambiar su curso para que no se caiga y se dañe. Nuestra otra idea integrada en nuestro proyecto es que roomba pueda trazar los puntos de referencia que ve y mostrar una trama cada vez que finaliza el ciclo y se ejecuta su curso.

Este instructivo es para cualquier otra persona que desee crear el mismo tipo de código para su roomba.

Paso 1: Paso 1: Materiales necesarios

Paso 1: Materiales necesarios
Paso 1: Materiales necesarios
Paso 1: Materiales necesarios
Paso 1: Materiales necesarios

Necesitará:

  1. Un roomba
  2. MATLAB
  3. Este archivo para ejecutar el roomba
  4. Una superficie plana
  5. Una superficie de mesa para actuar como un "acantilado"

Paso 2: Paso 2: Configuración / obtención de código para Roomba

Paso 2: Configuración / obtención de código para Roomba
Paso 2: Configuración / obtención de código para Roomba

Su pantalla se verá así una vez que ingrese los archivos.

Paso 3: Paso 3: Configuración de sensores de desnivel / luces LED

Este código le dirá a su roomba exactamente en qué ángulo girar, comprobará la información de la batería, le dirá a su roomba qué tan rápido debe ir y comprobará si hay una persona a través de la cámara del roomba. También emitirá un pitido si identifica a una persona y se detendrá antes de caer por un precipicio.

% intente rob.setLEDDigits ('') x = 0; y = 0; theta = 0; obstáculo = ; ciclo = 1; AngCorr = @ (x) x + 3.059. * X. ^ 0.4205; % Función para corregir ángulos de giro mientras rob.getBatteryInfo.percent> 15 rob.setLEDDigits ('') rob.setDriveVelocity (0.1)% Go% Verificar persona si AA_checkperson (rob) rob.beep end% Verificar sensor de acantilado si AA_cliffcheck (rob) rob.stop rob.setLEDDigits ('Cliff') pause (0.5) obstáculo (ciclo) = 2; AA_cliffbeep (rob)% Retroceder y girar rob.moveDistance (-. 15) rob.turnAngle (30) end

Paso 4: Paso 4: Comprobación de obstáculos

Este código hará que el roomba verifique si hay elementos a su alrededor y verificará el sensor de golpes para asegurarse de que se detenga antes de que se dañe.

% Compruebe el sensor de luz si AA_lightcheck (rob) rob.stop rob.setLEDDigits ('Wall') pause (0.5) obstáculo (ciclo) = 1; % Wall AA_wallbeep (rob)% Retroceda y gire rob.moveDistance (-. 15) rob.turnAngle (30) end% Compruebe el sensor de impacto si AA_bumpcheck (rob) rob.stop rob.setLEDDigits ('Wall') pause (0.5) obstáculo (ciclo) = 1; % Wall AA_wallbeep (rob)% Retrocede y gira rob.moveDistance (-. 15) rob.turnAngle (30) end% Si ninguno si está vacío (obstáculo) obstáculo (ciclo) = 0; elseif longitud (obstáculo) <ciclo obstáculo (ciclo) = 0; fin

Paso 5: Paso 5: Trazado

Paso 5: trazado
Paso 5: trazado

Este código le dirá a su roomba que trace lo que encuentre en su viaje. Una trama como esta aparecerá después de que el roomba se haya detenido.

% Obtener posición d = rob.getDistance; si ciclo == 1 theta (ciclo) = 0; x (ciclo) = d. * cosd (theta (ciclo)); % dist total viajado en x y (ciclo) = d. * sind (theta (ciclo)); % dist total viajado en y else theta (ciclo) = theta (ciclo-1) + rob.getAngle; x (ciclo) = d. * cosd (theta (ciclo)) + x (ciclo-1); % dist total viajado en x y (ciclo) = d. * sind (theta (ciclo)). * d + y (ciclo-1); % dist total recorrido en el final de y% Condición de ruptura si rob.getButtons.clean break end% Incremento del ciclo del ciclo = ciclo + 1; end rob.stop for i = 1: cycle if obstacle (i) == 1% Wall plot (x (i), y (i), 'Marker', 'square', 'MarkerEdgeColor', 'r') elseif obstáculo (i) == 2% Gráfico de acantilado (x (i), y (i), 'Marcador', 'o', 'MarkerEdgeColor', 'k') end text (.9, 0.9, sprintf ('Cuadrado = Muro / nCircle = Cliff '),' Units ',' normalized ') mantenga al final% Señal de socorro mientras es verdadero rob.beep pausa (3) if rob.getButtons.clean break end end% catch% rob.stop% end

Recomendado: