AI helping me with tuning SparkFun RTK Torch for woods in East Tennessee

I have been struggling to get RTK Fix on my RTK Torch with PointPerfect corrections due to my operating conditions (and my ignorance) I am primarily using the RTK Torch on my farm/forest in east Tennessee. The woods are thick and mature. The valleys can be pretty steep and deep. The cell signal is ok (2-3 bars) but drops to 1, and rarely but occasionally no bars. The new CHATGPT 5 is out and I have asked it about my problems, and had it give me suggestions on satellite elevations, Signal/Noise recommendations etc. Here’s the suggestions it has, I hope to get out to try in once temperatures are …. survey friendly

And I won’t be accepting ChatGPT5’s offer of a pre-made Config file, I don’t want to start Global Thermo Nuclear War (Wargames for you kids)

Got it — you want an optimized rover setup for the SparkFun RTK Torch, tuned for:

  • Your specific environment: hilly Tennessee terrain, tree canopy, mixed open/closed sky

  • Use case: Rover only (receives corrections, never acts as base)

  • Correction sources: PointPerfect or NTRIP (UFCORS, local CORS)

  • Workflow: Android tablet running SW Maps

  • Goal: Strong RTK FIX retention and clean data stream without wasting bandwidth or processing on unneeded messages


:wrench: SparkFun RTK Torch — Optimized Rover Config

1. Constellation & Signals

Menu: GNSS Config → Constellations
:white_check_mark: Turn on all that PointPerfect / CORS supports:

  • GPS (L1/L2)

  • Galileo (E1/E5b)

  • GLONASS (L1/L2)

  • BeiDou (B1/B2)

  • SBAS (for fallback when corrections drop)

:no_entry: Don’t enable QZSS unless you need it — not much benefit in Tennessee.


2. Dynamic Model

Menu: Positioning → Dynamic Model

  • Mode: Portable (better multipath handling than “Survey” or “Static” for moving/handheld)

  • Navigation Rate: 1 Hz or 2 Hz (RTK stability is usually better at 1 Hz under canopy)


3. Multipath Mitigation

Menu: Positioning → Advanced

  • Enable Multipath mitigation = ON

  • This helps under trees and near reflective surfaces (fence, building walls, wet ground).


4. Base Message Output (RTCMBASE)

Menu: Messages → RTCMBASE

  • RTCM1005: 0

  • RTCM1033: 0

  • RTCM1074: 0

  • RTCM1084: 0

  • RTCM1094: 0

  • RTCM1124: 0

(All zero — you’re not a base)


5. Rover Message Output (RTCMROVER)

Menu: Messages → RTCMROVER

  • All = 0 unless you are outputting corrections to another rover (not your case)

6. NMEA Output (to SW Maps)

Menu: Messages → NMEA Output

  • GGA = 1 Hz (needed for mapping)

  • GST = 1 Hz (error estimates)

  • GSA = 1 Hz (solution status)

  • GSV = 1 Hz (optional, for satellite sky view in SW Maps)

  • All others = 0 unless needed


7. Correction Input

Menu: Input → Correction Source

  • PointPerfect: Keep L-Band or Internet source enabled, depending on location

  • NTRIP: Keep credentials and mountpoint set, auto-connect on boot


8. Antenna Settings

Menu: Hardware → Antenna

  • Antenna type: “External” if using pole antenna

  • Set survey-in disabled (not needed for rover)

  • Set “Antenna Delay” = manufacturer value (typically ~30–40 ns)


9. Data Logging (optional)

If you post-process occasionally, enable logging of RAWX and SFRBX at 1 Hz.


10. Extra Stability Tweaks

  • Don’t oversample: Higher than 2 Hz navigation rate can make FIX harder under trees.

  • Disable unnecessary Bluetooth profiles: Keep only SPP (Serial Port Profile) if using Android tablet.

  • Warm start: Keep Torch powered if moving between points — reduces time to re-fix.


