Ardumower Sunray: Unterschied zwischen den Versionen

Aus www.wiki.ardumower.de
Wechseln zu: Navigation, Suche
(GPS checksum errors)
(What are the differences between the Ardumower and ArduSimple ublox receiver configurations)
Zeile 788: Zeile 788:
 
   01-12 UBX-NAV-VELNED                          1
 
   01-12 UBX-NAV-VELNED                          1
 
   01-14 UBX-NAV-HPPOSLLH                        1
 
   01-14 UBX-NAV-HPPOSLLH                        1
   01-3C NAV-RELPOSNED                           1
+
   01-3C UBX-NAV-RELPOSNED                       1
   02-32 RXM-RTCM                                1
+
  01-43 UBX-NAV-SIG                            10
 +
   02-32 RXM-RTCM                                1  
 
  additional activated messages for UART2+USB:
 
  additional activated messages for UART2+USB:
 
   MSG (messages) F0-00 F0-00 NMEA GxGGA        10
 
   MSG (messages) F0-00 F0-00 NMEA GxGGA        10

Version vom 1. August 2020, 19:03 Uhr

'Mows like on rails...' This is an experimental RTK GPS-based mower that you can build yourself. Ardumower RTK doesn't need a perimeter wire as it uses (cm-precise) RTK GPS.

This page describes how to build your own (experimental) RTK-GPS mower. It requires an Ardumower DIY robotic mower system and a RTK-GPS kit. You can get the RTK mower as a whole kit in the shop too (click here to get the RTK mower or just the RTK kit).

Icons experimental.png WARNING:

This RTK mower project is still in EXPERIMENTAL state! This is a prototype (not more) to explore RTK GPS, to find out if it could be a solution for some backyards (or even some more), to get experiences with this technology, and to finally build a more complete software with it. Currently, the software is missing robustness, dynamics, creativity for avoiding obstacles and much more.

Ardumower sunray.jpg Ardumower sunray app.jpg Ardumower rtk phone.jpg Sunray rtk mower.jpg


Videos (Demos/Tutorials)

Video.png Click below to watch demo and tutorial videos to get an idea what you can do with this RTK system already:

What is RTK and what are the requirements (environment and hardware)

RTK-GPS uses two GPS receivers, one for the reference antenna (base) and one for the robot mower (rover) which both communicate in realtime via radio modules (see image below). The base constantly sends correction data so the rover can compute its cm-precise (relative) position. In the RTK-GPS kit, everything required (receivers, radios, antennas etc.) is included. Also, if you don't want to operate your own RTK base, you can use an external base service via Internet (e.g. like Germany's SAPOS). This will reduce the hardware cost by about a half.

PCB


To be able to use RTK-GPS, your robot mower should have a good view to the sky at all locations (see photo below). RTK-GPS will NOT work under extreme limited sky view, under trees, in buildings etc.

PCB

Some of the environments where we successfully tested RTK GPS:

PCB Environment 'AG' (mostly unobstructed sky view)

PCB Environment 'ML' (partial obstructed sky view due to large trees on the lawn)


These are the hardware requirements to add RTK-GPS to your Ardumower. You can purchase the required hardware from Marotronics Shopping.png.

PCB

Assembling the chassis and PCB

Please follow the steps described at the main page for assembling chassis, motors etc. and PCB1.3. After you have assembled the chassis and PCB you can follow the steps below for the RTK functionality.

Significant changes compared to Ardumower's initial firmware (Sunray vs. Azurit)

Ardumower Sunray is an alternative Firmware (experimental) for the Ardumower DIY robotic mower system. It uses RTK GPS to localize cm-precise without a perimeter wire. It requires Ardumower PCB1.3, Arduino Due, Ardumower RTK kit, Bluetooth BLE and a phone (Android/iOS).

  • Optimized for PCB 1.3
  • Optimized for Arduino Due
  • Optimized for RTK
  • Warning.png Incomplete (Sunray is 'work in progress') - features like docking, GPS signal-loss detection, mowing zones, improved path planning, obstacle detection and avoidance are going to be added later...
  • Warning.png Experimental: everything you see in the videos is already working but in early prototype phase (never run your Ardumower unattended with this firmware)!

Icons experimental.png

Use Azurit Firmware instead if you need a firmware with more complete features for your Ardumower...

Installation steps

IMPORTANT : Please read ALL sections below when assembling your Ardumower RTK. Some sections are optional, however most of the sections are important. Sections further to the end are related to troubeshooting and typical errors.

Bluetooth BLE UART module

1. Install Bluetooth 4.0/BLE module on your Ardumower PCB1.3 (replace any installed Bluetooth 2.0 module).

IMPORTANT: Verify the pinout of your BLE module is matching your Ardumower PCB pinout (shown at the PCB1.3 back side)!

PCB

2. Set JP10 (Bluetooth signal level) to 3.3V

3. Set JP4 (Bluetooth voltage) to 5V

4. Set JP7 (GPS voltage) to 5V

