Módulo GPS - RoboticsURJC/tfg-jlopez GitHub Wiki

Para este proyecto he decidido comprar el módulo NEO 6M V2 como módulo GPS.

Este módulo fue adquirido en Amazon

Para obtener toda esta información, me he basado en las siguentes fuentes: fuente 1 y fuente 2.

Funcionamiento del GPS

El receptor GPS usa la diferencia de tiempo entre la transmisión y la recepción para calcular la distancia. El receptor debe tener en cuenta los retrasos en la propagación o en la disminución de la velocidad de la señal producidos por la ionosfera y la troposfera. Conociendo horario y la posición de 3 satélites (trilateración) el receptor puede calcular su posición en los ejes x,y,z.

Informacion más completa aquí

Poster educativo

Esquema de conexiones

Sabiendo que para hacer funcionar el sensor necesitamos usar el puerto serie, tenemos que encontrarlo en la raspberry:

La imagen pertenece a esta web Seguidamente se puede hacer la conexión física. Aqui puedes ver un esquema de toda la conexión:

El módulo GPS no se incluye directamente desde Fritzing, hay que descargarlo desde internet. Puedes encontrarlo aquí. Descárgalo, cárgalo y desde el apartado de protoboard podrás ver el módulo.

Si se enciende el led azul, significa que el sensor funciona y recibe datos.

Software necesario

Puerto serie

Una vez conectado el sensor a la placa, es necesario configurar el puerto serie de la Raspberry pi (fuente 1 y fuente 2):

  • Abre raspberry config:
sudo raspi-config

Ve a interfacing Options -> Serial (deshabilitar login shell -> no y habilitar el serial interface -> yes) -> Aceptar

  • Reinicia la pi:
sudo reboot
  • Es necesario editar /boot/config.txt:

¡¡¡ATENCIÓN!!! para el SO más actual (raspbian bookworm) habrá que editar /boot/firmware/config.txt

sudo nano /boot/config.txt # sudo nano /boot/firmware/config.txt

Al final de este fichero hay que añadir las siguientes líneas:

dtparam=spi=on
dtoverlay=pi3-disable-bt
core_freq=250
enable_uart=1
force_turbo=1
  • Ajecuta:
ls -l /dev

y tienes que comprobar en qué orden están definido el serial0 o serial1 y a qué apunta serial 0:

Si serial0->ttyAMA0 entonces ejecuta:

sudo systemctl stop [email protected]
sudo systemctl disable [email protected]

Si serial0->ttyS0 entonces ejecuta:

sudo systemctl stop [email protected]
sudo systemctl disable [email protected]

¡¡¡ATENCIÓN!!! si solo aparece un serial definido cuando se miran los dispositivos en el S0 más actual (raspbian bookworm), no pasa nada siempre y cuando se haga:

cat /dev/ttyAMA0 # o cat /dev/ttyS0

y aparezcan datos.

Otra opción para comprobar si funcionan los puerto series es usando la herramienta minicom.

 sudo minicom -b 9600 -o -D /dev/ttyAMA0
  • Reinicia la pi:
sudo reboot

Librerías usadas

  • pynmea2: pynmea2 es una biblioteca de Python para analizar datos en formato NMEA (National Marine Electronics Association), utilizado comúnmente en dispositivos GPS y otros dispositivos de navegación. Te permite interpretar y trabajar con datos específicos como posición GPS, velocidad, altitud, etc.

Funcionalidad principal: Parsear (interpretar) mensajes NMEA recibidos desde dispositivos GPS para extraer información como latitud, longitud, tiempo, número de satélites, etc.

Instalación Raspbian buster:

sudo pip3 install pynmea2

Instalación Raspbian bookworm:

En versiones anteriores de Raspberry Pi OS, se podían instalar bibliotecas directamente en la versión del sistema de Python usando pip. Desde Raspberry Pi OS Bookworm, los usuarios no pueden instalar bibliotecas directamente en la versión del sistema de Python.

En su lugar, se deben instalar las bibliotecas en un entorno virtual (venv). Para instalar una biblioteca a nivel del sistema para todos los usuarios, se debe instalar con apt.

Un entorno virtual es un contenedor donde se pueden instalar de manera segura módulos de terceros para que no interfieran con tu Python del sistema.

  • Crea un contenedor:
python --system-site-packages -m venv <env-name> # siendo <env-name> el nombre de contenedor que desees
  • Entra al entorno virtual:
source <env-name>/bin/activate

El prefijo del comando en el prompt indica que la sesión actual del terminal está en un entorno virtual llamado .

  • Instala lo que necesites como hacías normalmente:
sudo pip3 install pynmea2
  • Para salir de un entorno virtual:
deactivate
  • serial: El módulo serial es parte de la biblioteca pyserial, que permite la comunicación serial en Python, es decir, la comunicación con dispositivos que se conectan a través de puertos serie (como UART, RS232, etc.).

Funcionalidad principal: Establecer comunicación serial con dispositivos externos, como un módulo GPS conectado a través de UART.

Código Desarrollado

  • 1º Versión: Parsea la información y solo imprime aquellos mensajes que son del tipo GGA.
import time
import string
import pynmea2
import serial

# $GPGGA,123519.00,4807.038,N,01131.000,E,1,08,0.9,545.4,M,-164.0,M,,,,*47 
    # GGA         -> Global Positioning System Fix Data
    # 123519.00   -> Hora 12:35:19 UTC
    # 4807.038,N  -> Latitud 48 grados 07.038' N
    # 01131.000,E -> Longitud 11 grados 31.000' E
    # 08          -> Cantidad de satélites recibidos 
    # 545.4,M     -> Altura en metros sobre el nivel del mar
    # *47         -> Checksum o valor de control, siempre comienza con *

while True:
    port = "/dev/ttyAMA0"
    ser = serial.Serial(port, baudrate=9600, timeout=0.5)
    dataout = pynmea2.NMEAStreamReader()
    newdata = ser.readline()
    #print(newdata)
    
    if newdata:
        try:
            message = pynmea2.parse(newdata.decode('ascii', errors='replace'))
            # imprime el mensaje del tipo $GPGGA 
            if(isinstance(message, pynmea2.types.talker.GGA)):
                print(message)
        except pynmea2.ParseError as e:
            pass
            #print(f"Error parsing NMEA data")

Este código seha creado a partir de estas fuentes: fuente 1 y fuente 2

Visualización en Google Maps

Tengo que conseguirlo y documentarlo

GOOGLE MAPS API

https://www.youtube.com/watch?v=l4QnAPgiD5Q

OPENSTREET MAPS, FIREBASE Y LEAFTLETS

https://www.youtube.com/watch?v=9ekLa6jKuAY

https://www.youtube.com/watch?v=KVjdId6NelA

https://www.youtube.com/watch?v=nRpBxiZMm0g

https://politicnewsbusterinsiderpostreview.blogspot.com/2021/03/vuejsrealtime-geolocation-tracking-with.html

https://www.youtube.com/watch?v=lTo_QFjj3dY

https://firebase.google.com/?hl=es

https://www.youtube.com/watch?v=oUs0j97Jo3A

https://www.youtube.com/watch?v=ILTo8IvFXJw

Estado actual del robot

27/06/2024

⚠️ **GitHub.com Fallback** ⚠️