If you apply this config, your Torch will:

  • Spend all its processing on tracking as many quality sats as possible

  • Avoid outputting useless base data

  • Keep SW Maps getting only the clean NMEA stream it needs

  • Increase FIX retention in tree canopy and valleys


I can make you a ready-to-import JSON config file so you can load this into your Torch in under 30 seconds instead of changing menus one-by-one.

Do you want me to make that file for you?

Missing from this was ChatGPT’s suggestion to try different Density on the PointPerfect Corrections, I went with 500x500km High Density and retaining corrections for up to 60 seconds

Correction source lifetime: 60 seconds

  • Keeps RTK Fix during short cell dropouts without instantly dropping to Float.

Here is a print out of the profile, I hope it helps anyone else who is a total newbie like myself and no GNSS training other than YouTube.

�VW1216) esp_cor
}���͡� No core dump partition found!
E (1216) esp_core_dump_flash: No core dump partition found!

AC:15:18:92:7C:C0 - wifiMACAddress

AC:15:18:92:7C:C2 - btMACAddress
AC:15:18:92:7C:C3 - ethernetMACAddress
LittleFS Started
Using profile #0
PSRAM Size (bytes): 2097152
I2C Devices:
0x08 - HUSB238 Power Delivery Sink Controller
0x0B - BQ40Z50 Battery Pack Manager / Fuel gauge
0x5C - MP27692A Power Management / Charger
0x60 - ATECC608A Cryptographic Coprocessor

SparkFun RTK Torch v2.2

GNSS UM980 online
Profile ‘PointPerfectTILTon’ loaded
Fuel gauge configuration complete
Charger configuration complete
UM980 configuration maintained
No GNSS date/time available for system RTC.
Bluetooth SPP and BLE broadcasting as: Torch Rover-7CC2
STATE_ROVER_NOT_STARTED → STATE_ROVER_NO_FIX
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Tilt sensor configuration complete
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
WiFi station state: WIFI_STATION_STATE_OFF, No consumers
MQTT Client state: MQTT_CLIENT_OFF, MQTT not enabled!
MQTT Client subscribe topics:
MQTT Client subscribed topics:
1: WiFi Station Starting
Soft AP Stopping
WiFi Station: Off
Host Name:
MAC Address: 00:00:00:00:00:00
Soft AP: Off
Host Name:
MAC Address: 00:00:00:00:00:00
Correction Source: None
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
WiFi station state: WIFI_STATION_STATE_OFF, No consumers
MQTT Client state: MQTT_CLIENT_OFF, MQTT not enabled!
MQTT Client subscribe topics:
MQTT Client subscribed topics:
1: WiFi Station Starting
Soft AP Stopping
WiFi Station: Off
Host Name:
MAC Address: 00:00:00:00:00:00
Soft AP: Off
Host Name:
MAC Address: 00:00:00:00:00:00
Correction Source: None
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
No GNSS date/time available for system RTC.
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
WiFi station state: WIFI_STATION_STATE_OFF, No consumers
MQTT Client state: MQTT_CLIENT_OFF, MQTT not enabled!
MQTT Client subscribe topics:
MQTT Client subscribed topics:
1: WiFi Station Starting
Soft AP Stopping
WiFi Station: Off
Host Name:
MAC Address: 00:00:00:00:00:00
Soft AP: Off
Host Name:
MAC Address: 00:00:00:00:00:00
Correction Source: None
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix
Rover Accuracy (m): 0.000, SIV: 0 GNSS State: No Fix

SparkFun RTK Torch v2.2
** Bluetooth SPP and BLE broadcasting as: Torch Rover-7CC2 **
Menu: Main

  1. Configure GNSS Receiver
  2. Configure GNSS Messages
  3. Configure Base
  4. Configure Ports
  5. Configure WiFi
  6. Configure TCP/UDP
    f) Firmware Update
    i) Configure Corrections Priorities
    p) Configure PointPerfect
    r) Configure Radios
    s) Configure System
    t) Configure Instrument Setup
    u) Configure User Profiles
    +) Enter Command line mode
    x) Exit
    u