5. Set JP12 (GPS signal level) to 5V

6. Set JP6 (WIFI voltage) to 3.3V

7. Set JP11 (WIFI signal level) to 3.V

PCB

PCB1.3 GPS pin fix

The pins TX3 and RX3 are incorrectly routed on PCB1.3 - Fix it by swapping the TX3 and RX3 pin headers as shown below.

You can see the fixing process in this video: https://youtu.be/T-EqU5azCAU?t=140

PCB Pcb 1 3 gps pin fix tools.jpg

PCB1.3 odometry divider

The PCB1.3 odometry divider for the left and right motors should be configured as follows (NOTE: no need to change the mower divider, you can keep your existing mower divider configuration):

PCB

RTK base

Method 1: Your own RTK base

PCB PCB

WARNING: Handle your GPS modules with care, it is an expensive piece of hardware. If you have any doubt, or if you are unsure, please ask in the Ardumower forum for help.

1. Make sure you have the simpleRTK2B module marked as 'BASE' in your hands (look at simpleRTK2B PCB label at backside!)

2. Connect Xbee LongRange dipole antenna

3. Connect GPS multifrequency patch antenna. NOTE: antenna cable is very sensitive, never bend the antenna cable! Minimum bend radius: 5cm!

4. Connect a USB 5v power supply to the USB port marked as 'POWER+GPS'

5. Install the GPS base antenna - it should have clear view to the sky in all directions without any obstacles. For best results install GPS antenna on the roof. Alternatively, if you have an open area (without trees and other obstacles), you can install the base antenna on a tripod.

NOTE: The robot mower will get and save all position coordinates relative to the base antenna (East, North) - do not move the base antenna after recording the virtual perimeter with the phone app.

6. Improving position solution robustness: for robust position solutions (FIX), you will need to install a (conductive) ground plane (10x10cm, make it round if possible) for the patch antenna. Install the patch antenna on top of it like shown below. This will give you most robust position results.

PCB PCB

PCB

Method 2: Using an RTK external base service (Internet-based)

PCB PCB

This section describes how to use an external Internet-based correction service (NTRIP, e.g. SAPOS in Germany, SWEPOS in Sweden, ASG-EUPOS in Poland, and others) instead of your own base station. You can reduce cost with this method because you don't need an RTK base PCB. Instead you will require the WiFi NTRIP Master module for your rover PCB from Marotronics. Follow these steps for the rover PCB:

1. Instead of the XBee module install the WiFi NTRIP Master module on your rover PCB as shown in above photo.

2. Use your smartphone or laptop to connect to the WiFi network that the module created, with name “ESP_XBee_XXXXXX” where XXXXXX is a random number.

3. Go to your browser and type the following address “192.168.4.1”, a web interface will appear.

4. Configure your preferred NTRIP service provider (host, port, mountpoint, username, password), and through which WiFi network should it connect to internet. Example NTRIP mount points (Germany SAPOS service generating virtual reference station):

Sapos karte.png

 Nordrhein Westfalen (SAPOS HEPS): VRS_3_4G_NW   
 Niedersachsen       (SAPOS HEPS): VRS_3_2G_NI   
 Berlin              (SAPOS HEPS): VRS_3_2G_BE         
 Baden Württemberg   (SAPOS HEPS): VRS_3_3G_BW

5. Use UART0 and 115200 baud for the connection to the ublox GPS receiver (rover).

PCB

6. Save configuration and reset the system. From now on, every time the WiFi router you configured is in range, the WiFi NTRIP Master will connect autonomously and provide RTK corrections to your rover PCB (If you ever experience any problems and are unable to connect to the NTRIP master device, you can hold the NTRIP master BOOT button for 5 seconds and the ESP32 will be reset to its default configuration). Verify that your XBee-Wifi-module is successfully connected to the Internet by typing the configured XBee IP address in your browser!

7. Connect the rover PCB via USB to your PC, and make sure NMEA protocol out is activated for UART2 out at 115'200bps (configuration view-> message 'PRT (Ports)'). Also make sure NMEA GGA message is active active on UART2 (configuration view->message 'MSG (Messages)'->F0-00 NMEA GxGGA). Some NTRIP service providers need this NMEA message to compute a virtual base station (VRS) based on the initial estimated GPS fix position. Verify that the LED GPS-XBEE starts to blink which means the GPS receiver is sending the (rough) GPS position to the XBee module!

8. Finally, verify the LED 'XBEE-GPS' is blinking (the rover receives correction data) and the correction age (seconds) shown near the fix solution in the phone app is not increasing. If it does NOT work:

  • Verify you have properly configured the rover module (see further below)
  • Verify your NTRIP client connection data via ucenter (see further below)
  • Activate NTRIP module console output (log forward print), connect GPS rover module via the 2nd USB port (near the NTRIP module) to your PC and start Arduino IDE serial console to monitor the console output

9. If your NTRIP base antenna position is not constant, you have to switch to position source mode 'absolute' in the App (see section App for more details).

