Water Linked Underwater GPS NMEA bridge

Happy new year everyone!

To celebrate the new year, we created a new application for handling NMEA in/out of the Underwater GPS :tada: (We had this available already as a Python script, but the new application should be much easier to install)

The application makes it easy to send GPS/Compass from a boat to the Underwater GPS and sending the lat/lon of the Locator as NMEA to a chart plotter.

This is the first release, so please test it and give feedback:

3 Likes

I managed to download the link, but when i connected the nmea0183 to my laptop it did not show any sign of connections to this program.
I have Reefmaster on the same laptop and i got the HDG/POS there from my nmea0183 connection. Is there something else i miss here?

Thanks for testing the script and giving feedback!

It looks like you have not specified any input, so it is waiting for NMEA packets on UDP on port 7777.
What serial port are you using in Reefmaster? You have to specify the serial port when starting the program. The easiest is to create a “ugps.bat” file and add the serial port to use there.

Here is an example of such a file where is uses COM10 as input and sends the resulting NMEA on UDP to localhost port 9999:

nmea_ugps_windows_amd64.exe -i COM10@9600 -o localhost:9999


I managed to get the posision into GUI, but it will not accept my GPS-kompass on my Lowrance chartplotter that send nmeastring on HDG and THS. Is it possible to implement that as well as HDT?

Great to see you’re getting close to having it working! I’ve published a 1.1.0 release now which has support for the THS sentence(*).

(*) HDG is unfortunately not available in the NMEA library we use, so not so easy to add it

Thanks for the quick respond!
After i installed the latest version i am now able to get HDG input from my Lowrance chartplotter.
I also increased the bautrate to 19200 and the pos/HDG seems to update with less latency. Next step will be to get A1 locator on the Lowrance screen.

Great, getting really close now!

I did another update (v1.1.1) which allows the same COM port to be used as both input and output. This is probably what you want to get lat/lon/heading input from a boat and sending the resulting position back into a chart plotter.

You enable it by specifying the same port in and out:
nmea_ugps_windows_amd64.exe -i COM10@9600 -o COM10@9600

I am not sure if sending a GPGGA back into the same network that we got the position from in the first place will actually work. Hopefully someone can give some feedback on this.

Very interesting if ROV position is possible to plot on basic chartplotter this way.
I have tried that with no success.
The way I do that today is by sending ROV positioning as simulated TLL radarplotting to OpenCPN:

Bo

Thanks for the input Bo!

After thinking a bit more about it, I think it might not work. Probably there will be 2 GPS sources which have different position and the chart plotter might get a bit confused by that.
It might be an option to present it as another satellite source (for example Galileo which is GAGGA istead of GPGGA). However this might just show the boat position where the ROV is.

Presumably using RATLL for output is the best option for this application then, however this might not be supported by all chart plotters.

Rather than fake a second GPS you could look at the NMEA AIS sentences eg AIVDM to have the rov turn up as an AIS target on the chart plotter

Thanks for the suggestion Scott!

I looked a bit at the NMEA AIS sentences and that is much more complicated to support than the radar target. So from an implementation point of view, the RATLL wins.

I have now released v1.1.2 which fixes an error in parsing the command arguments (introduced in 1.1.1)

I have now added support for outputting the RATLL sentence (in addition to the GPGGA).
I’ve tested it with success using OpenCPN.

The release is available on github as v1.2.0.

1 Like

Great that you have developed a GPS bridge Kristian!
We are trying to get the nmea_ugps_windows_amd64 to work but get an error-messag.

Do you have a tips for us what to test next?
We would very much get this up an running before next week when we have a lot of rov-missions planned

We are running this command:
nmea_ugps_windows_amd64 -i 192.168.1.2:5001 -o 127.0.0.1:9999 -sentence GPGGA

And get this output:
Water Linked NMEA UGPS bridge (v1.3.0 local.143cc81)
panic: listen udp 192.168.1.2:5001: bind: The requested address is not valid in its context.
goroutine 6 [running]:
main.inputUDPLoop(0xc0000140e0, 0x10, 0xc0000d2000, 0xc000050240)
/home/runner/work/ugps-nmea-go/ugps-nmea-go/in.go:86 +0x4c6
created by main.main
/home/runner/work/ugps-nmea-go/ugps-nmea-go/main.go:105 +0x698

We have tried using to inputs from to different GPSs on the boat whithout success.