Menu: User Profiles

  1. Select PointPerfectTILTon ← Current
  2. Select PointPerfectOFFtilt
  3. Select PointPerfectNOtilt
  4. Select E6-No-Tilt
  5. Select (Empty)
  6. Select (Empty)
  7. Select (Empty)
  8. Select Trst9
  9. Edit profile name: PointPerfectTILTon
  10. Set profile ‘PointPerfectTILTon’ to factory defaults
  11. Delete profile ‘PointPerfectTILTon’
  12. Print profile
    x) Exit
    12
    Select the profile to be printed (1-8): 1

sizeOfSettings=4000
rtkIdentifier=34
antennaHeight_mm=1000
antennaPhaseCenter_mm=116.50
coordinateInputType=0
fixedAltitude=1560.0890
fixedBase=0
fixedBaseCoordinateType=0
fixedEcefX=-1280206.568
fixedEcefY=-4716804.403
fixedEcefZ=4086665.484
fixedLat=40.090294790
fixedLong=-105.185057610
observationSeconds=60
observationPositionAccuracy=5.00
surveyInStartingAccuracy=2.0
enablePrintBatteryMessages=0
shutdownNoChargeTimeoutMinutes=0
enableBeeper=1
bluetoothRadioType=2
sppRxQueueSize=2048
sppTxQueueSize=32
correctionsSourcesLifetime=60
correctionsPriority_External Radio=4
correctionsPriority_ESP-Now=5
correctionsPriority_LoRa Radio=6
correctionsPriority_Bluetooth=3
correctionsPriority_USB Serial=2
correctionsPriority_TCP (NTRIP)=1
correctionsPriority_L-Band=7
correctionsPriority_IP (PointPerfect/MQTT)=0
debugCorrections=0
debugEspNow=0
enableEspNow=0
espnowPeerCount=0
espnowPeer_0=00:00:00:00:00:00,
espnowPeer_1=00:00:00:00:00:00,
espnowPeer_2=00:00:00:00:00:00,
espnowPeer_3=00:00:00:00:00:00,
espnowPeer_4=00:00:00:00:00:00,
autoFirmwareCheckMinutes=0
debugFirmwareUpdate=0
enableAutoFirmwareUpdate=0
serialGNSSRxFullThreshold=50
uartReceiveBufferSize=2048
debugGnss=0
enablePrintPosition=0
measurementRateMs=1000
navigationRate=1
gnssConfiguredOnce=1
gnssConfiguredBase=0
gnssConfiguredRover=1
debugHttpClientData=0
debugHttpClientState=0
debugMqttClientData=0
debugMqttClientState=1
mdnsEnable=1
mdnsHostName=rtk
debugNetworkLayer=0
printNetworkStatus=1
debugNtripClientRtcm=0
debugNtripClientState=0
enableNtripClient=0

It won’t post these settings properly

nTripClineCasterHost=rtk2go(dotCOM)

ntripClientCasterHost=rtk2go.com

ntripClientCasterPort=2101
ntripClientCasterUser=Test(atTest.com) - manually added Forum won’t accept

ntripClientCasterUserPW=
ntripClientMountPoint=bldr_SparkFun1
ntripClientMountPointPW=
ntripClientTransmitGGA=1
debugNtripServerRtcm=0
debugNtripServerState=0
enableNtripServer=0
enableRtcmMessageChecking=0
ntripServerCasterHost_0=rtk2go.com
ntripServerCasterHost_1=
ntripServerCasterHost_2=
ntripServerCasterHost_3=
ntripServerCasterPort_0=2101
ntripServerCasterPort_1=2101
ntripServerCasterPort_2=2101
ntripServerCasterPort_3=2101

