Is the UM982 an F9P killer for AOG?

The Unicorecomm UM982 has some impressive specifications and capabilities that, on paper, seem seem to obviate the need for single F9P/IMU or dual F9P’s.

2 Ghz dual core processor
Dual antenna heading solutions
Up to 20 Hz position / heading update rate
3 serial ports up to 921600 bps
Sub-CM RTK accuracy
RTCM 3.x support with adaptive format recognition
NMEA-0183 v4.10 & 4.11 data output
Unicorecomm extended NMEA data output and Unicorecomm data outputs

All of the data for a complete PANDA sentence is available from 3 NMEA sentences. The AOG firmware coding is greatly simplified as relative positioning, heading, etc calculations are handled by the UM982. AOG firmware only needs to do string manipulation to build the PANDA sentence and output the data over serial, UDP, etc. A less expensive ESP32 could easily handle these tasks instead of a Teensy 4.x processor.

A firmware update from Unicorecomm could also provide a complete PANDA sentence or all the data for one in a single data output sentence.

UM982 boards are available on Aliexpress for $110 - $140. Considerably less expensive than even 1 F9P. Below is the user manual and commands reference manual.

UM982_User_Manual_EN_R1_11.pdf (895.5 KB)

Edited 7-20-24 to add the latest command manual.
Unicore Reference Commands Manual For N4 High Precision Products_V2_EN_R1.4.pdf (2.0 MB)

Edited to add new Unicore Evaluation Board manual
UM982eb_User_Manual_EN_R1_01.pdf (2.7 MB)
UM982EVB V1.0 differential positioning directional board.pdf (794.9 KB)

Unicore OBS to Rinex converter application
Converter3.0.7.exe.zip (647.6 KB)

Teensy firmware to pass through KSXT messages directly to AgIO.
teensy_um982_alpha.hex.zip (356.0 KB)

Teensy firmware to autoconfig UM982, process GGA,VTG&HPR message set and Keya motor.
AOG_Teensy_UM982_Keya.hex.zip (380.6 KB)

Latest publicly available firmware from the Ardusimple site. Unzip password is 1234
UM982_R4.10Build11826 (1).zip (2.2 MB)

Uprecise configuration and testing software
https://www.ardusimple.com/wp-content/uploads/2024/08/UPrecise-V2.0.1032.zip

Ardusimple UM982 page with some good config and user info

Reliable Aliexpress Store for the UM982. I have used them 4 times with excellent results.
https://www.aliexpress.com/store/1101978918

These antennas work well with the UM982. I have bought them 4 times as well.
https://www.aliexpress.us/item/3256806514860168.html

The UM982’s receiver’s dual capabilities only provide heading information. It does not provide roll information. You’d still need an IMU and teensy to make PANDA.

Tra message have roll pitch and heading. But 20 hz is slow than bno

Hmm, the command manual shows $GPTRA2 contains heading, pitch and roll data. $GPROT2 or $GPROT both contain rate of turn data.

Most of the IMU information from the BNO is not used by the AOG firmware in single GPS mode. The AOG firmware only outputs a PANDA sentence at 10Hz. The firmware code polls the BNO much faster to provide a stream of BNO data at 50Hz so when the GPS data is ready it can get BNO data that corresponds to the GPS data.

In dual GPS mode, the AOG firmware does not use the BNO at all. Roll is calculated by the Teensy using the GPS data from both GPS units. Here is where the UM982 comes in handy as it can do these calculations internally simplifying the AOG firmware code.

It is worth a try.
It needs to be verified if the heading and roll are stable.

I have one coming in 9/16 or so from Aliexpress. I have start the firmware code changes basing it off of Mechnictony’s basic dual which I already modified to use Wifi instead of Ethernet.

Will report back once I get it all working.

why not port the firmware for aio?

Once you tear out the RelPos, Roll and IMU code there is very little difference between the two. They both use NMEA parser and standard Arduino networking, etc. libraries. I use ESP32, Wifi and a light bar instead of running Ethernet all over the tractor. I was taking the path of least resistance.

Once the UM982 specific code is all working, ripping out the above from the AIO code and replacing it with the UM982 specific code is pretty easy.

1 Like

I just got mine in and I want to modify the AIO code to work with both the F9P and UM982 interchangeable. I will post the final code if I ever get it to work

1 Like

Good catch, you are right and I was wrong, it does give roll information.

Are you able to find the roll accuracy? I’ve heard its like +/- 2 degrees (can’t find a spec for it in documentation anywhere). Rumours and whispers of earlier attempts at using UM982 for dual stopped there.

The slave antenna doesn’t receive all the bands that the primary antenna does. I think that causes a hardware limit to the roll accuracy?

Position, heading and velocity accuracy look similar or better than F9P. F9P has better vertical accuracy. Roll goes to two decimal places for precision. Not sure about accuracy which will be something to test when I get it running. The slave antenna is missing some of the minor bands but for the USA where I am it looks like it covers what is needed.

Even if roll accuracy is slightly off, it is still considerably less expensive at ~$120 than 2 F9P’s at ~$450. A BNO08x is like $30 so if roll accuracy (± 1 degree) is important it can be used to get the data.

1 Like

Skytraq also offers a dual antenna board. PX1172RH. There’s even code in AOG (probably in AgIO) to read the $PSTI messages it generates. It’s not much more than the UM982 boards. Comes out of Taiwan.

Anyway the UM982 is worth looking at. I’ll likely order a board or two to play with. Seems like the NMEA messages are very similar to what PX1172RH does, so it shouldn’t be too hard to add support to AOG for it. Look in AgIO for the parsing of PSTI. Should be pretty straight forward to do the same thing with the UM982 messages.

Roll accuracy will be the same as the other dual antenna solutions and also the dual f9p. It’s based on two factors. The distance between the antennas (more is better), and the fact that elevation is half the accuracy of lateral position. So it’s pretty easy to calculate the error. So if we assume the RTK position is within 2cm, that means the elevation error is 4cm. And actually it’s up to double that because each antenna is +/- 4 cm. So the total max error in the roll angle is arctan(8cm / distance_between_antennas). If you had 150 cm between antennas, the maximum roll error is +/- 3 degrees, but in practice it’s averages out to be smaller than that in my experience. Plus you can filter the roll a bit.

Autosteer_gps_teensy_v5_1_um982 (2).zip (46,5 КБ)
um982 and bno, for use heading from um982 need comment 230 line and uncomment 232 and 233 in zhandlers

1 Like

I have a um982 and when configured to output ksxt agio can use this directly for position, heading and roll. From my limited testing in the yard with Tony’s teensy can ino in gps passing mode it works. Roll seems stable and tractor steered ok through some undulations so I think it is very promising.

Does um982 works power from 3.3v? Mine doesn’t. Also if its connected to 5v before PCB or usb to ttl is powered it makes noise and doesn’t power on. Only after reconnecting 5v power supply its started to work.

It makes short when first powered on, when 5v is reconnected to vcc pin it started working normal. This make it hard to integrate into pcb. Maybe this module has fault. This behaivor is observed even when only 5v and gnd is connected to module.

Other wise it has good accuracy, triband and alot cheaper then f9p. Bno08x and second antenna are about same price, so testing is needed what is more accurate. 1 deg of roll is 5cm of the line on 3m antenna height so F9P ~14mm or UM982 ~8mm RTK accuaracy are not main problem its roll accuracy.

What is Tony’s teensy can ino?

Where can I find it?

ESP32-AIO1.zip (12,0 КБ)
It is not Tony’s teensy can ino. But maybe someone will check this sketch.

I’m wanting to try a Standard AiO PCB with the bynav footprint, it looks like it’s compatible with the um982. I believe Ksxt parsing was added for the bynav but if the um982 supports it too then the code should already work. I just don’t have a dev board to use for programming my um982 so I’m not sure yet how I’ll do that.