How can I find out if my NTRIP provider (e.g. SAPOS) properly works and supports the required correction messages

PCB

You can verify the received correction messages (RTCM3) for the individual satellite systems (GPS, GLONASS, etc.) via ublox uCenter. Start the NTRIP client via 'Receiver->NTRIP client...'

PCB

...and then display the received RTCM3 messages via 'View->Messages View->UBX->RXM->RTCM':

PCB

These are the RTCM3 messages you should see and may see ( * means not supported by F9P receivers , --> means this message should be activated when using your own F9P RTK base station):

    1001: L1-only RTK observables
    1002: Extended L1-only RTK observables
    1003: Compact L1&L2 observables
    1004: Extended L1&L2 observables
--> 1005: Stationary RTK reference station ARP                  
    1006: Stationary RTK reference station ARP with height
    1007: Antenna descriptor
    *1008: Antenna descriptor and serial number
    1009: L1-only GLONASS observables
    1010: Extended L1-only GLONASS observables
    1011: GLONASS basic RTK L1&L2
    1012: GLONASS extended RTK L1&L2
    *1013: System parameters
    *1019: GPS ephemeris data
    *1020: GLONASS ephemeris data
    *1021: Helmert/Abridged Molodenski Transformation Parameters
    *1023: Residuals, Ellipoidal Grid Representation
    *1025: Projection Parameters, Projection Types other than Lambert Conic Conformal
    *1032: Physical Reference Station Position
    1033: Receiver and antenna descriptors
    *1073: GPS MSM3
    *1083: GLONASS MSM3
    *1093: GALILEO MSM3
    *1123: Beidou MSM3
--> 1074: GPS MSM4       
--> 1084: GLONASS MSM4   
--> 1094: GALILEO MSM4   
--> 1124: Beidou MSM4    
    1075: GPS MSM5
    1085: GLONASS MSM5
    1095: GALILEO MSM5
    1125: Beidou MSM5
    1077: GPS MSM7
    1087: GLONASS MSM7  
    1097: GALILEO MSM7
    1127: Beidou MSM7
--> 1230: GLONASS code-phase (this message could be missing - then 1033 should be received instead!)  

You can verify the satellite frequencies via 'View->Messages View->UBX->NAV->SIG':

These are the frequencies you should see for each satellite system:

    GPS         G1,G2,G3,...   L1C/A
                               L2CL
                               L2CM
    GLONASS     R1,R2,R3,...   L1OF
                               L2OF
    GALILEO     E1,E2,E3,...   E1C
                               E5BQ
    Beidou      B1,B2,B3,...   B1D1

And finally, you should see a carrier solution 'float' or 'fix' for a RTK solution:

PCB

RTK rover

WARNING: Handle your GPS modules with care, it is an expensive piece of hardware. If you have any doubt, or if you are unsure, please ask in the Ardumower forum for help.

1. Make sure you have the simpleRTK2B module marked as 'ROVER' in your hands (look at simpleRTK2B PCB label at backside!)

2. Connect XBee LongRange dipole antenna

3. Connect GPS multifrequency patch antenna. NOTE: antenna cable is very sensitive, never bend the antenna cable! Minimum bend radius: 5cm!

4. Connect PCB1.3_GPS_GND to simpleRTK2B GND

5. Connect PCB1.3_GPS_5V to simpleRTK2B 5V_IN

6. Connect PCB1.3_GPS_TX to simpleRTK2B TX1

7. Connect PCB1.3_GPS_RX to simpleRTK2B RX1

8. Connect simpleRTK2B IOREF to simpleRTK2B 5V_OUT (to choose signal voltage level 5v)

PCB

9. Install XBee antenna and GPS antenna on the Ardumower. The GPS antenna must be mounted at the position of the tire axle and between both tires (also known as 'control point' - see below). Do not mount the GPS antenna too high because when there's slope the higher position of the antenna is not the same as the position of the robot (see example with slope below):

PCB     PCB Gps antenna terrain compensation.jpg

10. Improving position solution robustness: for robust position solutions (FIX), you will need to install a (conductive) ground plane (10x10cm, make it round if possible) for the patch antenna. Place the patch antenna on top of it like shown below. This will get you most robust position results. Note: you do not have to ground the ground plane as the contact to antenna is capacitive.

More details about ground planes for patch antennas can be found in the u-blox GNSS Antennas Application note (UBX-15030289) and in ublox Multi-band, high precision GNSS antennas (ANN-MB series).

Rtk patch ground plane.jpg PCB

Rover configuration (messages)

Warning.png WARNING: Only apply the steps below for the ROVER module - not for the BASE module!!Warning.png

NOTE: If you purchased your RTK-GPS modules at Marotronics, these modules should be pre-configured and you can skip this section.

1. IMPORTANT: Make sure the Ardumower is turned off!

2. Connect SimpleRTK ROVER module USB port marked as 'POWER+GPS' to your PC.

