Configuring the Quectel LC29HEA receiver for real-time RTK solutions

This is a follow up to my previous post in which I describe my first experience with the Quectel LC29H receiver. In this post I will go over the details on how I configured the rover and base receivers for a real-time RTK solution. These instructions are specifically for the LC29HEA receiver boards I bought on AliExpress, but, except for the references to the UART/USB slide switches, should work on any receiver board with an LC29HEA module.

The commands to configure the receiver are all described in the LC29H Protocol Specification, although it is not completely up to date with the latest firmware. Specifically, I had to read the latest firmware notes to find that 2 Hz and 5 Hz are now options for the position output rate. The commands all consist of strings of ASCII characters, but require a checksum at the end of the command. The easiest way to send and receive these commands is by using the command console window in the Windows QGNSS app from Quectel since it will generate the checksums for you with the click of a button.

To get started, download the app, open it up, connect the receiver to your computer with a USB cable, and connect an antenna to the receiver with the SMA connector. Check that the two slide switches on the receiver board are both set down towards the “USB” label.

Then use the “Set Device Information” option in the Device tab (or the “gear” icon in the toolbar) to find and configure the receiver communication settings. Set the Model to “LC29HEA” and the baudrate to 460800 as shown below.

QGNSS device configuration window

Once this is done, open up a “Text Data” window from the “View” menu and you should see a string of NMEA text messages scrolling through the window assuming your receiver is in its default configuration. It should look something like this:

NMEA messages in QGNSS text window

Next, open up a “Command console” window from the “Tools” menu which we will use to send configuration commands to the receiver.

Rover Configuration:

The next step is to enter the commands into the command console. We will first set up the rover. I’ve listed the command I used to do this below so that they can be cut and pasted into the QGNSS console. Note that the comments are for information only and should not be copied. I’ve also included the checksum for each command which can be copied or generated by using the “Checksum” button. Be aware that some commands don’t take effect until the parameters are saved to flash or the module is rebooted.

$PQTMRESTOREPAR*13 # restore PQTM params to default and reset
$PQTMCFGRCVRMODE,W,1*2A # set receiver to rover mode
$PQTMSAVEPAR*5A # save PQTM params to flash
# manually power cycle module
$PAIR062,2,0*3C # turn off GSA messages
$PAIR062,3,0*3D # turn off GSV messages
$PAIR062,5,0*3B # turn off VTG messages
$PQTMCFGNMEADP,W,3,6,3,2,3,2*37 # set decimal precision for NMEA
$PAIR050,200*21 # set pos output interval to 200 ms
$PQTMSAVEPAR*5A # save PQTM params to flash
# manually power cycle module

QGNSS Command Console Window ( commands to configure rover)

Once you’ve entered all the commands into the console, you can run them by consecutively pressing the “Send” button for each command. If you have made any modifications to any of the commands you will need to press the “Checksum” button first to recalculate all of the checksums.

These instructions assume the firmware on the module is no older than LC29HEANR11A03S_RSA which has an associated date of 10/31/23. You can use the command at the end of the screenshot above to check the version of firmware on your module. If your firmware is older than this, then I believe the only change you will need to make to these instructions is that the 5 Hz option is not supported and you will need to set the PAIR050 option to 100 instead of 200 which will set the output rate to 10 Hz instead of 5 Hz.

Base Configuration:

If you are going to use a second LC29H for a local base receiver, you will need to go through a similar process to configure that module. These are the commands I used:

$PQTMRESTOREPAR*13 # restore PQTM params to default and reset
$PQTMCFGRCVRMODE,W,2*29 # set receiver to base mode
$PQTMSAVEPAR*5A # save PQTM params to flash
# manually power cycle module
$PAIR432,1*22 # output RTCM3 MSM7 messages
$PAIR434,1*24 # output RTCM3 antenna position (1005)
$PAIR062,0,01*0F # Enable NMEA GGA message
$PQTMCFGSVIN,W,2,0,0,x,y,z*3B # set base location in XYZ coords
$PQTMSAVEPAR*5A # save PQTM params to flash
# manually power cycle module

