RELPOSNED.. How to calibrate absolute heading

@rmackay9 @tridge I was excited to see relposned support in the november updates. Can you point me to whatever document is available for RELPOSNED support? Even comments in the code if that’s all there is. I have the a pair of ardusimple gpss on my lawn mower rover, antennas 1m apart, and I’d love to use them for heading rather than my compass. Thanks in advance,

1 Like

I’ve done a PR here that makes it all very simple:

that PR should be in a future release. You could build that PR code now if you want to try it. Instructions for use are in the PR

1 Like

@tridge thank you! I’ll keep you posted.

@tridge I’m hoping you can help. I want to connect 2 GPSs to my Pixhawk4. Must I use “GPS Module” as one of the connections? Ideally I would like to use “TELEM 2” and “UART & I2C B”. But I can’t for the life of me figure out which Ardupilot parameters control which port GPS_1 is connected to and which port GPS_2 is connected to. In fact I can’t find any documentation about which serial port is connected to UART & I2CB. Do you know if there is any documentation anywhere on this? I can get Pixhawk to talk to both GPSs when plugged in to TELEM1 and TELEM2, but I can’t figure how to specity which of the GPSs is GPS1 and which is GPS2.

Make sure the other SERIALn_PROTOCOL values are not set to 5.

@tridge thanks that worked to get the Pixhawk talking to 2 ardusimple GPSs on those ports… (I don’t think the relationships between pixhawk physcical ports and serial ports is documented anywhere!) I have:

TELEM2 -> GPS1 -> simpleRTK2BLite -> base
UART&I2CB -> GPS2 -> simpleRTK2B -> rover

When I run that config with GPS_TYPE=1 and GPS_TYPE2=1, pixhawk receives fixes (but no heading info) from both GPSs. When I switch to GPS_TYPE=17 and 18, I get “EKF3 waiting for GPS config data” message… So I need to sort through the config messages you’re sending at startup… Can you tell me how to enable debugging of the raw communication to/from the 2 GPSs?

Don’t know if you’re familiar with the Ardusimple boards but the 2 GPS ublox chips are physically connected so the base passes the RTCM corrections (and its position) to the rover directly. Using Ardusimple’s recommended configuration, and my setup described above, this is what I am working towards:
simpleRTK2BLite (moving base) (GPS1) takes RTCM3 data (from the pixhawk on TELEM2)
simpleRTK2BLite outputs UBX-NAV-PVT (to the pixhawk on TELEM2)
simpleRTK2B (rover) (GPS2) outputs UBX-NAV-RELPOSNED (to the pixhawk on UART&I2CB)

Hello, how is it going? I am facing the same problem, the MP does not display 2 GPSs.

Yesterday I tried the new F9P moving baseline setup that is supported in master. I have been using my own custom implementation of this setup for months now but want to have our version of the code as close to mainstream as possible (for easier maintenance). I encountered a few obstacles. Firstly Ardurover did not detect the GPS modules. My solution to this was to reset both units to default settings. I also had to enable GPS_AUTO_CONFIG. After this I got two GNSS units correctly detected. However, I still did not have any heading information. I connected up u-center to the rover F9P and I could see that the RELPOSNED message was only very intermittently reporting a heading. To fix this I had to lower the output rate of the base F9P to 5Hz (GPS_RATE_MS = 200). I believe that at 10Hz output, the base F9P is unable to also get the corrections to the rover F9P with a suitable time frame which invalidates its moving baseline solution. After this change I could see a yaw value reported by GPS_RAW2 (mavproxy). Unfortunately this yaw value indicated the wrong direction. I believe that I have the GPS_POS parameters set correctly (see For my setup I had both GNSS antennas set up either side of the Pixhawk with the base F9P attached the the antenna that was at y=0.508 and the rover F9P attached to the antenna at y=-0.501 for a total separation of 1.08m. The only way I could get the correct orientation output was to set the base antenna location to (0,0) and the rover to (0,-1.08) . I have not had time to look at the code to see what is happening here… Additionally, I have found that the current code rejects rtk float solutions. In less than ideal GNSS environments, this can cause frequent heading dropouts. It has been my experience that float solutions with reported baseline lengths that are close to the actual baseline lengths, produce a reasonably accurate heading. It has also been my experience that the reported heading accuracy can be wildly optimistic and report much greater accuracy than is actually being achieved. Given that we have one piece of crucial information that the F9P does not (actual baseline length), I believe that we are in a better position to judge the accuracy. I think that there would be benefits in determining accuracy based on reported baseline length compared to actual and having a threshold based on this.

I’m working on another set of issues at the moment, and not on getting heading from my 2 GPS units. I’ll keep you posted when I get back to working on it.


Now I am trying get the heading using 2 GPSs (F9P) but difficult now. After that is RTK at stable base and Dual GPSs. If you have any experiences on the heading using F9P, please help!

Thank you in advance!

That sounds so great, I will try it when I get back to. Many thanks for figuring out the rate which is very important key!

Hi @Christopher_Milner could you please elaborate on how the base passes its position to the rover. I am working on a base and rover system using ublox ZED-F9P receivers. I believe there is a way for the rover to use base relative position (I assume using RELPOSNED) but I believe I need to know the position of the base. I am currently transmitting RTCM messages to the rover. Do I also need to transmit RELPOSNED or does the rover need to parse RTCM 1005 to retrieve the base position. I assume there is a typical way to do this. Could you please explain how this is done? Thanks. Matt.

It is not obvious what you are trying to achieve. When you say you are working on a ‘base and rover system’, are you talking about a moving baseline setup where the objective is to obtain heading information or are you talking about a fixed baseline setup where you are looking to obtain an accurate RTK position of your rover? If you are talking about the moving baseline setup that is the topic of this thread then the latest master branch of the code has the configuration of the F9P handled automatically for you. The transmission of the RTCM messages from base to rover is handled via the Pixhawk (or whatever flight controller hardware you are using). If you are also using the latest version of Mission Planner then your second GPS should appear in the HUD with an RTKfix status.