Visita mi canal de youtube

domingo, 16 de julio de 2017

Proyecto: Navegador GPS para corredores


"Un sistema GPS para la navegación a través de GPS Visualizer waypoint con características de audio y temperatura".
La idea básica de este 4760 proyecto final es construir un navegador GPS para los corredores que son nuevos en su vecindario. Por ejemplo, si alguien es nuevo en la Universidad de Cornell, College of Engineering, y quiere correr alrededor del quad de ingeniería todos los días, este sistema de navegación corredor tiene las siguientes funciones para asegurarse de que no se perdería o encontrar algunas situaciones indeseables:

1.Navegación: Deje que el usuario elija el destino, luego lo navega hasta el destino diciéndole al usuario que gire a la izquierda o gire a la derecha en cada waypoint, o incluso con un ángulo de giro exacto. Esta parte es el núcleo del proyecto.

2.Temperature: Esta parte diría al usuario la temperatura exterior y hace una evaluación del suitableness para funcionar al aire libre.

3.Location: Esta parte le diría al usuario la latitud exacta y la longitud de su ubicación actual, con el hito cerca.


En cuanto a la interfaz de usuario, hemos creado un menú que se muestra en la pantalla TFT. El usuario puede interactuar con el sistema utilizando dos botones: 'siguiente' y 'confirmar'. El usuario puede cambiar entre submenús e introducirlos presionando estos dos botones. Por otra parte, una voz humana se mostraría para decirle al usuario si debe girar a la izquierda o derecha para que no tendría que mantener un ojo en la pantalla cuando se ejecuta



Diseño de Alto Nivel top

Visión de conjunto

Nuestro dispositivo proporciona la guía básica de la navegación de la ruta usando GPS. Una unidad de microcontrolador PIC32 (MCU) recibe datos GPS de un módulo receptor y el usuario puede interactuar con el sistema utilizando dos pulsadores. Los pulsadores permiten al usuario moverse por diferentes menús, realizar selecciones y volver a los menús anteriores o salir de la función actual. Durante la navegación de ruta, la MCU muestra información de ruta en una pantalla LCD y proporciona indicaciones de giro a través de la salida de audio, así como el mensaje impreso en la pantalla TFT. Las rutas se guardan en la memoria del microcontrolador con antelación en el formato de una secuencia de puntos de paso.

El módulo GPS envía cadenas NMEA que contienen ciertos datos GPS a través de una línea de comunicación serie. La MCU puede controlar la velocidad de la conexión de datos, la velocidad de actualización y el tipo de información que proporciona el módulo. Elegimos una velocidad de 9600 baudios con una velocidad de actualización de 1 Hz para la nueva información, que es lo suficientemente rápida para nuestra aplicación. El módulo GPS proporciona las oraciones GPGGA y GPRMC NMEA a la MCU. Sólo usamos la oración GPGGA en nuestro proyecto, que incluye prácticamente toda la información que necesitamos, como la latitud, la longitud, la altitud, la velocidad y el rumbo del receptor, la hora UTC actual y el estado de la fijación del satélite GPS.

El sensor de temperatura mediría la temperatura exterior y ayudará a los corredores a hacer una evaluación del ambiente al aire libre y evitar correr en climas extremos.


Diagrama de bloques




Compensaciones de hardware y software

Hubo varias compensaciones para el hardware y el software utilizados en el proyecto.

Para el hardware, hemos intentado minimizar la cantidad de periféricos y el espacio que toman. Al principio queríamos usar un altavoz para dar salida a la voz humana, pero resulta que el único altavoz disponible en el laboratorio toma demasiado espacio mientras requiere una mayor fuente de alimentación. En consecuencia, decidimos usar un auricular para dar salida a la voz humana. Al hacerlo, pudimos eliminar el altavoz grande. Al minimizar la cantidad de hardware, optimizamos la cantidad de hardware extra y entradas adicionales en el microcontrolador.

Para el software, debido a la potencia limitada del microcontrolador, en lugar de usar la fórmula de distancia de dos multiplicaciones y sumatoria, y una raíz cuadrada para calcular la distancia, utilizamos una comparación con los umbrales de latitud y longitud independientemente para minimizar la Número de ciclos utilizados. Además, se utilizó el método matemático básico para calcular los ángulos de giro en coordenadas 2-demensionales, pero resulta que los ángulos aproximados son bastante razonables.

