"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