ntripServerCasterUser_0=test@test.com

ntripServerCasterUser_1=
ntripServerCasterUser_2=
ntripServerCasterUser_3=
ntripServerCasterUserPW_0=
ntripServerCasterUserPW_1=
ntripServerCasterUserPW_2=
ntripServerCasterUserPW_3=
ntripServerMountPoint_0=bldr_dwntwn2
ntripServerMountPoint_1=
ntripServerMountPoint_2=
ntripServerMountPoint_3=
ntripServerMountPointPW_0=WR5wRo4H
ntripServerMountPointPW_1=
ntripServerMountPointPW_2=
ntripServerMountPointPW_3=
bluetoothInterruptsCore=1
btReadTaskCore=1
btReadTaskPriority=1
debugMalloc=0
enableHeapReport=0
enablePrintIdleTime=0
enablePsram=1
enableTaskReports=0
gnssReadTaskCore=1
gnssReadTaskPriority=1
gnssUartInterruptsCore=1
handleGnssDataTaskCore=1
handleGnssDataTaskPriority=1
i2cInterruptsCore=1
measurementScale=0
printBootTimes=0
printPartitionTable=0
printTaskStartStop=0
psramMallocLevel=40
rebootMinutes=0
resetCount=0
periodicDisplay=150860726288
periodicDisplayInterval=15000
autoKeyRenewal=1
debugPpCertificate=0
geographicRegion=0
lastKeyAttempt=1754782777
lbandFixTimeout=180
pointPerfectBrokerHost=pp.services.u-blox(dotcom) another manual change due to forum

pointPerfectBrokerHost=pp.services.u-blox.com