3. Download ublox u-Center and start it: https://www.u-blox.com/en/product/u-center

4. Choose 'Receiver->Connection' and choose your rover module COM port.

Ucenter choose port.png

--Method 1 (Using a configuration file - recommended)--

5. Download the ublox rover configuration file (you can find it in the folder 'ublox_f9p_configs'): https://github.com/Ardumower/Sunray/archive/master.zip

6. Using ublox u-Center, upload the configuration file to your ublox receiver (rover). Choose 'Tools->Receiver Configuration...', choose the config file and then transfer it to the GPS receiver.

Ucenter transfer config.png

After your ublox receiver has been configured, go to point 9 to permanenlty save the configuration in the GPS receiver.

--Method 2 (Without configuration file)--

5. In this step we want to turn off all broadcast messages except one. Choose 'View->Configuration View'. Choose configuration message 'MSG (Messages)' and select one message after the other in the list (0A-37 MON-HW3, 0A-09 MON-HW, ..., etc.). For each message, make sure the selected message is turned off for UART1. Do NOT change anything for the ports UART2, USB etc. - only turn off all messages for UART1. Example for message '01-22 NAV-CLOCK' that has been deactivated for UART1:

Ucenter disable messages.png

Repeat this step for all messages in the listbox and turn off all messages for UART1.

6. Finally, activate the following messages for UART1 and USB:

01-07 UBX-NAV-PVT
01-12 UBX-NAV-VELNED 
01-14 UBX-NAV-HPPOSLLH
01-3C NAV-RELPOSNED 
02-32 RXM-RTCM 

Ucenter nav relposned.png

7. Choose configuration message 'PRT (Ports)', choose 'UART1', and set baudrate to 115200 for UART1:

Ucenter baudrate.png

8. Choose configuration message 'RATE (Rates)' and set measurement period to 200ms (5 Hz):

Ucenter rate.png

9. From the u-Center menu, choose 'View->Configuration', choose configuration message 'CFG (Configuration)' and click on 'Send' to make the configuration in the rover persistent when the rover module is powered off.

Ucenter save config.png

10. Verify that the configuration is actually persistent in the rover module - disconnect the rover module and reconnect. Then go through all previous steps and verify that the configuration is still present.

11. IMPORTANT: Disconnect USB cable from rover module!

Download, Arduino Code, Firmware

In this section you will upload the Arduino code ('Sunray Firmware') to your Ardumower.

1. Download and start Arduino IDE: https://www.arduino.cc/en/Main/Software

2. Download Ardumower Sunray Firmware and unzip it: https://github.com/Ardumower/Sunray/archive/master.zip

3. Copy the folder 'Sunray_Lib' to C:\Program Files(x86)\Arduino\libraries

4. Open the Arduino sketch 'sunray\sunray.ino'.

5. In Arduino IDE, choose 'Tools->Board->Manage' and enter 'Due'. Install the 'Arduino SAM Boards'

PCB PCB

6. Start your Ardumower (via the PCB1.3 button P20).

7. Connect Arduino Due USB native port to your Computer's USB port. Upload the sketch to your Arduino Due on the Ardumower PCB1.3. After a short while you should hear a 'beep'. Ardumower is now ready for your commands!

PCB PCB

8. If you experience problems (e.g. phone cannot connect to your Bluetooth module), it is recommended to view the serial console of the Ardumower. Connect the Arduino Due via the USB port labeled 'native' to your PC. Choose board 'Arduino Due native USB port' in the Arduino IDE and choose the available Due native COM port. Then choose 'serial monitor' to see the console. Finally choose upload. After uploading, the output on the console should appear and should look like below. The lines 'OK', 'AT+RESET', 'OK' indicate that the Bluetooth module was found.

PCB PCB

Phone App

In this section you will download the App to your phone (Android or iOS) which is used to configure the maps for your mower.

Using the phone app, you can:

  • manually steer the mower
  • record the virtual perimeter and exclusions
  • calculate the waypoints for the mower
  • start/stop the mower

NOTE: all maps will be stored on the phone - however maps can be shared and then imported on other devices.


1. Download Viewer App:

  For Android, download Evothings Viewer: https://play.google.com/store/apps/details?id=com.evothings.evothingsviewer
  For iOS, download CGTek Viewer: https://apps.apple.com/de/app/cgtek-viewer/id1135118284

2. Start App and enter the connection URL as show below and press 'Connect':

PCB

3. The App should start as shown below:

PCB

NOTE: The robot mower will get and save all position coordinates relative to the base antenna (East, North) - do not move the base antenna after recording the virtual perimeter.

Position solution display (Sol/Age)
invalid no DGPS solution was found
float DGPS solution was found but it is ambiguous and therefore not precise (average error ~20cm).
fix DGPS solution was found and it is cm-precise - position is tracked in realtime (RTK)
age The age (in seconds) of the DGPS correction data sent from base

Position source mode

The ublox GPS receiver sends two positions to the Ardumower:

