Beruflich Dokumente
Kultur Dokumente
ROBÓTICA MÓVIL
DEDICATORIA
A nuestros maestros, por su paciencia,
bondad y generosidad, por iluminar nuestra
senda con la luz del conocimiento, por
enseñarnos a ser útiles a los demás.
A mis compañeros por la alegría compartida,
por su espíritu de solidaridad, por animarnos
constantemente hacia la culminación de
nuestra carrera.
A nuestras familias por creer en nosotros y
apoyarnos en nuestro crecimiento profesional
y personal.
IESTP IDAT MECAT´
AGRADECIMIENTO
A Dios.
A todas las personas que contribuyeron en el
desarrollo de este proyecto.
Al profesor PAUCARA PRADO,JHONATAN DAVID.
A las personas que en conjunto forman IDAT,
por brindarnos la oportunidad de adquirir
conocimientos y formaros profesionalmente.
IESTP IDAT MECAT´
PRÓLOGO
La idea para este proyecto surgió al ver una la aplicación con un visor de realidad virtual.
Dado el gran potencial que tiene dicha tecnología, se tuvo la idea de integrarlo en el
funcionamiento de un robot mobil asi cambiando la tradicional forma de visualización de
una cámara en la pc por un entorno virtual mostrado en un visor Oculus Rift haciendo
que resulte más atractiva y práctica. La herramienta elegida para dicha tarea fue el motor
de videojuegos Unity 3D. Las razones de utilizar este motor 3D fueron, principalmente, su
gran comunidad, la cual permite obtener mucha información a la hora de abordar ciertos
problemas, su compatibilidad con múltiples plataformas, o el hecho de que dispone de
una versión gratis, sin necesidad de obtener una licencia, con lo que se ahorra en costos.
RESUMEN
El presente proyecto tiene como finalidad desarrollar un entorno de Realidad
virtual aplicado a un robot móvil capaz de transmitir en tiempo real el video de la
cámara y poder controlarlo por medio del oculus Rift.
IESTP IDAT MECAT´
ÍNDICE
TABLA DE CONTENIDO
IESTP IDAT MECAT´
CAPÍTULO 1
1. GENERALIDADES
La Realidad Virtual supera las barreras espaciotemporales y configura un
entorno en el que la información y la comunicación se nos muestran accesibles
desde perspectivas hasta ahora desconocidas. La realidad virtual permite la
generación de entornos de interacción que separen la necesidad de compartir
el espacio-tiempo, facilitando en este caso nuevos contextos de intercambio y
comunicación.
Por el momento, Sony, con las PlayStation VR (PS VR), sigue siendo el rey de la realidad
virtual. "Desde que se lanzó PS VR en octubre de 2016, se han vendido más de 3 millones
de unidades en todo el mundo. En referencia al progreso cronológico de ventas, el primer
millón de PS VR vendidas se alcanzó en junio de 2017, mientras que los dos millones se
superaron en diciembre de ese mismo año. Es un producto que va avanzando
progresivamente, logrando encontrar su hueco en el mercado", afirman fuentes de Play-
Station.
Precisamente la apuesta por eliminar los cables y el uso de otros dispositivos ha sido la
colaboración con Xiaomi, acaba de poner a la venta su nuevo casco de realidad virtual
con el que jugar, disfrutar de contenidos e incluso ver Netflix como si estuvieras en un
Este tipo de tecnología también ha sido usada por HTC con las HTC Vibe Pro. La
sector y en sus últimas gafas ha optado por intentar evitar uno de los principales
IESTP IDAT MECAT´
Microsoft, por su parte, ha optado por conquistar el mundo empresarial. Hololens, las
"interactuando con hologramas que permiten visualizar y trabajar con contenido digital
como parte del mundo real de una manera más natural, a través de gestos y voz. Una
La principal utilidad de nuestro robot móvil, con transmisión de video en tiempo real,
es la de exploración de ambientes peligrosos. De esta forma se pueden realizar
exploraciones o investigaciones en espacios en los que pueda haber riesgo o peligro
para humanos manteniendo la seguridad de las personas.
Los drones son uno de los campos tecnológicos más emocionantes que existen, con
más compañías que ingresan al mercado y nuevas innovaciones de aeronaves que
se piensan todos los días. La realidad virtual puede ser un segundo lugar cercano,
con auriculares de gama alta como Oculus Rift y HTC Vive que ocupan los titulares
internacionales con su potencial de vanguardia.
Básicamente, la cabeza del robot se alimenta de la pantalla del Oculus Rift y todo el
autómata se controla a través de un controlador normal de videojuegos.
CAPÍTULO 2
13 OBJETIVOS Y SOLUCIONES
13.6 Objetivos
13.7 Soluciones
CAPÍTULO 3
14 MARCO TEÓRICO
En el presente capítulo se presentará los conceptos básicos de los diferentes
elementos que se usaran en el desarrollo del proyecto, con el fin de tener la
información y los conocimientos necesarios para realizar el diseño e
implementación de sistema un sistema de seguridad.
14.6.1 NodeMCU
Es una tarjeta especialmente orientada al internet de las costas (IOT). Está
basado en el SOC (System on Chip) ESP8266, un chip altamente integrado,
integra un potente procesador con arquitectura de 32 bits. Es usado en
nuestro proyecto para procesar los datos y poder realizar acciones.
Características:
Voltaje de Alimentación (USB): 5V DC.
Voltaje de Entradas/Salidas: 3.3V DC.
SOC: ESP8266 (Módulo ESP-12).
CPU: Tensilica Xtensa LX3 (32 bit).
Frecuencia de Reloj: 80MHz/160MHz.
Instrucción RAM: 32KB.
Memoria Flash Externa: 4MB.
Pines Digitales GPIO: 17 (pueden configurarse como PWM a 3.3V).
Pines Analógicos ADC: 1 (0-1V).
UART: 2
Chip USB-Serial: CP2102.
Antena en PCB.
WI-FI Direct (P2P), soft-AP.
Stak de protocolo TCP/IP integrado.
PLLs, reguladores, DCXO y manejo de poder integrados
Potencia de salida de +19.5dBm en modo 802.11b.
Corriente de fuga menor a 10uA.
IESTP IDAT MECAT´
14.6.2 Mini PC
En la mini PC estará una aplicación realizado en python que controla los
demás dispositivos mediante comunicación sockets, la aplicación realizada
en python se encargara de detectar movimiento y enviar una notificación a
celular, también le llegara un correo a su gmail donde le llegara una foto del
intruso.
Características técnicas:
Marca: Gigabyte
Línea: Brix
Modelo: BSI5HA-6200
Procesador: Intel Core i5
Memoria RAM: 4GB
Capacidad de almacenamiento: 32GB
Conectividad: USB 3.1
Puertos de video: HDMI – Mini DisplayPort – RJ45
IESTP IDAT MECAT´
Características técnicas:
CAPÍTULO 4
15 MEMORIA DESCRIPTIVA
15.6 Introducción
En este capítulo tenemos como finalidad de explicar el uso correcto del sistema
de “Sistema de vigilancia remota” para que este no genere inconvenientes.
Explicar el sistema de manera técnica para su posterior implementación
tomando en cuenta las normas de seguridad.
15.10 Costos
MÓDULOS PARA BUSES RECEPTORES/TRANSMISORES
Costo Costo
Item Materiales Caracteristicas Cantidad Descripción Imagen Referencial
Unitario Total
- 28 pines tipo DIP.
Encargado de procesar la data que
- Memoria flash 32KB.
Microcontrolador recibe a través del NRF24L01 y el
1 - Memoria RAM 2KB. 2 S/. 25.00 S/. 50.00
Atmega328P teclado para mostrarlo en la
- EEPROM 1KB.
pantalla LCD.
- Frecuencia max. 20 MHz.
- Funcion reloj-calendario.
- Comunicación I2C. Mantiene la hora y fecha en el bus
2 Modulo RTC DS1307 2 S/. 15.00 S/. 30.00
- Bateria de respaldo. a la hora de la marcación.
- Volt. Alimentación 4.5 - 5.5 V.
CAPÍTULO 5
16 OPERACIÓN Y MANTENIMIENTO
En el presente capitulo se presentará los conceptos de manejo del sistema u
operación y el mantenimiento preventivo y correctivo.
Multímetro digital, son los más modernos cuyos rangos son capaces
de medir valores de temperatura, resistencia, voltajes grandes y
corrientes, con mayor precisión que los análogos pues cuentan con
una pantalla digital en la que se puede visualizar el valor medido.
Para optimizar su
Limpieza y revisión de tarjeta
2 meses funcionamiento y prevenir
electrónica del sistema.
el desgaste por corrosión.
Mantenimiento Rutinario
Este es el mantenimiento que se debe hacer cada cierto tiempo para
garantizar el buen funcionamiento del equipo, por lo general consiste en
limpieza que se debe realiza con la finalidad primordial de conservar y evitar
los efectos nocivos del medio ambiente.
IESTP IDAT MECAT´
Mantenimiento de Emergencia
Es aquel mantenimiento que implica efectuar algunas modificaciones y
correcciones de ciertos componentes es decir entra a tallar la reparación del
equipo con el objetivo de regresar a su forma de trabajo normal, mejorando
de ante mano su vida útil.
Este tipo de mantenimiento se otorga en algunas instancias cuando ocurre
alguna falla que impide un funcionamiento total o parcial de la fuente de
alimentación, este tipo de mantenimiento debe ser efectuado por personas
que tengan conocimientos en electrónica y tengan dominio de ciertos
equipos (multímetro, osciloscopio, etc.).
La ventaja del mantenimiento es que corrige fallas en el equipo volviendo ser
operativo y seguir prestando servicios para el fin que h sido creado, la
desventaja porque el instrumento no siempre logra eficiencia al 100%.
En este tipo de mantenimiento se tendrá mucho énfasis en la detención de
la falla y en el reemplazo de ciertos dispositivos los que requiere mucho
cuidado desde su elección hasta su compra o verificación de un posible
reemplazo.
Correctivo:
Otros:
Ejecución Personal
Limpieza:
Medición:
OBSERVACIONES
-------------------------------------- ------------------------------------
Técnico de soporte de área Jefe de área
IESTP IDAT MECAT´
CAPÍTULO 6
17 CONCLUSIONES Y RECOMENDACIONES
17.6 Conclusiones
El equipo de marcación diseñado satisface los requerimientos
específicos del cliente, que verifico personalmente que se cumpla
todo lo estipulado en el protocolo de pruebas.
17.7 Recomendaciones
CODIGO ARDUINO
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
int keyIndex = 0;
WiFiUDP Udp;
#define ENA_DER 16
#define PWM_DER 5
#define INA_DER 0
#define INB_DER 4
#define ENA_IZQ 2
#define PWM_IZQ 14
#define INA_IZQ 13
#define INB_IZQ 12
int pwmMax=1020;
int yRan=50;
int xRan=400;
boolean booMov=false;
int velAct=0;
IESTP IDAT MECAT´
void setup()
{
IPAddress ip(192, 168, 8, 155);
IPAddress gateway(192, 168, 8, 1);
IPAddress subnet(255, 255, 255, 0);
pinMode(ENA_DER,OUTPUT);
pinMode(PWM_DER,OUTPUT);
pinMode(INA_DER,OUTPUT);
pinMode(INB_DER,OUTPUT);
analogWrite(PWM_IZQ, 0);
analogWrite(PWM_DER, 0);
digitalWrite(ENA_DER, HIGH);
digitalWrite(ENA_IZQ, HIGH);
}
void loop () {
if(datox>xRan) {
Serial.println("defrente dobla derecha datox:");
Serial.println(datox);
analogWrite(PWM_DER, (1.2)*datoy);
analogWrite(PWM_IZQ, 0 );
velAct=datoy;
Serial.println("defrente recto datox:");
Serial.println(datox);
analogWrite(PWM_DER, datoy);
analogWrite(PWM_IZQ, datoy);
}
if(datox<(-xRan)){
Serial.println("defrente dobla izquierda datox:");
Serial.println(datox);
analogWrite(PWM_DER, 0);
analogWrite(PWM_IZQ, (1.2)*abs(datoy));
}
}
if(datox>xRan){
}
IESTP IDAT MECAT´
analogWrite(PWM_IZQ, abs(datoy));
analogWrite(PWM_DER, abs(datoy));
}
if(datox<-xRan){
}
}
if(datoy<=50 and datoy>=-50){
booMov=false;
//Serial.println("detenido");
turnMotor(0,0,0,0) ;
analogWrite(PWM_IZQ, 0);
analogWrite(PWM_DER, 0);
}
if(datob==1){
//girar sobre su eje
if(datox>xRan ){
turnMotor(0,1,1,0);
analogWrite(PWM_IZQ, (1.2)*datox);
}
if(datox<xRan && datox>(-xRan-50)){
booMov=true;
Serial.println("detenido");
Serial.println(datox);
analogWrite(PWM_IZQ, 0);
analogWrite(PWM_DER, 0);
}
if(datox<(-xRan-50) ){
turnMotor(1,0,0,1);
Serial.println("detenido dobla izquierda datox:");
Serial.println(datox);
analogWrite(PWM_IZQ, (1.2)*abs(datox));
analogWrite(PWM_DER, (1.2)*abs(datox));
// send a reply, to the IP address and port that sent the packet
Udp.beginPacket(Udp.remoteIP(), 4001);
Udp.write(ReplyBuffer);
Udp.endPacket();
void printWifiStatus() {
// print the SSID of the network you're attached to:
IESTP IDAT MECAT´
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
CODIGO UNITY
TRANSMISION DE VIDEO
MjpegProcessor.cs
using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;
using System.Drawing;
if (next == search.Length)
return start;
}
}
return -1;
IESTP IDAT MECAT´
}
public static int FindBytesInReverse(byte[] buff, byte[] search)
{
if (next == search.Length)
return start;
}
}
return -1;
}
Debug.Log("Starting request");
HttpWebRequest req = (HttpWebRequest)asyncResult.AsyncState;
try
{
HttpWebResponse resp =
(HttpWebResponse)req.EndGetResponse(asyncResult);
string contentType = resp.Headers["Content-Type"];
if (!string.IsNullOrEmpty(contentType) &&
!contentType.Contains("="))
{
throw new Exception("Invalid content-type header. The
camera is likely not returning a proper MJPEG stream.");
}
byte[] boundaryBytes =
Encoding.UTF8.GetBytes(boundary.StartsWith("--") ? boundary : "--" +
boundary);
Stream s = resp.GetResponseStream();
BinaryReader br = new BinaryReader(s);
_streamActive = true;
byte[] buff = br.ReadBytes(_chunkSize);
while (_streamActive)
{
int imageStart = FindBytes(buff, JpegHeader);//
buff.Find(JpegHeader);
if (imageStart != -1)
{
int size = buff.Length - imageStart;
Array.Copy(buff, imageStart, imageBuffer, 0, size);
while (true)
{
buff = br.ReadBytes(_chunkSize);
int imageEnd = FindBytes(buff, boundaryBytes);
if (imageEnd != -1)
{
Array.Copy(buff, 0, imageBuffer, size,
imageEnd);
size += imageEnd;
if (FrameReady != null)
FrameReady(this, new
FrameReadyEventArgs());
Array.Copy(buff, imageEnd, buff, 0,
buff.Length - imageEnd);
size += buff.Length;
if (!_streamActive)
{
resp.Close();
break;
}
}
}
}
resp.Close();
}
catch (Exception ex)
{
if (Error != null)
_context.Post(delegate { Error(this, new ErrorEventArgs()
{ Message = ex.Message }); }, null);
return;
}
}
}
{
public string Message { get; set; }
public int ErrorCode { get; set; }
}
MjpegTexture.cs
using UnityEngine;
using System;
using UnityEngine.UI;
/// <summary>
/// </summary>
public class MjpegTexture : MonoBehaviour
IESTP IDAT MECAT´
{
/// <param name="streamAddress">
/// </param>
[Tooltip("Set this to be the network address of the mjpg stream. ")]
public string streamAddress;
/// <summary>
/// </summary>
[Tooltip("Show fps (OnGUI).")]
public bool showFps = true;
/// <summary>
/// </summary>
[Tooltip("Chunk size for stream processor in kilobytes.")]
public int chunkSize = 4;
Texture2D tex;
MjpegProcessor mjpeg;
void Update()
{
deltaTime += Time.deltaTime;
if (updateFrame)
{
tex.LoadImage(mjpeg.CurrentFrame);
// tex.Apply();
GetComponent<Renderer>().material.mainTexture = tex;
updateFrame = false;
deltaTime = 0.0f;
}
}
void DrawFps()
{
int w = Screen.width, h = Screen.height;
void OnGUI()
{
if (showFps) DrawFps();
}
void OnDestroy()
{
mjpeg.StopStream();
}
}
IESTP IDAT MECAT´
SocketsControl.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine;
Thread m_Thread;
UdpClient m_Client;
int pwmMax=1020;
int bIndexRight;
void Start()
{
m_Thread = new Thread(new ThreadStart(ReceiveData));
m_Thread.IsBackground = true;
m_Thread.Start();
}
void ReceiveData()
{
try
{
Debug.Log(returnData);
}
}
catch (Exception e)
{
Debug.Log(e);
OnApplicationQuit();
}
}
if (m_Client != null)
{
m_Client.Close();
}
}
void udpSend()
{
var IP = IPAddress.Parse("192.168.8.155");
try
{
Vector2 primaryAxis
=OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick,
OVRInput.Controller.RTouch);
// Vector2 secundaryAxis
=OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick,
OVRInput.Controller.LTouch);
if(OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger,
OVRInput.Controller.RTouch)){
bIndexRight=1;
IESTP IDAT MECAT´
if(OVRInput.GetUp(OVRInput.Button.PrimaryIndexTrigger,
OVRInput.Controller.RTouch)){
bIndexRight=0;
}
string msnR =
pwmxR.ToString()+"/"+pwmyR.ToString()+"/"+bIndexRight;
Debug.Log(msnR);
}
catch (Exception e)
{
Debug.Log(e.ToString());
}
}
}