This is the output (captured with putty) from GPS1 (port 5020):
&N ÿLP H ƐS@ XË( ²½ ˜/€ˆ%€ ©tÇöyÓË÷Š›ü„½÷Êÿÿ ÿÿ é “8€Šþ%€ ‹‰ûñ€%¯ø¡÷Çź"ü–ÅaYúõ'a´æÿÿ ÿÿ ‚$GNRMC,105954.60,A,6940.84159343,N,01859.88614378,E,0.020,239.662,250820,9.4831,E,D*12 $GNGGA,105954.60,6940.84159343,N,01859.88614378,E,5,17,0.6,5.260,M,31.070,M,0.6,2288*54 PuTTY “&g ÿLP H
ƐS XË*@ ²Ø ˜/€ˆ+À òú 3P{Ýô»w
eB¤RûÈ&öCµ ÿÿ ü “8€Šý+À Hû”hÑE÷²‡ö¹ ©üU5 24úmú M«ÿÿ
ÿÿ A$GNRMC,105954.70,A,6940.84159494,N,01859.88614240,E,0.004,0.000,250820,9.4831,E,D18
$GNGGA,105954.70,6940.84159494,N,01859.88614240,E,5,17,0.6,5.269,M,31.070,M,0.7,2288
5A

This is the output (captured with putty) from GPS2 (port 5001):
$GPMDA,9.78,C,04
$GPVHW,134.3,T,21
$GPVTG,117.3,T,0.0,N,0.0,K,A
44
$GPGGA,111023,6940.8415,N,01859.8846,E,1,19,0.6,41.3,M,30.0,M,7D
$GPRMC,111023,A,6940.8415,N,01859.8846,E,0.0,64.7,250820,A
4C
$GPHDT,134.3,T
30
$GPMTW,9.81,C04
$GPDPT,3.8,0.0,70
$GPZDA,111024,25,08,2020,00,00
40
$GPMDA,9.81,C,02
$GPVHW,134.3,T,21
$GPVTG,61.7,T,0.0,N,0.0,K,A
70
$GPGGA,111024,6940.8415,N,01859.8846,E,1,19,0.6,41.3,M,30.0,M,7A
$GPRMC,111024,A,6940.8415,N,01859.8846,E,0.0,244.8,250820,A
74
$GPHDT,134.3,T
30
$GPMTW,9.81,C
04
$GPDPT,3.8,0.0,70
$GPZDA,111025,25,08,2020,00,00
41

Hi Harald,

Great to hear that you think it is useful.
Looks like you are trying to use an IP address which is not available on your network card.
The UDP socket can only bind to a local IP address and port.

If you are unable to get it working, run “ip_config /a” to see what ip’s you can bind to.

Hi Kristian,

we are very grateful for the application which works great, however we would like to use it to output our boat position as well as the locator position to a chart plotter like openCPN.

I am thinking that this could be achieved by outputting the Waterlinked “master” position via another udp port. If I was even remotely fluent in the Go language I would have probably tried it without asking here first. But before trying to learn I wanted to ask if it is something you have ever considered

many thanks

Matt

Hi!
One problem is that plotting programs like OpenCPN can only use one position for the ship.
A solution for that is to have the ROV sending RATLL as position.
Then the plotting program thinks you are plotting a radar target; you will get ship position and ROV position at the same time.
That function should be implemented already in this post:

If you want to do it by python 2.7 you can use my script:

Hi Bo,

Thanks for your fast reply :slight_smile: I thought in openCPN I could add as many inputs as I wanted by adding more connections as shown in the screen shot below for example although I havent actauly tested this so maybe I am wrong!

Thanks very much for your python scrip that is definitely what I will do if I can’t implement it in Go. I already have a python scrip running logging the data and I guess from a user point of view I thought it might make us more simple to to use the NMEA bridge as this is running anyhow to feed external GPS to our Waterlinked UGPS

Thanks again for your python code Bo , just in case anyone else wants to use it and they are using python 3 I just had to change line 75 in RadarTLL_nmeaout_Boko.py to:

sock.sendto(message.encode(‘utf-8’), (ip, port))

1 Like

Hi Matt,

I have gotten questions from another customer, so we’ve added an experimental feature in the latest release which allows you to re-transmit the input from a COM port out to UDP.

It is enabled with the “retransmit” keyword within the input section.
Here is the example: