ArduRover + PixHawk + GPS RTK WITHOUT telemetry: 4G connection

Hello,

I’m making a rover and I need to use GPS RTK.
In France we have a free RTK network (Centipède), so to acces them from the rover I need to get mobile connexion, such as 4G connexion.

I’m searching from several days the righ architecture, but doesn’t find a architecutre WITHOUT Mission Planer / Qgroundcontrol for connecting to NTRIP caster.

My goal is only rover + pixhawk + F9P + 4G connexion, no connexion via Telemtry to Mission Planer during Mission.

I would like to make this architecture : F9P > PixHawk > RPI > 4G Connexion
But I dosen’t find how I can send the RCTM3 frame from RPI to PixHawk.

Do you know how I can do ?

You only need to post your question once.

Try mavproxy to send RTCM3 to the autopilot.

https://ardupilot.org/mavproxy/

Or you could use a Ntrip client something like this GitHub - Coffeetrac/AG_NTRIP_ESP: AG Rooftop controller with NTRIP client and IMU (ESP32 Controller)

I think mavproxy is overkill if used only for RTCM and sometimes, at least in my case, it has been very very unstable and shutting down RTCM for no reason.
Been using str2str for nearly 2 years now with no probs at all, very reliable.

3 Likes

Figured MAVProxy might be a readymade solution that is well documented. I’ve used ser2net on a Raspberry Pi as a much lighter weight solution with a great deal of success, as well.

1 Like

ser2net to do what? I guess i don’t understand.

Serial RTCM3 → R Pi → ser2net → network connection → companion or GCS computer → autopilot

Perhaps I’m thinking a bit too complex, though. With an onboard companion and a cell connection, it could connect directly to the NTRIP server and then output over UART to the autopilot.

Ah ok. I was talking about str2str, part of rtklib. Can connect to a cors and stream connection out. So it is ideal for 4g connected raspberry.
Really takes 5 minutes to setup on a raspberry.
(i am about half way trough your lua video tutorial. Really nice, thanks).

2 Likes

Thanks a lot for your answer.

just for clarification : in all case, the computing of the RTCM3 frame is made IN the GPS F9P module ?

(it’s not my use case, but just to clarify : So when we send RTCM via Telemetry, pixhawk just transfer the frame to the F9P and then F9P return corrected position ?)

Yes. The autopilot is just a conduit for RTCM3 to the GPS modules, and it can be transmitted externally as needed.

Hi,

thank you for this topic, it has been really helpful for me to understand how to use RTKLIB properly ! I just have a question for my understanding: I set str2str has proposed by Corrado_Steri on my computer and I receive the information from the Ntrip server.

To get proper positioning I need one str2str which request RTCM data to the Ntrip server and one str2str which send the position in NMEA from the GNSS device to the Ntrip server ?

Hi Hexor,

I am trying exactly the same thing. Did you get it to work? any advice?

@Yuri_Rage Currently I’m running as:

RTK Base Station (Rpi):
Serial RTCM3 → RPi → str2str → rtk2go.com

Rover companion computer:
rtk2go.com → Ntrip module in Mavproxy → mav message → ardurover on pixhawk

I want to take rtk2go.com out of the loop. The RTK base station and the Rover companion computer are on the same network.

If I don’t want to use rtk2go.com, how could I send corrections (available as serial rtcm3 on the RTK base station computer) to the ardurover on Pixhawk on my rover? The ntrip mavproxy module seems to require an ntrip caster, i.e. it doesn’t seem like it could connect to a tcp port on the base station.

How did you implement “companion computer → autopilot” above?

Thanks!

@Yuri_Rage @jimovonz
Couldn’t I just write a python program running on the companion computer which (a) reads the data stream from the RTK Base Station using tcp/ip (using a simple tcpip server on the base station) and (b) sends that data onwards using GPS_RTCM_DATA?? Do I need to parse this data stream at all (for example, recognize the RTCM messages and break the stream up so that I only send 1 rtcm message per GPS_RTCM_DATA message)?


something like this:

def send_rtcm_data(mav, rtcm_data):
flags = 0
length = len(rtcm_data)
data = rtcm_data[:180] # Ensure data is no more than 180 bytes
message = mavlink.MAVLink_gps_rtcm_data_message(flags, length, data)
mav.send(message)

str2str should be able to create a local NTRIP caster with a command like this:

str2str -in serial://ttyUSB1:115200 -out ntrips://:12345/BASE

In the example, you’d connect MAVProxy to the base’s IP address on port 12345 at the mountpoint, “BASE.”

1 Like

I was not aware that str2str supported this. This is the best solution

@Yuri_Rage won’t this command:

str2str -in serial://ttyUSB1:115200 -out ntrips://:12345/BASE

create an ntrip server, not an ntrip caster?

As I understand it, the ntrip module in mavproxy expects to connect to an ntrip caster.

Unless I sorely misunderstand the architecture, that command will create a server that casts your correction data and allows client connections. MAVProxy is the client.

Re: Ntrip Server vs NTrip Caster

“The Caster is the real Server”
“Each Server pushes data from a connection source to the Caster.”

image

Yes, I get that. But the only reason for the above syntax to ever work would be to create a local (LAN) connection to the data stream.

If it doesn’t work as was supposed by a user on another forum (whose link I’ve long since lost), make a feature request to support TCP/UDP RTCM3 streams in MAVProxy. It seems like a sorely missing feature.

1 Like