a) one relative position to the base (east/north) in meters (this is used in relative mode)- because virtual base station 
   (VRS) coordinates move each start this mode cannot be used for SAPOS/VRS
b) one absolute latitude/longitude position (this is used in absolute mode and the base coordinate set in the app is always 
   substracted from this to calculate again east/north in meters)

To save memory, the rover will always use relative coordinates for the map etc. The map origin (0,0) for the maps can be choosen in the App. In the App (menu 'Position mode'), you can choose between those two position source modes:

relative: the rover coordinates are always relative to the base antenna 
absolute: the rover coordinates are computed as relative to some specified (e.g. your base antennna or house) 
          world coordinate (see image below)

Tip: You can use Google Maps to find out (Lon, Lat) coordinates for your location and use them as coordinate (lon,lat) for your base station to set up the absolute position mode: https://www.latlong.net/ PCB

Record perimeter and exclusions

Please watch this help video for recording perimeter and exclusions:

PCB

Click here for tutorial video: How to use the app (German with English subtitles)

Click here for video: How to test GPS precision

Click here for video: Demonstration of mow pattern (rings and lines), pattern angle and mowing offset


When recording perimeter and exclusions make sure that your perimeter polygon and each of your exclusion polygons do not overlap itself and other polygons.

Example of one polygon overlapping itself and one polygon overlapping another polygon (not allowed):

PCB PCB

Also, when recording your exclusions, make sure there is enough space around obstacles for entry and exit points where the mower needs to rotate!

PCB

Mowing pattern, pattern angle, mowing offset

Click here for video demonstration of patterns, pattern angle and mowing offset

Example maps:

PCB

Tip: If you encounter path errors in the calculation, try to move the robot to another area (another position) and then recalculate the waypoints. Sunray map start pos.png

Odometry test

Don't forget to verify the odometry of your motors! If you are unable to manually steer the robot via the App, this will probably fix it!

Both, the robot's motor odometry and GPS-RTK are used to localize the robot. Therefore, it is important to verify that the odometry is working correctly as shown below. Start the phone app and follow the steps below to verify that your mower odometry is configured correctly. For this test, make sure that your RTK is turned off (e.g. RTK base module is turned OFF)!

PCB

NOTE: If the distances are not correctly measured by the robot, you can adjust the odometry values in config.h.

Additionally, you can find out the correct values for your motor by running the motor test in the Arduino console.

Motor test video link: https://drive.google.com/open?id=1ejT8j1Ioq8bDpk3RmWuki5KqI9K1Jq9h

Sunray motortest1.jpg Sunray motortest2.jpg

RTK GPS test (invalid, float, fix) and FIX robustness and correctness

The base and rover LEDs can be used for trouble-shooting. Verify that the LEDs are acting as described below.

Pcb1 3 rtk rover led.png

The base and rover LEDs should be as follows:

Base LEDs
GPS>XBEE should blink - your base module is sending satellite reference data to your rover module (via the XBee module)
XBEE>GPS should be OFF - your base module should not receive any XBee/reference signal
GPS FIX should blink - your base module has found a valid GPS signal
NO RTK should be ON - your base module is not performing RTK (real time kinematic)
Rover LEDs
GPS>XBEE should be OFF - your rover module should not send any XBee signal
XBEE>GPS should blink - your rover module is receiving satellite reference data from your base module (via the XBee module)
GPS FIX should blink - your rover module has found a valid GPS signal
NO RTK should be OFF - your rover module has found a RTK FLOAT or FIX (is performing real-time kinematic)

Fix robustness

Depending on the robot's location (e.g. near trees), it may take some time to get a RTK FIX solution. Also, it appears this RTK FIX can get lost quickly in the first minutes (e.g. near trees). However, after several minutes running time, the RTK FIX is more robust (even near trees). So, for best position results, let the GPS 'warm-up' some minutes at a location with good sky view.

Fix correctness

Warning.png NOTE: If you power-on the receiver (mower) at limited sky view, the receiver may get a RTK FIX solution but this FIX may be incorrect (and all following data is offset by this incorrect start position!). Therefore it is recommended to always power-on the receiver (mower) at a position with good sky view and to always power-on at the same position!


RTK float-to-fix recovery and false-fix issues

If you experience RTK float-to-fix recovery issues (no fix after timeout), or if you experience (slightly) false-fix solutions, the problem might be satellite reflections in the navigation solution:

PCB


The solution to this problem is to configure a signal strength filter (dB) like below (to filter out satellite reflections). It is assumed that reflective signals have a significant lower signal strength than direct satellite signals.