Matemáticas de fondo

A continuación se muestran fórmulas para calcular los ángulos de giro.



Trabajo existente

Hay numerosas obras existentes para el sistema de navegación GPS microcontrolador. Un ejemplo es el proyecto Cornell ECE4760 de Jason Setter y Jeff Setter, que utiliza ideas similares para guiar a la gente. Sin embargo, las obras existentes se basan principalmente en AVR. Nuestro sistema está basado en PIC32, y proporciona características de audio y calcula ángulos de giro exactos para evitar la ambigüedad en la navegación, que no se ha encontrado en trabajos anteriores.

Hardware arriba

Diseño de Hardware

Unidad GPS
El núcleo del dispositivo de navegación es la unidad GPS. El módulo GPS que utilizamos es el Adafruit Ultimate GPS Breakout v3. Puede funcionar en 5V-3.3V con un consumo de corriente de 20mA y emite las cadenas de datos estándar NMEA 0183 a 1, 5 o 10 Hz. Dado que emite datos en serie, conectamos las líneas de transmisión (TX) al UART2 RX (pin22) en la MCU. Comienza a enviar datos al MCU inmediatamente después del encendido, aunque los datos no son significativos hasta que el receptor recibe una posición fija de los satélites GPS. En nuestras pruebas, el arranque en frío (tiempo hasta una fijación de posición) fue generalmente menos de dos minutos. Utilizando este módulo GPS, podemos recopilar datos de ubicación, comparar ubicaciones y determinar cómo debe proceder el usuario en sus movimientos.

Salida de audio
Utilizamos el canal DMA para emitir una voz humana que podría indicar al usuario a qué dirección dirigirse. Grabamos la voz de Bruce diciendo 'gire a la izquierda' y 'gire a la derecha' y adaptamos un programa Matlab para convertir los archivos wav en dos arrays de 4 bits y almacenarlos en la memoria PIC32. Jugamos la voz con el canal DMA cuando estamos lo suficientemente cerca de un punto de la vía. Utilizamos un DAC interno de 4 bits y CVref (pin25) como la salida de la señal de audio. La matriz convertida se puede encontrar en el archivo de cabecera Left_Right_sound.h. Para escuchar el audio claramente, la forma de onda debe ser amplificada, y para suprimir el ruido, la forma de onda también debe pasar a través de un filtro de paso bajo. Establecemos la frecuencia de corte del filtro de paso bajo como 10kHz. A continuación se muestra el esquema del amplificador que diseñamos.




Sensor de temperatura
El sensor de temperatura que se utilizó fue DS18S20. Es un sensor de temperatura digital, que se comunica con MCU con un protocolo de comunicación de un solo cable. El RA0 (pin2) de la MCU y el pin2 del sensor de temperatura se conectaron y se utilizaron como bus de un solo hilo. El único bus de alambre fue enganchado a Vcc a través de una resistencia pull-up. Puesto que el Vcc que usábamos era 3.3V en vez de 5V, correspondientemente, utilizamos resistencia pull-up 3K en vez de 4.7K. El diagrama de sincronización de DS18S20 se puede encontrar en las páginas 13 y 14 en la hoja de datos DS18S20.
The initialization timing slot and writing “0x44” timing slot waveform on oscilloscope are shown below.





Añadimos un filtro mediano para el sensor de temperatura. Se seleccionó la mediana de cada 3 medidas como resultado. El ruido ocurre en algunos marcos, y un filtro medio con un tamaño de 3 es bastante capaz de ocuparse de eso basado en nuestro experimento.

Interfaz de usuario: Salida TFT
La interfaz de usuario es a través de una salida TFT que imprime estadísticas y menús para el usuario. Hay tres opciones: clima, ubicación y navegación.

En el modo de clima, muestra la temperatura para usted, tanto la temperatura en grados Celsius y Fahrenheit. Si el sensor de temperatura se elimina, mostraría "No Temp Sensor" para usted.

