Notas de la presentación Navegación Robotica por GPS

Esta página contiene algunas notas y materiales para complementar la charla que se presentó para el Robotifest 2014 en la UCR.

Enlace a la Presentación

Slide 1 Título

Slide 2 Agenda

Slide 3 Descripción del protocolo NMEA 0183

Slide 4 Probando y configurando el GPS antes de la programación.  En el archivo "GPS Configs" abajo hay varios comandos $PMTK que usaba para experimentar y demostrar como modificar la configuración del GPS. Todo se puede hacer usando una comunicación serial directo con el sketch a la derecha.  No todos los GPS utilizan los mismos comandos, hay que buscar el datasheet de su dispositivo.

COLD START era muy útil para borrar la memoria del GPS cuando parece que no quiere alcanzar el "lock".

Slide 5 Según esta mapa el señal de WAAS si llega a Costa Rica.  Yo habilité el feature en mi GPS y parece que ayuda con la precisión.

Slide 6 El formato que sale directamente del GPS es bueno para humanos leyendo mapas pero difícil para hacer cálculos.  TinyGPS++ hace la conversión a un formato más fácil de aprovechar en el Arduino.

Slide 7 La librería que utilizo para parsear el protocolo NMEA es TinyGPS++.

Slide 8 El HDOP es el parámetro que se usa para determinar si la ubicación recibida del GPS es suficiente precisa para su aplicación.  En el caso de mi aplicación hay varios puntos donde reviso el HDOP y tomo acciónes.  Por ejemplo mi robot ni mueva hasta que logra un nivel de menos 1.5 (150 en TinyGPS++).

Slide 9 Es muy difícil calcular si el robot debe doblar a la izquierda o derecha usando rumbos de 0 a 360 grados.  Normalizando los rumbos de 0 a +/- 180 hace la matemática más simple.

También es importante entender que aunque el GPS puede calcular el rumbo actual, solamente funciona bien a cierta velocidad.  Por lo tanto una brújula es requerida para complementar el GPS y determinar el rumbo aunque el robot esta parado.

Código que utilizo para comunicar directamente con el GPS antes de empezar la programación (funciona para cualquier dispositivo Serial):

Hay que conectar el GPS a los pines 2 y 3 del Arduino (RX a TX y TX a RX). En este caso mi GPS utilizaba 9600 bps pero podria variar.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup()  

{

  // Open serial communications and wait for port to open:

  Serial.begin(9600);

  while (!Serial) {

    ; // wait for serial port to connect. Needed for Leonardo only

  }

  // set the data rate for the SoftwareSerial port

  mySerial.begin(9600);

}

void loop() // run over and over

{

  if (mySerial.available())

    Serial.write(mySerial.read());

  if (Serial.available())

    mySerial.write(Serial.read());

}