CNCBASHER / ardupilot-mega

Automatically exported from code.google.com/p/ardupilot-mega
0 stars 0 forks source link

NMEA Library doesn't work #138

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Run the NMEA test under GPS
2. Every sentence delivered reports a checksum error.

What is the expected output? What do you see instead?
Expected
Proper parsing of the data.

Actual
Checksum errors.

There were two main problems. The first was the checksum issue, the second was 
that there were spaces between the various values in the GGA and VTG parsers. 
The NMEA standard does not mandate such spaces. (I have the NMEA 0183 document)

I have fixed these issues with the attached file. I believe the checksum should 
still be calculated however I have not yet fixed this.

Another issue is that the errors from the GPS are not logged to the console so 
the GPS just shows up as inop for no particular reason.

Original issue reported on code.google.com by logan.gr...@gmail.com on 27 Sep 2010 at 4:23

Attachments:

GoogleCodeExporter commented 9 years ago
NMEA support is currently a low priority with us; the amount of RAM involved in 
buffering a full set of NMEA sentences is almost prohibitive.

Original comment by DrZip...@gmail.com on 27 Sep 2010 at 5:49

GoogleCodeExporter commented 9 years ago
I am using the Venus skytraq at 10hz. It is possible to remove all but the 
desired sentences from the output of the Venus. In this scenario it is possible 
to use 82 bytes plus an additional 82*2 for the serial port buffer. 82 bytes is 
the maximum length of a single nmea sentence.

Gga and vtg are not multipart sentences which is why I think you can use such a 
small amount of ram.

I believe that this optimized buffer is less than what is being currently 
allocated for the gps port.  

Original comment by logan.gr...@gmail.com on 27 Sep 2010 at 11:54

GoogleCodeExporter commented 9 years ago
I can report that the NMEA test code works fine now and this ticket seems to me 
like it should be closed.
I use a LS20031 5Hz NMEA GPS module from here:
http://www.sparkfun.com/products/8975 
( and configured it according to here: 
http://diydrones.com/profiles/blogs/using-the-5hz-locosys-gps-with
I also write a quick script to allow the GPS module to be re-configured without 
unplugging it from the APM ( see below):

example output from library test code:
GPS NMEA library test

Reinitializing GPS

gps: Lat:-27.5043678283 Lon:153.0271148681 Alt:0.0000000000 GSP:0.02 COG:0 
SAT:7 FIX:1 TIM:11250500

gps: Lat:-27.5043640136 Lon:153.0271148681 Alt:0.0000000000 GSP:0.02 COG:0 
SAT:7 FIX:1 TIM:11250625

...etc...

/*
1 - set Serial1 speed to the GPS modules default speed, eg 4800 or 9600 or 
whatever it takes to see NMEA data strings in the terminal.
1.5 - ( upload it and try it , obviously!)
2 - with the terminal open and the NMEA strings still appearing, change the 
bottom-right of the Terminal to "Both NL & CR" 
3 -Copy and paste this code: $PMTK251,38400*27 to the top box next to the "Send 
button" , and press send!
4-Then the NMEA should disappear, and starting showing strange values. 
5 - Go set Serial1 speed to 38400 in the above code , and upload the sketch 
again. 
 Open the Serial Monitor again, and  You should the NMEA data again... =)
6- Then copy&paste this code: $PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28 
then click Send, this should turn Off all sentences except GGA and RMC
7-Copy&paste now this code: $PMTK220,200*2C ( and press send ) This should 
increase the updates to 5hz... 

parts taken from: 
http://diydrones.com/profiles/blogs/using-the-5hz-locosys-gps-with
*/

void setup() {

 Serial.begin(38400);
 Serial1.begin(38400); 
  Serial.println("GPS passthru programmer ");

}

void loop () {
            while(Serial1.available() > 0){
                byte incoming = Serial1.read();
                Serial.print(incoming, BYTE);
            }
                        while(Serial.available() > 0){
                byte incoming = Serial.read();
                Serial1.print(incoming, BYTE); 
            }
}

Original comment by davidb...@gmail.com on 22 Dec 2010 at 11:33

GoogleCodeExporter commented 9 years ago

Original comment by analogue...@gmail.com on 2 Jan 2012 at 9:17