En el modo de localización, si no hay señal GPS, se lo diría. Si hay señal GPS, le mostrará la longitud, latitud y tiempo EST en la pantalla. Además, si está en Engineering Quad, le diría a qué edificio está cerca. Las imágenes de demostración se muestran a continuación.

En el modo de navegación, la primera pantalla le permite seleccionar el área que desea ir, la segunda pantalla es la que construye en esa área que desea ir, y si ha seleccionado un edificio, lo navegaría. Cuando usted está cerca de un punto de paso, le diría que gire a la izquierda o gire a la derecha para qué grado, y después de un tiempo le dicen que siga adelante. Cuando llegue el destino, le diría que llegó, luego saltar de nuevo a la segunda pantalla. Se grabaron imágenes de los cuadros clave para la navegación de demostración de Duffield a Carpenter lib. Todas las imágenes de demostración para TFT LCD se pueden encontrar aquí.

Interfaz de usuario: Pulsador

El cursor en la pantalla TFT es manipulado por dos pulsadores. Uno es "siguiente" para mover el cursor hacia arriba y hacia abajo, otro es "confirmar" para entrar en la página siguiente o anterior.

El software detecta el estado del pulsador. Si un botón es empujado, el software debounce eso primero, después cambia la máquina de estado correspondiente. Los detalles para la máquina de estado estarían cubiertos en la parte de diseño de software. El esquema para nuestro sistema se muestra en los apéndices.
Software Flowchart
The Flowchart of the software part is given below.



Sentencias NMEA Recibiendo y Analizando

Lo primero que hay que hacer con el software es leer las frases NMEA y decodificarlas. Utilizamos la función 'PT_GetSerialBuffer (struct pt * pt)' para leer la salida del receptor GPS carácter por carácter. Al principio de esta función prueba si hay un error de trama cuando PIC32 se comunica con el módulo GPS usando UART. Si es así, borraría todos los errores y tiraría toda la oración y esperaría hasta que llegara el siguiente dato válido. Puesto que todas las frases NMEA terminan con '\ n', esta función verificará si el carácter entrante es '\ n' y guarda todos los caracteres en la matriz 'PT_term_buffer' si es así.

Esta función analiza todas las frases NMEA comienzan con 'GPGGA', que es un tipo de frases NMEA que contiene toda la información que queremos, como UTC, latitud y longitud. Con más detalle, utiliza 'sscanf' para analizar y guardar información útil en las siguientes variables: tipo_ GPS, tiempo_ GPS, GPS_curLat, GPS_NS, GPS_curLon, GPS_WE, Calidad GPS.

Jerarquía de menús

La interfaz de usuario fue implementada por una enorme máquina de estado. A continuación se muestra la jerarquía del menú.

   - Tiempo: (muestra la temperatura exterior)
   - Ubicación: (muestra el UTC, la latitud y longitud actuales, y el punto de referencia cercano)
   - Navegación: (elija el destino y comience la navegación)

           Ingeniería Quad
                  O Philips Hall
                  O Duffield Hall
                  O Kimball Hall
                  O Hollister Hall
                  O Thurston Hall
                  O Salón del Carpintero
           Colegio de Administración
           Campo Hoy & Sch
Una vez más, todas las imágenes demo para TFT LCD se puede encontrar aquí.

La jerarquía del menú se configura mediante una máquina de estado relativamente complicada. Para obtener más información sobre esta máquina de estado, consulte el archivo "menu.h" en nuestro archivo fuente a continuación.
Cálculo de navegación y encabezado

Utilizamos GPSvisuallizer.com para crear y trazar todas las rutas posibles de que el punto de inicio es el hall de Philips o el Duffield Hall y el destino es uno de los edificios principales dentro de Engineering Quad. Todas las rutas se guardan como archivos gpx. A continuación, convertimos los archivos gpx en archivos de cabecera de texto que es legible por el microcontrolador y guardamos todas las rutas en el formato de arrays de waypoint mediante un programa Python. En el archivo principal files.h, todos los puntos de vía se presentan por su latitud y longitud. Cuando el usuario escogió el destino, el programa cargaría la matriz correspondiente a su ubicación actual (punto de inicio) y al destino. El diagrama de flujo del modo de navegación se ha mostrado antes. Como podemos ver en el diagrama, en el modo de navegación, el microcontrolador mantiene comparar la ubicación actual del usuario con el siguiente waypoint. Cuando el usuario se acerca lo suficiente al siguiente waypoint, la salida de audio genera una voz humana para decirle que gire a la izquierda o derecha en el waypoint y la pantalla TFT mostrará simultáneamente la información de encabezado para el usuario.