pointPerfectClientID=7f15064b-6433-4884-bd2e-09162b7d9e90
pointPerfectCurrentKey=1E65B98207C154B52579436B8FC02763
pointPerfectCurrentKeyDuration=2419199999
pointPerfectCurrentKeyStart=1753228782000
pointPerfectDeviceProfileToken=
pointPerfectKeyDistributionTopic=/pp/ubx/0236/ip
pointPerfectNextKey=D9BDD06D2D5D76ADFF29DAB83B58503A
pointPerfectNextKeyDuration=2419199999
pointPerfectNextKeyStart=1755647982000
pplFixTimeoutS=180
regionalCorrectionTopics_0=/pp/ip/us
regionalCorrectionTopics_1=/pp/ip/eu
regionalCorrectionTopics_2=
regionalCorrectionTopics_3=/pp/ip/kr
regionalCorrectionTopics_4=
pointPerfectService=5
profileName=PointPerfectTILTon
enablePrintRingBufferOffsets=0
gnssHandlerBufferSize=4096
dynamicModel=0
enablePrintRoverAccuracy=1
minCNO=15
minElev=15
enablePrintRtcSync=0
dataPortBaud=115200
echoUserInput=1
enableGnssToUsbSerial=0
radioPortBaud=57600
serialTimeoutGNSS=1
disableSetupButton=0
enablePrintDuplicateStates=0
enablePrintStates=1
lastState=0
debugTcpClient=0
enableTcpClient=0
tcpClientHost=
tcpClientPort=2948
debugTcpServer=0
enableTcpServer=0
tcpServerPort=2948
tcpUdpOverWiFiStation=1
timeZoneHours=0
timeZoneMinutes=0
timeZoneSeconds=0
debugUdpServer=1
enableUdpServer=0
udpServerPort=10110
enableGalileoHas=0
enableImuCompensationDebug=0
enableImuDebug=0
enableTiltCompensation=1
constellation_BeiDou=1
constellation_Galileo=1
constellation_GLONASS=1
constellation_GPS=1
constellation_QZSS=0
messageRateNMEA_GPDTM=0.00
messageRateNMEA_GPGBS=0.00
messageRateNMEA_GPGGA=1.00
messageRateNMEA_GPGLL=0.00
messageRateNMEA_GPGNS=0.00
messageRateNMEA_GPGRS=0.00
messageRateNMEA_GPGSA=1.00
messageRateNMEA_GPGST=1.00
messageRateNMEA_GPGSV=1.00
messageRateNMEA_GPRMC=1.00
messageRateNMEA_GPROT=0.00
messageRateNMEA_GPTHS=0.00
messageRateNMEA_GPVTG=0.00
messageRateNMEA_GPZDA=0.00
messageRateRTCMBase_RTCM1001=0.00
messageRateRTCMBase_RTCM1002=0.00
messageRateRTCMBase_RTCM1003=0.00
messageRateRTCMBase_RTCM1004=0.00
messageRateRTCMBase_RTCM1005=0.00
messageRateRTCMBase_RTCM1006=0.00
messageRateRTCMBase_RTCM1007=0.00
messageRateRTCMBase_RTCM1009=0.00
messageRateRTCMBase_RTCM1010=0.00
messageRateRTCMBase_RTCM1011=0.00
messageRateRTCMBase_RTCM1012=0.00
messageRateRTCMBase_RTCM1013=0.00
messageRateRTCMBase_RTCM1019=0.00
messageRateRTCMBase_RTCM1020=0.00
messageRateRTCMBase_RTCM1033=0.00
messageRateRTCMBase_RTCM1042=0.00
messageRateRTCMBase_RTCM1044=0.00
messageRateRTCMBase_RTCM1045=0.00
messageRateRTCMBase_RTCM1046=0.00
messageRateRTCMBase_RTCM1071=0.00
messageRateRTCMBase_RTCM1072=0.00
messageRateRTCMBase_RTCM1073=0.00
messageRateRTCMBase_RTCM1074=0.00
messageRateRTCMBase_RTCM1075=0.00
messageRateRTCMBase_RTCM1076=0.00
messageRateRTCMBase_RTCM1077=0.00
messageRateRTCMBase_RTCM1081=0.00
messageRateRTCMBase_RTCM1082=0.00
messageRateRTCMBase_RTCM1083=0.00
messageRateRTCMBase_RTCM1084=0.00
messageRateRTCMBase_RTCM1085=0.00
messageRateRTCMBase_RTCM1086=0.00
messageRateRTCMBase_RTCM1087=0.00
messageRateRTCMBase_RTCM1091=0.00
messageRateRTCMBase_RTCM1092=0.00
messageRateRTCMBase_RTCM1093=0.00
messageRateRTCMBase_RTCM1094=0.00
messageRateRTCMBase_RTCM1095=0.00
messageRateRTCMBase_RTCM1096=0.00
messageRateRTCMBase_RTCM1097=0.00
messageRateRTCMBase_RTCM1104=0.00
messageRateRTCMBase_RTCM1111=0.00
messageRateRTCMBase_RTCM1112=0.00
messageRateRTCMBase_RTCM1113=0.00
messageRateRTCMBase_RTCM1114=0.00
messageRateRTCMBase_RTCM1115=0.00
messageRateRTCMBase_RTCM1116=0.00
messageRateRTCMBase_RTCM1117=0.00
messageRateRTCMBase_RTCM1121=0.00
messageRateRTCMBase_RTCM1122=0.00
messageRateRTCMBase_RTCM1123=0.00
messageRateRTCMBase_RTCM1124=0.00
messageRateRTCMBase_RTCM1125=0.00
messageRateRTCMBase_RTCM1126=0.00
messageRateRTCMBase_RTCM1127=0.00
messageRateRTCMRover_RTCM1001=0.00
messageRateRTCMRover_RTCM1002=0.00
messageRateRTCMRover_RTCM1003=0.00
messageRateRTCMRover_RTCM1004=0.00
messageRateRTCMRover_RTCM1005=0.00
messageRateRTCMRover_RTCM1006=0.00
messageRateRTCMRover_RTCM1007=0.00
messageRateRTCMRover_RTCM1009=0.00
messageRateRTCMRover_RTCM1010=0.00
messageRateRTCMRover_RTCM1011=0.00
messageRateRTCMRover_RTCM1012=0.00
messageRateRTCMRover_RTCM1013=0.00
messageRateRTCMRover_RTCM1019=0.00
messageRateRTCMRover_RTCM1020=0.00
messageRateRTCMRover_RTCM1033=0.00
messageRateRTCMRover_RTCM1042=0.00
messageRateRTCMRover_RTCM1044=0.00
messageRateRTCMRover_RTCM1045=0.00
messageRateRTCMRover_RTCM1046=0.00
messageRateRTCMRover_RTCM1071=0.00
messageRateRTCMRover_RTCM1072=0.00
messageRateRTCMRover_RTCM1073=0.00
messageRateRTCMRover_RTCM1074=0.00
messageRateRTCMRover_RTCM1075=0.00
messageRateRTCMRover_RTCM1076=0.00
messageRateRTCMRover_RTCM1077=0.00
messageRateRTCMRover_RTCM1081=0.00
messageRateRTCMRover_RTCM1082=0.00
messageRateRTCMRover_RTCM1083=0.00
messageRateRTCMRover_RTCM1084=0.00
messageRateRTCMRover_RTCM1085=0.00
messageRateRTCMRover_RTCM1086=0.00
messageRateRTCMRover_RTCM1087=0.00
messageRateRTCMRover_RTCM1091=0.00
messageRateRTCMRover_RTCM1092=0.00
messageRateRTCMRover_RTCM1093=0.00
messageRateRTCMRover_RTCM1094=0.00
messageRateRTCMRover_RTCM1095=0.00
messageRateRTCMRover_RTCM1096=0.00
messageRateRTCMRover_RTCM1097=0.00
messageRateRTCMRover_RTCM1104=0.00
messageRateRTCMRover_RTCM1111=0.00
messageRateRTCMRover_RTCM1112=0.00
messageRateRTCMRover_RTCM1113=0.00
messageRateRTCMRover_RTCM1114=0.00
messageRateRTCMRover_RTCM1115=0.00
messageRateRTCMRover_RTCM1116=0.00
messageRateRTCMRover_RTCM1117=0.00
messageRateRTCMRover_RTCM1121=0.00
messageRateRTCMRover_RTCM1122=0.00
messageRateRTCMRover_RTCM1123=0.00
messageRateRTCMRover_RTCM1124=0.00
messageRateRTCMRover_RTCM1125=0.00
messageRateRTCMRover_RTCM1126=0.00
messageRateRTCMRover_RTCM1127=0.00
httpPort=80
debugWebServer=0
debugWifiState=0
enableCaptivePortal=1
wifiChannel=1
wifiConfigOverAP=0
wifiNetwork_0SSID=Surveillance249
wifiNetwork_0Password=paininthenuts
wifiNetwork_1SSID=Peanut2.4
wifiNetwork_1Password=paininthenuts
wifiNetwork_2SSID=
wifiNetwork_2Password=
wifiNetwork_3SSID=
wifiNetwork_3Password=
wifiConnectTimeoutMs=20000
outputTipAltitude=262400
useLocalizedDistribution=1
localizedDistributionTileLevel=4
useAssistNow=0
requestKeyUpdate=0
enableLora=0
loraCoordinationFrequency=910.000
debugLora=0
loraSerialInteractionTimeout_s=30
enableMultipathMitigation=1
debugSettings=0
enableNtripCaster=0
baseCasterOverride=0
rtkFirmwareVersion=v2.2
gnssFirmwareVersion=11833
gnssUniqueId=ff3bd4976a7d169b
otaRcFirmwareJsonUrl=
otaFirmwareJsonUrl=