Why skyviper can get DGPS 3D lock with it’s original EvaM8M gps chip without receiving RTCM message?

Currently I am using base station to improve sv’s positioning , I have read M8M’s datasheet that it can Handle RTCM2.3 itself, but before I send a RTCM to gps, I found that sv can get a DGPS lock by itself, that’s wired

1 Like

It will use SBAS information provided by some geostationary satellites. But this information is not as good as local calculated RTCM 2.3 corrections.
But AFAIK the SkyViper v2450 GPS does not support RTK, after all the entire copter cost about 1/6 of the cheapest RTK system available in the market :slight_smile:

@amilcarlucas thanks man, ublox m8p would be my rtk choice, but before that I would like to test this, d-gps, not RTK yet

RTCM can not be used together with SBAS…
That is bad news.

Please do post if you get RTCM to run.

@amilcarlucas just disable SBAS and made it work with RTCM2.3,here are some static test

  1. Disable SBAS and get 3D fix, 2D acc 1.10m

  2. Enable SBAS and get DGNSS fixed, 2D acc 0.91m

  3. Disable SBAS, send RTCM2.3 and get DGNSS fixed, 2D acc 0.84m

by the way, these RTCM2.3 message is getting from commercial NTRIP server,I still have trouble converting my M8P base station’s RTCM3.2 output to 2.3

what is the different between GPS_INJECT_DATA and GPS_RTCM_DATA, I am trying to send rtcm2 to gps through Ardupilot, but both of these two mavlink message not working, here are some data samples

GPS_INJECT_DATA {target_system : 1, target_component : 0, len : 110, data : Y~}qGnPxrO~oLFkABO@|M@`m_I@^nBDAXhC`A_@bCV@@RK@cM_r]X}on}@@@n_vAV@d@@Zf@pvS|YbYF|nGM^|Mp~_dd[{c\@fM`I}
GPS_INJECT_DATA {target_system : 1, target_component : 0, len : 110, data : IAKfORfwAPqw@Z{Ek@lxoEIaA@ejma@P}AcDHV@xI@CIA@@MfUB@UxZiEOFB@Av~JXq}{SVXH@PNP{aAH@AKFm~{wECT@Pl_GNQ}
GPS_INJECT_DATA {target_system : 1, target_component : 0, len : 20, data : @AEDxx{cormoPpe@@J}
GPS_INJECT_DATA {target_system : 1, target_component : 0, len : 110, data : fAB@NxqdGfO~oLc@T~}U@|M@ER`vDnAHAeW|_^R@bCV@@R{wM_rxg~_QX@t@\vAh[eYO@IlC@f]fyC@QxJlCjOA`[~[{cyYr_S}
GPS_INJECT_DATA {target_system : 1, target_component : 0, len : 110, data : IAnY@xm`wAPqw@X{EGSOPCIaA@eZ|m]@o|FcDHV@xE@av~WfUB@pGE\zQFB@AS@Aucq}{SVXH@PNP{aAH@AKFm~{wE]T@Pc_GO~}
GPS_INJECT_DATA {target_system : 1, target_component : 0, len : 20, data : ~z{bx{cJMR@PJpe@@o}

GPS_INJECT_DATA is deprecated
Use GPS_RTCM_DATA but make sure you get the flags right. There is one mavproxy module that does this for you.

@amilcarlucas so nice see your rely at this moment! I just extract code from that module, and find that gps fixed type did not changed, and in order to check the data, I also write data to telem1 like this

AP_GPS_Backend::inject_data(const uint8_t *data, uint16_t len)
    // not all backends have valid ports
    if (port != nullptr) {
        if (port->txspace() > len) {
            port->write(data, len);
            hal.uartC->write(data, len);

then I get that data out from uart tools, the data len is much longer, working overnight to solve this :joy:
Is my way wrong?

The ardupilot code already copes with RTCM messages upto around 700 bytes. Those are segmented into multiple GPS_RTCM_DATA packets in the ground station, and assembled together by the ardupilot FW, before getting sent to the GPS device.

Longer messages get discarded by mavproxy.

I do not understand your question.

@amilcarlucas just write a simple UDP server and tried mavproxy dgps module, it performed the same as my code, when I directly connect to the gps and send RTCM it works

@amilcarlucas here is the picture of rtcm2.3 input and flight controller output, I guess the message is mess up already

I have check *data’s uint8_t value from AP_GPS_Backend::inject_data(const uint8_t *data, uint16_t len)
it seems correct(the same with MAVLink_gps_rtcm_data_message’s data playload, both value and order), I also use hal.uartC->write(data, len) in the same time, it just not output what I want, maybe I am not familiar with the UART func with ardupilot, when I try hal.uartC->write(‘d’), it just output a two byte value, by the way uartC has been set to a none data output protocol like Beacon

What is your GPS_INJECT_TO parameter ?

@amilcarlucas send_to_all

the output from the gps port is showing it has not detected any gps. its still scanning for the ublox gps, which i asume is not connected.

change the gps type to force the ublox driver.

as what you are seeing now is the autodetect code output

@Michael_Oborne My mind is a little wired, cause hal.uartC->write not getting output as I expected, so in order to get origin fc gps port output to find out what is going on, I just pull gps out when gps detect and config is done and plug my uart tool in :persevere:, but I check the fc debug console, AP_GPS_Backend::inject_data is still executing as I put some log there

In another way, I also tried inject rtcm2.3 in mission planner with tcp connection to data source which shows mp can receive data, but not sending to fc, rtcm3.2 output from M8P in connection with serial works fine, I guess mp not working with rtcm2.3?

just find another way to get origin fc gps port output, made sure that the rtcm injection function is good, also send 0x00~0xFF as rtcm data, value and order is both correct, maybe it the ublox config problem? next to find out

@amilcarlucas @Michael_Oborne Finally solve this! ublox driver auto config code’s setting is UBX +NEMA+RTCM3 so using RTCM2 need to change config,maybe another params option would be better(sending this config by mavlink is also convenient)

Good catch. Thanks.
But why are you using RTCM2 ?
RTCM 3.1 is a lot more data rate efficient.

@amilcarlucas RTCM 3.x is more efficient, but for most lower cost chip, it only accept rtcm2.3, another option for me is running RTK software in Companion Computer, but this would reduce reliability and EVA-M8M seems not support raw data mode to output original measurement data

OK, I get it now. Good work figuring all this out !!