Bajo el archivo GPS_Navigation, la función 'get_leftright' devuelve 0 (significa derecha) o 1 (significa izquierda) en cada punto para indicar si el usuario debe girar a la izquierda oa la derecha. Esto se implementa básicamente calculando el producto cruzado de dos vectores, uno comienza en el último waypoint y termina en la ubicación actual, uno comienza en la ubicación actual y termina en el siguiente waypoint;

La función 'waypoint_close' devuelve true si la ubicación actual es lo suficientemente cercana al waypoint;

La función 'get_angle' devuelve un número flotante de grados que el usuario debe activar en cada waypoint.

Resultados top

Parámetros del programa

Con Protothreads, la concurrencia está garantizada en nuestro sistema. La exploración de teclas se ejecuta cada 1 ms, la pantalla se actualiza cada 1 segundo. El sensor de temperatura se actualiza cada 750 ms. UART comunicación entre el módulo GPS y MCU, cálculo de navegación, estos dos hilos produce al principio, por lo tanto períodos para ejecutar estos dos hilos son por lo general menos de 1 ms.

Para hacer la navegación fiable, definimos 10m cerca del punto de paso como "cerrar". En lugar de utilizar la coordenada Esfera para el cálculo, aproximamos el sistema de coordenadas como coordenadas bidimensionales, porque la longitud y la latitud no cambian mucho dentro del cuadrángulo de ingeniería, podría ser pensada planas por piezas. Si nos quedamos en una posición fija, el error para el módulo GPS que medimos es 0,000023 grados de longitud, 0,000017 grados de latitud, y en metros, es decir, aproximadamente 2 m.

Exactitud

La precisión de nuestro proyecto depende de la precisión del receptor GPS que usamos. La mayoría de los receptores GPS son exactos a menos de 5 metros la mayor parte del tiempo. En nuestras pruebas, encontramos que la exactitud de nuestro receptor estaba generalmente bien dentro de 2 metros. Sin embargo, la fiabilidad del sistema está sujeta a la ubicación y las condiciones meteorológicas. El sistema no es confiable en condiciones climáticas extremas, o trabajar en interiores.

Usabilidad

El dispositivo actual requiere que se mire a la pantalla para conocer la dirección de giro. Si el usuario tiene problemas de visión, podría escuchar el audio para seguir la guía.
Conclusiones arriba

Resultados finales

Al final de este proyecto, tenemos un dispositivo GPS que es capaz de tomar entradas de un sitio, similar a los puntos de trazado en Google Maps, cargar estos puntos en el GPS, y luego siga estos puntos con el GPS para saber a qué dirección A su vez una vez que estamos cerca del waypoint, además de contar información útil sobre el rumbo, la distancia al waypoint y la ubicación GPS que son útiles para saber hasta dónde se encuentra el waypoint. Además, en el modo de explorador, podemos agregar waypoints con solo presionar un botón, descargar estas coordenadas a la computadora usando UART y luego mostrar la ruta que fue grabada en un sitio similar a Google Maps.

En nuestro proyecto, hubiera sido bueno agregar motores de vibración como un medio de retroalimentación háptica. Esto permitiría al usuario recibir la navegación sin mirar la pantalla ni los LEDs. Además, el embalaje del proyecto podría haber sido más pequeño de modo que hubiera sido un dispositivo más utilizable.

Estándares

NMEA

