Lawnbot with ESPrtk corrections, uBlox ZED-F9P gps, and Cube Orange autopilot

This is mostly a build log so I remember how I built this, and to share setup in order to help others with similar machines.
Part 1 is the ESPrtk base which streams RTCM corrections from a public NTRIP server and broadcasts with a 900 MHZ radio.
Part 2 will be the uBlox ZED-F9P gps setup.
Part 3 will be the Ardurover setup.

The mower I used is an old 21" gas powered push mower, with 8" Hoverboard motors installed for the drive. An Odrive 3.6 56V drives the brushless motors, and power comes from a 36V Lithium eBike battery. Here is a clip of it running with RC transmitter:


Part 1 ESPrtk base.
I chose to use the ESPrtk firmware running on an ESP32-DevKitC V4. This seemed like the quickest way to build a base to send RTK corrections to the mower. The firmware has been in development for a few years and has configuration option for just about any type of caster or rover you want to setup.

I didn’t want to rely on Mission Planner or any other basestation to stream the RTCM corrections to the Lawnbot. The ESP32 boots very quickly and is sending corrections within seconds. Initially I wanted to broadcast with a LORA radio, but the radio I chose (an SX1276 with UART interface) did not transmit the packets reliably. Seemed to be a problem with the 58 byte packets that it transmits.
Switched to mRobotics 915MHz telemetry radios and they just worked…flawlessly.

Here is the schematic of ESPrtk base:

Per the ESPrtk developer, the Minnesota CORS NTRIP server is VRS type, Virtual Reference Station. It requires you to send your GGA coordinates and it responds with the correction. The developer was very responsive in helping me get that sorted and even released an updated firmware due to some of my testing.
Here are a few photos of the construction:

And a video of it in operation:

The ESPrtk has a web interface that makes configuration pretty simple. Here are my config pages:


Part 2 Sparkfun GPS configuration

The GPS module I used is the Sparkfun RTK-SMA with uBlox ZED-F9P.

This blog by Roby was invaluable in figuring out this module:

Sparkfun has great configuration guides which help greatly with figuring out the rather cryptic uBlox u-Center Windows program. I did all setup using u-Center so that I could use the standalone ESPrtk base above for the RTK corrections, rather than allowing Ardurover to autoconfig the gps and send corrections from Mission Planner base station.

Here is my u-Center configurations:

View>Gen 9 Config View>GNSS Config
Enable only GPS L1 L2 & Galileo E1 E5b so chip is not overloaded with data that won’t get used

Protocol in: none
Protocol out: UBX (this is much more compact data than NMEA messages)
Baudrate: 115200

Protocol in: RTCM3
Protocol out: NMEA
Baudrate: 115200

No NMEA messages are turned on by default,
Message F0-00 NMEA GxGGA (GxGLL GxGSZ GxGSVG xRMC GxVTG, these were on but not needed?)
UART2: ON (all interfaces are on by default, can leave checked)

No UBX messages are turned on by default,
UART1: ON for the following messages
0A-09 MON-HW, 0A-0B MON-HW2, 01-04 NAV-DOP, 01-14 NAV-HPPOSLLH, 01-07 NAV-PVT, 01-03 NAV-STATUS.
(USB and other interfaces may be on, can leave checked)

Increase location resolving from 1/sec to 5/sec:
Measurement Frequency: 5 Hz

To view messages:
View>Messages>Right click on NMEA and UBX and enable

This is great. I’m about to do the same thing.

This is very useful information. I am about to experiment with ESPrtk and this will give me a jump start!

Roland, If you ever want to give LoRa another try, using the Adafruit LoRa Feather M0 works well for me. My code for the transmitter and receiver Feathers is at GitHub - ktrussell/Serial_to_LoRa: Transmit and receive programs for Arduino Feather M0 LoRa module to transmit one way data over LoRa.

BUT, it sounds like the modules you have are working for you and have the range you need.

Roland, U-center and the Ublox configuration is a lot to learn. The good news is that when using it with ArduPilot, we don’t actually have to do any setup. ArduPilot will automatically configure the F9P.

1 Like