Note that for the PQTMCFGSVIN command, you will need to use the XYZ coordinates of your base station and update the checksum before sending. Alternatively, the LC29H supports a survey-in capability to automatically generate an approximate base position.

Once you have sent this sequence of commands to the receiver, open up a “Binary data” window from the “View” menu and you should see the RTCM3 MSM observation messages and the 1005 base location message.

RTCM3 messages in QGNSS Binary data window

One minor issue I found is that the PAIR432 command to enable RTCM3 MSM7 messages does not seem to get saved to flash properly, so after cycling power, the module will switch to outputting MSM4 messages rather than MSM7. These contain slightly less information than the MSM7 messages but in most cases this should have negligible to no effect on the RTK solution. The MSM4 messages also require less bandwidth.

RTK Solution:

Once you are getting the correct outputs from both receivers, or a single receiver and external base correction stream, it is time to link them together to get an RTK solution. If you are using an LC29H as a local base station, you will want to connect it to an NTRIP caster to broadcast the correction stream. I describe one way of doing this with RTK2GO in this post. Once this is up and running, or you have access to NTRIP corrections from an external L1/L5 base station, the next step is to feed the base corrections to the rover using an NTRIP client. In my experiment I used an RTKLIB STRSVR stream server to do this, but for just checking out the receiver, it is simpler to use the NTRIP client tool built into QGNSS. Open this window from the “Tools” menu in QGNSS and configure it with your NTRIP address, username, password, port, and mountpoint. Once it is configured, set the “Connect to Host” button to on. If you are in an open sky view and have a ground plane under your antenna, you should see the “Quality indicator” field in the QGNSS output window switch to “Float RTK” and then to “Fixed RTK” as seen in the screenshot below. In this case, you can see from the RTK Float count field that it took 41 samples to converge from float to fix. Since the output rate is set to 5 Hz, this is about 8 seconds. The time to fix will vary depending on sky view, atmospheric conditions, and antenna quality.

So, that’s it, you should be up and running now and ready to collect some position data with centimeter-level accuracy. If you find any issues with these instructions or improvements to them, please leave a comment below.

5 thoughts on “Configuring the Quectel LC29HEA receiver for real-time RTK solutions”

  1. I would like to build such a logger based on LC76G+ openlog based on Atmega 328p. Or do these configuration commands for the receiver need to be transmitted to the receiver at every start? I understand that such a logger will only work for post-processing. but for RTK you need a single-plate plan like you did….

    Like

  2. Yes, the LC29HEA does support moving base RTK. You can download an application note (Quectel_LC29H(EA)_Moving_Base_Application_Note_V1.0) on the details from here. It does require using one set of UART ports to directly connect the two LC29H modules together. I’m not sure if the right UART pins are accessible on the board I linked to for this configuration.

    The LC29H protocol specification does refer to an ASCII PVT output message that contains the velocity vectors, but I was unable to find a way to enable this message. [Update 5/15/24: It is in the spec, I just missed it the first time I looked: see the comment below for details]

    Like

    1. @jlderouisays

      To enable the PQTMPVT message at 1Hz, try this command:

      `$PQTMCFGMSGRATE,W,PQTMPVT,1,1*1C`

      Check to see if it is enabled using

      `$PQTMCFGMSGRATE,R,PQTMPVT,1*04`

      It took me a minute to realize that you have to include the message version of “1” for that command to work. Source is LC29H Series&LC79H (AL) GNSS Protocol Specification v1.2 available through quectel.com

      Like

  3. Hello,
    Thanks for sharing your experience.
    Is the lc29hea capable of moving base RTK?
    Do you know if there is a sentence providing 3D speed vector components?
    Regards,
    JL

    Like

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.