RTK gps on a budget (Quectel LC29HEA)

Rolf, that is awesome!! Some have had problems with the 5hz; I hope yours goes well. When you have some time after getting the 5hz set, could you add some details for a newbee? I need to do the same thing. Florida RTK NTRIP data. Where did you get the board? I see you posted what antenna you got. How did you configure it? Don’t want to be a PITA, but you seem to be doing what I want to do and the first I’ve seen who is making real progress.

1 Like

Just keep watching the topic. Details will follow as more folks test. My own should be in hand soon, and I will try and help out.

2 Likes

datasheet indicated 115k, so I tried only at this speed. Everything is fine now. Updated the firmware.

1 Like

I have just connected the GPS to a Mateksys H743 Slim with ArduCopter V4.6.0-dev (e27dea70).
I set the LC29HEA to 5 Hz output rate with the QGNSS.exe. To be able to see the text window of QGNSS.exe whether commands have been successfully accepted, it is recommended to switch off the GNSS system by:

$PAIR003*39

Then switch the output frequency to 5 Hz resp. 200 ms:

$PQTMCFGFIXRATE,W,200*6A

and write this to the non-volatile memory:

$PQTMSAVEPAR*5A

In Ardupilot I have set the serial interface to GPS and 460800 baud, GPS parameters
GPS_AUTO_CONFIG to 0,
GPS_SAVE_CFG to 0,
(so that Ardupilot does not try to change anything on the GPS until we know whether it is working)
and the GPS type to NMEA:
GPS1_TYPE to 5 (NMEA)

In order for the UART interface to work on the plug contacts, the slide switch must be set in the direction of the arrow:

Ardupilot has recognized the GPS immediately. However, with the Missionplanner the import of the NTRIP data, although the MP receives them, unfortunately does not work (or Ardupilot does not recognize that a Float or RTKfix is present). I’m not sure about that.

Here are the times of the signals:

Attached is the output of the GPS as preset from the factory:
output.txt (51.4 KB)

Rolf

1 Like

It looks to me like all the NMEA data in that txt file contains no valid fixes.
At first glance, all 145 of the GGA lines have no Lats or Lons in them.

That’s right, I just made the recording on the workbench without GPS reception and not outside. What matters to me is which data records are actually output.

1 Like

You can turn any of the NMEA line types on and off individually with $PAIR062 commands (but you probably know that).

Hey, quick trivial question: I don’t see an antenna wire with that antenna, and I see you have connected yours directly to the board. Did you find a gps antenna wire? Or is it just coax?

@SailorK If the GPS board is that small, I don’t bother with a coaxial cable.

10 Hz also works (Set GPS_RATE_MS to 100) Of course, whether this makes sense is another matter :

I guess you will have to look at the Ardupilot code to find out why the RTK correction data is not accepted by the GPS or if it is just an NMEA problem that RTK float/fix is not displayed even though there is an RTK fix.

Rolf

I finally have been able to get ‘Fixed RTK’ fixes !!!

Here was my solution at Quectel forum.

EDIT: Spoiler — The LC29HEA’s need to use RTCM 3 ntrip caster mount points that add MSM4 data…

Here is the LC29H RTCM protocol:

1 Like

Congratulations Dale,
now “only” the RTK implementation in Ardupilot is missing :wink:

Rolf

MSM4 is more common than MSM7 in my experience. If your mountpoint is using MSM7, it should technically be superior in precision, but in practical terms (particularly for our applications), MSM4 is more than adequate, and the additional bandwidth used by MSM7 is likely more detrimental than the benefits of using it. EDIT: The LC29HEA can use both MSM4 and MSM7 message formats.

I received my module this week and connected power this morning. I have FW 2023/10/31, and it seems to be functioning.

For now, I will likely set it up outdoors on a Raspberry Pi that repeats the serial data over the LAN so that I can do some basic testing and configuration. I’m using a directly attached helical antenna from CUAV for initial testing.

Thanks to @DaleCKramer for testing to date and the YAT config that looks like it may be very helpful. I have also downloaded Quectel’s QGNSS tool.

Thanks to @Rolf, as well!

I make no promises that I will achieve better success than those who’ve preceded me here. I do intend to connect an autopilot this weekend and see if I can get RTCM3 to successfully pass through the autopilot via Mission Planner’s existing interface.

I will investigate.

3 Likes

Actually I am pretty sure that MSM7 will also be decoded. My RTCM 3 ntrip caster mount point only sends out MSM4. Here is the published RTCM protocol that the LC29H’s decode:

Tested MSM7 (1077, 1087, 1097, 1127, 1230, 1005), and fix type immediately changed to an RTK status.

Plot is with the helical antenna and my local fixed base station. I don’t even have the LC29HEA very well located, as the house is likely blocking a good portion of its sky view on the west side.

2 Likes

I’ve achieved quite a bit of success this weekend. Here’s the update:

image

The screenshot is the result of the settings file I will attach at the bottom of this post along with a QioTek ZealotH743, Quectel LC29HEA, and a helical antenna from CUAV. I did achieve slightly better time-to-fix results using a survey grade antenna, but I did not collect any detailed data to support that observation. RTK Fixed results were repeatable between boot cycles. This was a bench test only, and I did not fly/drive with the autopilot due to time constraints.

RTCM3 from my local fixed base was injected via Mission Planner over MAVLink, successfully using both MSM4 and MSM7 correction data during separate tests.

A testing was done via Rover 4.5.3, which uses the same GPS backend and drivers as Copter and Plane. No firmware changes were required.

All tests were at 5Hz. It is demonstrably worse in almost all cases to increase the message rate to 10Hz, so I didn’t even bother.

Parameters of note:
GPS_INJECT_TO,127
GPS_RATE_MS,200
GPS_TYPE,5
SERIALx_PROTOCOL,5
SERIALx_BAUD doesn’t matter - GPS detection is auto-bauded.

Use 460k baud on the LC29HEA if you want RTCM3 to be passed through the autopilot. 230k was unreliable at best (mostly non-functional). RTCM3 over MAVLink has a high bandwidth requirement, so this is an expected outcome.

ArduPilot uses only the GGA, RMC, and VTG sentences for the basic NMEA driver. To save on bandwidth, I disabled all other NMEA output as well as the proprietary messages that are useless except while using Quectel’s software.

HDOP is the only performance metric present in the data that ArduPilot can parse, so it is unsurprising that other users have noted that metrics like horizontal and vertical accuracy go unreported in the downstream telemetry.

I was unable to achieve better than RTK Float while the module was in “drone” navigation mode. As soon as I switched it back to “normal” navigation mode, it easily achieved RTK Fixed. I’m not sure what might cause that specific behavior, but it was repeatable. So unless anyone has a concrete reason why “drone” mode is somehow better, don’t use it. I’m left wondering if whatever filtering happens in “drone” mode accounts for the position lag we saw in previous user logs. The attached file sets “normal” mode.

The recommended settings from the other forum seem to include some undocumented settings, as well as recommending some settings that the spec guide says are incompatible with the LC29HEA. However, all commands in the attached file appear to work as intended, and I commented it to the best of my ability so that you can see what’s happening on each line.

To use the attached file, rename it with a .ini extension, open QGNSS, and open the “Command Console” from the Tools menu. Click “Load” and select the .ini file. Make sure your GPS is connected, and click the Run button. QGNSS will endlessly loop through the command set until user intervention, so there’s a long delay at the end to allow you to stop the sequence before it restarts. The currently executing command is highlighted in red.

You may have to run the commands more than once if you have changed the baud rate from the default of 460800.

I found it easiest to switch both of the little selector switches toward the antenna connector while using the USB connection to QGNSS, and then switch them both back toward the USB-C connector while using the autopilot.

LC29HEA_ArduPilot.txt (6.1 KB)

4 Likes

Awesome, sir!!! You are a rockstar! So, to net it out, I assume the L29HEA board is functional for RTK use (in a rover). Your testing was with a local base station, I believe? I don’t see any reason it wouldn’t work with NTRIP? Quick question: where did you buy your LC29HEA? There have been reports of some chinese sellers delivering the 1HZ version instead of the 10HZ.

No, it just means I’ve been able to find some settings that help things along. Recommend waiting for some more vehicle logs before getting too excited.

Do not conflate correction source with correction data. It’s all RTCM3. It doesn’t matter where it comes from, assuming the source is reliable and nearby.

I got it on the only US listing on eBay for LC29HEA. It appears genuine. Quectel would do well to distribute via more legitimate means.

1 Like

Is this it? Quectel LC29HEA High Precision Centimeter Level RTK Module GPS L1 L5 Band Drone | eBay

Here is the Aliexpress one I see: Quectel LC29HEA High Precision Centimeter Level RTK Module GPS L1 L5 Band Drone | eBay

I already have the helical antenna on the way. I’m truly lucky that the Florida govt NTRIP network is both comprehensive and free. A local small airport has a base station, 5 miles away. So solid time corrections are available. Yuri, you may remember that you also helped me sort that process out and thanks again for that help as well.

Awesome. A thousand thanks Juri . Also for the *.INI file, which makes a lot of typing easier. Unfortunately it’s raining here (all the time) and even with the u-blox f9p I rarely get an RTK float and no RTK fix from indoors, so I’ll have to wait a bit longer to try it out.

Intended to fly it as a “ride along” sensor on one of my Copters today, but that one needed some fixing up and tuning, which took the rest of the day. It’ll be at least a week before I get back to it. Looking forward to seeing what y’all do in the meantime.

1 Like