NMEA es una combinación de especificaciones eléctricas y de datos para la comunicación entre la electrónica marina, que en este proyecto receptor GPS, y otros tipos de instrumentos. Esta norma utiliza ASCII, comunicación en serie para definir cómo se transmiten los datos de una base a varios receptores. Esta norma también define el contenido de cada tipo de mensaje, y los receptores pueden analizar los mensajes con precisión. (Adaptado de Wikipedia, https://en.wikipedia.org/wiki/NMEA_0183).

GPX

GPX o GPS Exchange Format, es un esquema XML diseñado como un formato de datos GPS común para aplicaciones de software. En nuestro proyecto, usamos gpx para especificar las latitudes y longitudes de orden y waypoint. Las coordenadas se dibujan en GPS Visualizer y luego se convierten en un archivo de texto en el que las rutas se almacenan como una lista de waypoints de latitud / longitud separados por comas en archivos de texto. La conversión puede hacerse en el sitio web gpsvisualizer. Entonces podríamos guardar el archivo de texto en nuestro microcontrolador PIC32 o su memoria extendida.

UART

En nuestro proyecto, tenemos que descargar los datos del GPS desde el sitio web en la computadora portátil, a continuación, convertir los datos y luego enviarlos al microcontrolador. Mientras que un corredor está funcionando, el microcontrolador debe recibir datos del receptor del GPS y hacer un cierto cálculo. La comunicación entre el ordenador portátil, el microcontrolador, y el receptor del GPS es por un sistema de UART. Todas las comunicaciones UART transmitirían y recibirían mensajes en el mismo formato de protocolo.

Impacto social

- Consideraciones de seguridad

El riesgo principal de seguridad con este proyecto es el choque eléctrico ya que el usuario lo está usando en su cuerpo. Todo el hardware funciona con menos de 3.3V a baja corriente. Estos niveles de potencia no dañarán al usuario, incluso si toca las juntas de soldadura expuestas. Además, nuestro sistema evalúa el nivel de temperatura y desalentará a los usuarios a correr en condiciones climáticas extremas. Dado que este proyecto es sólo un sistema de navegación que proporciona información para el corredor, no hay factores de riesgo de otra manera.

- Factores humanos y usabilidad

El propósito principal de nuestro proyecto es ayudar a los corredores cuando no están familiarizados con la ruta, o en algunas condiciones climáticas especiales, como en la noche oscura o días de niebla extremos. Además, a veces corredores corren en situaciones complicadas de tráfico, por lo que no es conveniente para ellos mirar hacia abajo en la pantalla TFT todo el tiempo. En consecuencia, nuestro sistema generaría algo de sonido para recordar al corredor cuando se acerca a un waypoint, por lo que sólo tienen que comprobar el navegador en este punto del tiempo, entonces sabrían si deben girar a la izquierda o derecha, y cuántos grados Ellos deben girar exactamente.

- Consideraciones de diseño de interfaces para personas con necesidades especiales

A veces, cuando el corredor llega a un tenedor en el camino, sólo decirle al corredor a la izquierda o la derecha no es suficiente, porque puede haber varios caminos de la rama en su izquierda o derecha. En estos casos, mostraríamos el grado de giro exacto en la pantalla para señalar la dirección exacta.

- Consideraciones sobre propiedad intelectual

Hemos encontrado varios proyectos anteriores ECE4760 finales también haciendo uso de los navegadores GPS runner. Agradecemos el gran ejemplo del grupo anterior, Jason Setter y Jeff Setter establecido para nosotros. La principal diferencia de nuestro proyecto es que cuando el corredor se acerca a un waypoint, generamos un sonido para informar al corredor para comprobar la pantalla TFT. Además, el sistema que construimos es usable, con una mejor interfaz de usuario, y almacenamos los datos localmente por adelantado para que el usuario no tenga que configurar rutas manualmente antes de la salida. Además de la parte del GPS, nuestro proyecto refirió o adaptó el protothread escrito por Adam Dunkels, y la versión extendida por la tierra de Bruce, la biblioteca de TFT y el programa DS18S20 en PIC32 escrito por Tahmid Syed Mahbub.

Hemos reconocido todo el uso del código y hemos respetado todas las declaraciones de copyright tanto en código como en hardware. Hemos dado crédito a todos los dispositivos de hardware que se utilizaron en este proyecto, así como el código que se hizo referencia en nuestro programa final. Audio para seguir la orientación.
System Schematic












0 comentarios:

Publicar un comentario