Default navigation input filters settings:

 Min SV Elevation: 10 [deg]
 C/N0 Threshold  : 0  [#SVs]
                   0  [dbHz]

More restrictive navigation input filters settings (this will filter/reduce satellites used in the GPS navigation solution!):

 Min SV Elevation: 10 [deg]
 C/N0 Threshold  : 10 [#SVs]
                   30 [dbHz]

Min SV Elevation: Minimum elevation of a satellite (SV) above the horizon in order to be used in the navigation solution. Low elevation satellites may provide degraded accuracy, due to the long signal path through the atmosphere.

C/N0 Threshold: A navigation solution will only be attempted if there are at least the given number of satellites (SVs) with signals at least as strong as the given threshold.

Satellites elevation.png Satellites multipath.gif

PCB


These parameters were discovered experimentally using a GPS trajectory test with limited sky view and reflections:

PCB


Tip: You can use u-center to monitor the signal strength (CN0/dbHz) etc. of all satellites discovered by the GPS receiver:

Ucenter satellite.png


If you want to look for the signal strength (CN0/dbHz) of the sent frequencies (L1,L2 etc.), you can do this as well:

Ucenter signal.png

GPS checksum errors

If you experience ublox GPS receiver-to-Arduino transmission checksum errors ('GPS checksum errors') shown in App under Statistics->GPS checksum errors:

Sunray gps rtk fix.png


or shown in the Arduino serial monitor:

Arduino serial monitor:
10:40:58.012 -> ublox chka error, msgclass=1, msgid=14, msglen=24: 5!=7F
10:41:58.036 -> ublox chka error, msgclass=1, msgid=14, msglen=24: 29!=C
10:42:58.019 -> ublox chka error, msgclass=1, msgid=14, msglen=24: 2A!=DC
10:43:58.033 -> ublox chka error, msgclass=1, msgid=14, msglen=24: 5!=FF
10:44:58.001 -> ublox chka error, msgclass=1, msgid=14, msglen=24: 8A!=44
10:45:58.023 -> ublox chkb error, msgclass=1, msgid=7, msglen=5C: B5!=27

...then you might have to increase the Arduino serial buffer FIFO size:

  1. In Arduino IDE->File->Preferences Click on 'preferences.txt' at the bottom
  2. Locate file packages/arduino/hardware/sam/xxxxx/cores/arduino/RingBuffer.h
  3. Change: #define SERIAL_BUFFER_SIZE 128 into into: #define SERIAL_BUFFER_SIZE 1024
  4. Recompile and re-upload the Arduino sketch

Example where the Arduino serial buffer FIFO size has been increased:

Arduino serial fifo size.png

XBee RF bandwidth/corruption issues

We experienced that the XBee mid-range radio modules (2.4 Ghz) have a very limited bandwidth, activating the RTCM3 messages at highest rate (1 Hz) at the base may not work stable and data corruption can occur at the rover and the rover is not getting a stable RTK FIX. You can verify this by looking at the rover's MON-COMMS message using u-center or by looking at the App's 'DGPS(Xbee) checksum errors':

Sunray gps rtk fix.png PCB Ublox rtcm messages.png

If the skipped bytes is increasing at a high rate (compared to the received bytes), your base (or rover or both) XBee is sending too much data and you can reduce the bandwidth at the base by reducing the message rates.

For the XBee mid-range modules the following rates have shown to reduce bandwidth and we were able to get a robust RTK FIX all the time:

---- base RTCM3 message rates ---------------
rate   
10    1005: Stationary RTK reference station ARP  
1     1074: GPS MSM4 
2     1084: GLONASS MSM4 
3     1094: GALILEO MSM4 
0     1124: Beidou MSM4
2     1230: GLONASS code-phase

You can change the message rates at the base via the configuration of the CFG-MSG message, choosing the above RTCM3 messages and setting zero (0) to turn a a RTCM3 message off or a non-zero rate value for the message rate. For example setting the rate to 1 means every GPS solution, 2 means every two GPS solutions etc. Do not forget to send and save the base configuration.

Ublox message rates.png

Addendum: another possible reason for limited bandwidth might be that the rover module is sending too much (unnecessary) data to the base, so stealing RF bandwidth. You can verify this using ucenter. Make sure that the rover is only sending the NMEA message GGA via UART2 (if you use NTRIP) or disable any outgoing messages for UART2 (if use your own base). You can change the messages sent via the configuration of the CFG-MSG message (see screenshot above).

Ucenter data transfer1.png

PCB

GPS antenna selection guide

We are currently experimenting with different GPS antennas for the rover.

PCB

gain of different multi-band antennas:
Survey GNSS Multiband antenna:       40 dB
Helical antenna for multiband GNSS:  33 dB
Patch antenna for multiband GNSS:    28 dB

IMU, sensor fusion

Optional: You can install an IMU (MPU6050 / MPU9150 / MPU9250 / MPU9255) like shown below to improve short-term direction measurements (in addition to wheel odometry). You can mount the IMU anywhere in the Ardumower chassis (location/position does not matter however orientation does matter! Have a look at the drawing below for correct orientation, the +X axis is pointing forward).

NOTE: IMU support has not been tested thoroughly (for a longer duration) yet. Make sure to configure the correct module in 'config.h'. For the shop module, choose MPU9255 in 'config.h'. If you IMU was found correctly, you should hear 8 short buzzer beeps at the mower start (automatic gyro calibration).

Remember: Set PCB1.3 jumper JC2 (I2C pullup level) to 3.3V for IMU connector  (if not set correctly you may experience I2C issues)

IMPORTANT: The I2C bus (SDA, SCL) is sensitive to EMI caused by motors etc. - For robust I2C bus communication results, keep the I2C cables short! (max. 3cm - see photo below) and twist all 'high-current' cables (motor, battery etc.):

Pcb1 3 imu short cables.jpg PCB PCB

1. Connect PCB1.3_I2C2_5V to IMU VCC

2. Connect PCB1.3_I2C2_GND to IMU GND

3. Connect PCB1.3_I2C2_SDA to IMU SDA

4. Connect PCB1.3_I2C2_SCL to IMU SCL

5. Connect PCB1.3_I2C2_3.3V to IMU AD0

PCB


See video on how to verify IMU sensor is working


The following image shows how the sensor fusion of all data (RTK GPS, odometry, IMU) happens:

PCB

Extending WiFi range with outdoor access point

       Access point outdoor.jpg              Outdoor access point.jpg

These WiFi access points have been tested and are recommended for outdoor use (and typically have an extended range):

  • TP-Link EAP110 (or EAP 225) Outdoor 2.4 Ghz 300 MBit outoor access point
  • Ubiquiti UniFi UAP-AC-M Wireless Access Point
  • ...

Portable WiFi router for NTRIP

For your first NTRIP tests (or even as permanent installation), you might use a portable 4G/WiFi router. Such 4G modem could be used where the WiFi coverage is limited. In addition, you can operate multiple WiFi devices (Ardumower PCB WiFi module, NTRIP client WiFi module, ESP32-CAM WiFi module etc.) via this portable 4G WiFi router. NOTE: You may have to use virtual private network (VPN) protocol to be able to access all devices from the Internet.

Ntrip 4g router.png

Here are some example devices:

  • HUAWEI E8372 WiFi/WLAN LTE Modem (only needs USB power)
  • ...

Longer battery operation time

What electrical current does the App measure and show when in charging (App shows '-A') and mowing mode (App shows 'A'):

Ardumower charging relay.png


Tip: for longer battery operation time, connect two Ardumower batteries in parallel:

Battery parallel connection.jpg Ardumower-power-pack-252v-10ah~3.jpg

Or much easier: There are now two variants of the Ardumower battery pack, 125 Wh(5Ah) and 250 Wh(10Ah): https://www.asn-shop.de/Ardumower-Rasen-Roboter-Akku

Docking

Docking is highly experimental.

Docking demo video: https://www.youtube.com/watch?v=PSbmBYGLZBA

Docking prototype video: https://www.youtube.com/watch?v=03seYUKiJcc

Sunray docking points.jpg Ardumower docking.jpg


1. Record docking points: Activate Record mode: dock in the App, then manually steer your robot mower from a position with good sky view (good GPS signal) (first docking point) into the docking station until the docking contacts (last docking point), and add docking points via the App during this process.

NOTE: The last docking point (for the docking contacts, shown bigger) should be moved slightly (30cm) behind the actually docking contacts via the App point editor mode (symbol [.]), so the robot tries to reach it (and it doesn't matter if it cannot actually reach that point).

2. To undock, the mower must have touch to the docking contacts (the App shows 'charge'). Then press 'Start' in the App to undock. The mower will drive in reverse out of the docking station to the first docking point and continue at the last mowing point (or start at the first mowing point) . If there is no touch to the docking contacts, the mower will think it is out of the docking station and drive directly to the mowing point without actually undocking.

3. To dock, press 'Dock' in the App. The mower will calculate a path to the first docking point, and then follow the docking points until the docking contact.

WiFi module

Optionally, you can add a ESP8266-01 WiFi module (found in the shop) to your PCB1.3 and use it with the Sunray firmware.


Demo video: https://www.youtube.com/watch?v=onsTfae-8VQ


NOTE: all settings (maps, absolute position source etc.) are stored in your phone - when using another device for the WIFI connection (PC etc.), you will have to transfer those settings (share maps via app, re-enter absolute position source etc)!

NOTE: Never connect with two devices (e.g. PC and phone) at the same time! (Close the App on the phone before using WiFi on the PC)

Wifi esp8266.jpg Sunray wifi.png

  1. Make sure you have set the WiFi jumpers (shown here).
  2. If you experience connection issues, you may have to add an additional capacitor (e.g. 470 uF/10V) to the module as shown in the photo. Also, do not use additional cables in between PCB1.3 and WiFi module if you experience connection issues.
  3. Look into firmware file config.h on how to configure SSID and (a static) IP.
  4. Look into the serial console (Download section, step 7) if you experience connection issues and to debug the connection process.

Bluetooth Low Energy (BLE) and WiFi external antenna hacks

Sma socket antenna.jpg

This might be the right hack for you :-) This is how I added an external SMA antenna to the Bluetooth 4.0/BLE UART module (CC2540) to increase range to approx. 20m. Happy hacking :-)

PCB


And this is how I added an external SMA antenna to the ESP8266-01 WiFi module

Esp8266 01 external antenna hack.jpg


Warning.png WARNING! Modifications to RF antennas, RF signal pathes on PCB's etc. are risky and you will loose general permission to operate the device - you may radiate additional unknown signals due to your modifications. Be warned of that!

What are the differences between the Ardumower and ArduSimple ublox receiver configurations

Ardumower base (ublox F9P) configuration (identical with ArduSimple base config):

PRT (ports) UART2, protocol in: RTCM3, protocol out: RTCM3, 115200 baud
RATE (rates) measurement period: 1000ms (1 Hz)
TMOD3 (Time mode3) mode: Fixed mode
MSG (messages) for UART2         transmit frequency (10 means message is sent every 10 solutions):
  F5-05 RTCM3.3 1005             1
  F5-4A RTCM3.3 1074             1
  F5-54 RTCM3.3 1084             1
  F5-5E RTCM3.3 1094             1
  F5-7C RTCM3.3 1124             1
  F5-E6 RTCM3.3 1230             1
  

Ardumower rover (ublox F9P) configuration:

additional activated messages (or changed message frequency) for UART1+USB:
MSG (messages) for UART1+USB                    transmit frequency (10 means message is sent every 10 solutions)
  F0-00 NMEA-GxGGA                              10
  01-07 UBX-NAV-PVT                             10
  01-12 UBX-NAV-VELNED                          1
  01-14 UBX-NAV-HPPOSLLH                        1
  01-3C UBX-NAV-RELPOSNED                       1
  01-43 UBX-NAV-SIG                             10
  02-32 RXM-RTCM                                1   
additional activated messages for UART2+USB:
  MSG (messages) F0-00 F0-00 NMEA GxGGA         10
RATE (rates) measurement period: 200ms (5 Hz)
PRT (ports) baudrate UART1: 115200 
            baudrate UART2: 115200 
            protocol out UART2: NMEA
            protocol in UART2: RTCM3
NAV5 (navigation 5) input filter: #SVs: 10, dbHz: 30

Discussion / questions / forum thread

If you have any doubt, or if you are unsure, please ask in the Ardumower forum for help:

Link to forum: https://forum.ardumower.de/threads/sunray-firmware-goes-rtk.23690/

Troubleshooting

Troubleshooting.jpg

  • Can you drive the mower via the App 'manual control' without any issues? If not, verify the motor odometry settings via a motor test (see odometry section above).
  • Does the mower have issues to rotate ('delta' shown in the App ) correctly and is it missing an IMU? If yes, add an IMU (e.g. 9250, see IMU section above).
  • Do you get constant 'IMU tilt' errors and cannot get rid of them? Your IMU may be broken. Check forum on how to verify your IMU (see below).
  • Do you sporadically get 'IMU timeout' errors? See IMU section above on how to shorten IMU cables.
  • Does the 'GPS checksum error' shown in the App (Statistics) increase? If yes, check section above on how to increase Arduino serial FIFO size.
  • Does the RTK position (N,E shown in the App ) jump after a mower restart and are you using NTRIP/SAPOS? If yes, verify you are using absolute position mode in the App (see position source mode section above).
  • Does the 'DGPS age' shown in the App increase too much (>5 seconds)? If yes, verify your WiFi or XBee connection (see section extending outdoor WiFi above on how to improve WiFi connection).
  • Does the 'DGPS checksum error' shown in the App (Statistics) increase? If yes, verify your WiFi or XBee connection (see section XBee corruption issues above).
  • Do you sporadically get 'GPS invalid' solutions? If yes, verify your WiFi or XBee connection (see above sections extending outdoor WiFi and XBee corruption issues).
  • Do you have issues to get a 'fix' during manual steering and recording your map? If yes, wait for a fix, take your time and always drive the mower slowly.
  • Do you have issues to get a 'fix' during automatic mowing? If yes, try out Hartmut's ublox config (found in Sunray GitHub).
  • Do you still have issues to get a 'fix'? Use a ground plate (10x10cm) and connect it to PCB ground.
  • Does the 'control cycle time max' shown in the App (Statistics) increase too much (>0.02s)? If yes, your WiFi access (or something else) may slow down the robot control loop too much and robot tracking errors may appear (example: a max. conrol cycle of 1s would mean the robot motors were running without active control for max. 1s).

-

IMU sensor tilt issues: https://forum.ardumower.de/threads/imu-tilt-error-9250.23864/

GPS/RTK WiFi NTRIP and RTK non-stable fix issues:

Datasheets

XBee Long Range module, up to 14km, 13 dBm ERP/20mW (Xbee SX 868 xb8x-dmrs-001)

u-blox GNSS Antennas Application note (UBX-15030289)

ublox Multi-band, high precision GNSS antennas (ANN-MB series)

u-blox F9 high precision GNSS receiver interface description