Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Wide Lane Ambiguity Resolution #646

Open
wants to merge 4 commits into
base: rtklib_2.4.3
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 33 additions & 16 deletions app/consapp/rnx2rtkp/rnx2rtkp.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ static const char *help[]={
"",
" usage: rnx2rtkp [option]... file file [...]",
"",
" Read RINEX OBS/NAV/GNAV/HNAV/CLK, SP3, SBAS message log files and ccompute ",
" Read RINEX OBS/NAV/GNAV/HNAV/CLK, SP3, SBAS message log files and compute ",
" receiver (rover) positions and output position solutions.",
" The first RINEX OBS file shall contain receiver (rover) observations. For the",
" relative mode, the second RINEX OBS file shall contain reference",
Expand Down Expand Up @@ -57,16 +57,22 @@ static const char *help[]={
" -c forward/backward combined solutions [off]",
" -i instantaneous integer ambiguity resolution [off]",
" -h fix and hold for integer ambiguity resolution [off]",
" -w widelane integer ambiguity resolution [off]",
" -e output x/y/z-ecef position [latitude/longitude/height]",
" -a output e/n/u-baseline [latitude/longitude/height]",
" -n output NMEA-0183 GGA sentence [off]",
" -g output latitude/longitude in the form of ddd mm ss.ss' [ddd.ddd]",
" -t output time in the form of yyyy/mm/dd hh:mm:ss.ss [sssss.ss]",
" -u output time in utc [gpst]",
" -z output single point position when unable to compute",
" DGPS/float/fix/PPP position",
" -d col number of decimals in time [3]",
" -s sep field separator [' ']",
" -r x y z reference (base) receiver ecef pos (m) [average of single pos]",
" rover receiver ecef pos (m) for fixed or ppp-fixed mode",
" -rb mode reference (base) receiver position mode (1:average of single pos,",
" 2:read from file,3:read from RINEX header,6:read from RINEX header",
" and subsequent site occupancy events) [1]",
" -l lat lon hgt reference (base) receiver latitude/longitude/height (deg/m)",
" rover latitude/longitude/height for fixed or ppp-fixed mode",
" -y level output soltion status (0:off,1:states,2:residuals) [0]",
Expand Down Expand Up @@ -99,16 +105,18 @@ int main(int argc, char **argv)
gtime_t ts={0},te={0};
double tint=0.0,es[]={2000,1,1,0,0,0},ee[]={2000,12,31,23,59,59},pos[3];
int i,j,n,ret;
char *infile[MAXFILE],*outfile="",*p;

prcopt.mode =PMODE_KINEMA;
char *infile[MAXFILE] = {[0 ... (MAXFILE-1)] = ""};
char *outfile = "";
char *p = NULL;

prcopt.mode = PMODE_KINEMA;
prcopt.navsys=0;
prcopt.refpos=1;
prcopt.glomodear=1;
solopt.timef=0;
sprintf(solopt.prog ,"%s ver.%s %s",PROGNAME,VER_RTKLIB,PATCH_LEVEL);
sprintf(filopt.trace,"%s.trace",PROGNAME);

/* load options from configuration file */
for (i=1;i<argc;i++) {
if (!strcmp(argv[i],"-k")&&i+1<argc) {
Expand Down Expand Up @@ -136,12 +144,12 @@ int main(int argc, char **argv)
else if (!strcmp(argv[i],"-sys")&&i+1<argc) {
for (p=argv[++i];*p;p++) {
switch (*p) {
case 'G': prcopt.navsys|=SYS_GPS;
case 'R': prcopt.navsys|=SYS_GLO;
case 'E': prcopt.navsys|=SYS_GAL;
case 'J': prcopt.navsys|=SYS_QZS;
case 'C': prcopt.navsys|=SYS_CMP;
case 'I': prcopt.navsys|=SYS_IRN;
case 'G': prcopt.navsys|=SYS_GPS; break;
case 'R': prcopt.navsys|=SYS_GLO; break;
case 'E': prcopt.navsys|=SYS_GAL; break;
case 'J': prcopt.navsys|=SYS_QZS; break;
case 'C': prcopt.navsys|=SYS_CMP; break;
case 'I': prcopt.navsys|=SYS_IRN; break;
}
if (!(p=strchr(p,','))) break;
}
Expand All @@ -152,21 +160,27 @@ int main(int argc, char **argv)
else if (!strcmp(argv[i],"-d")&&i+1<argc) solopt.timeu=atoi(argv[++i]);
else if (!strcmp(argv[i],"-b")) prcopt.soltype=1;
else if (!strcmp(argv[i],"-c")) prcopt.soltype=2;
else if (!strcmp(argv[i],"-i")) prcopt.modear=2;
else if (!strcmp(argv[i],"-h")) prcopt.modear=3;
else if (!strcmp(argv[i],"-i")) prcopt.modear=ARMODE_INST;
else if (!strcmp(argv[i],"-h")) {
if (prcopt.modear!=ARMODE_WL) prcopt.modear=ARMODE_FIXHOLD;
prcopt.wlmodear=1;
}
else if (!strcmp(argv[i],"-t")) solopt.timef=1;
else if (!strcmp(argv[i],"-u")) solopt.times=TIMES_UTC;
else if (!strcmp(argv[i],"-z")) prcopt.outsingle=1;
else if (!strcmp(argv[i],"-e")) solopt.posf=SOLF_XYZ;
else if (!strcmp(argv[i],"-a")) solopt.posf=SOLF_ENU;
else if (!strcmp(argv[i],"-n")) solopt.posf=SOLF_NMEA;
else if (!strcmp(argv[i],"-g")) solopt.degf=1;
else if (!strcmp(argv[i],"-w")) prcopt.modear=ARMODE_WL;
else if (!strcmp(argv[i],"-r")&&i+3<argc) {
prcopt.refpos=prcopt.rovpos=0;
prcopt.refpos=prcopt.rovpos=POSOPT_POS;
for (j=0;j<3;j++) prcopt.rb[j]=atof(argv[++i]);
matcpy(prcopt.ru,prcopt.rb,3,1);
}
else if (!strcmp(argv[i],"-rb")&&i+1<argc) prcopt.refpos=atoi(argv[++i]);
else if (!strcmp(argv[i],"-l")&&i+3<argc) {
prcopt.refpos=prcopt.rovpos=0;
prcopt.refpos=prcopt.rovpos=POSOPT_POS;
for (j=0;j<3;j++) pos[j]=atof(argv[++i]);
for (j=0;j<2;j++) pos[j]*=D2R;
pos2ecef(pos,prcopt.rb);
Expand All @@ -180,12 +194,15 @@ int main(int argc, char **argv)
if (!prcopt.navsys) {
prcopt.navsys=SYS_GPS|SYS_GLO;
}
if (prcopt.modear==ARMODE_WL&&(prcopt.navsys&SYS_CMP)) {
prcopt.bdsmodear=0;
}
if (n<=0) {
showmsg("error : no input file");
return -2;
}
ret=postpos(ts,te,tint,0.0,&prcopt,&solopt,&filopt,infile,n,outfile,"","");

if (!ret) fprintf(stderr,"%40s\r","");
return ret;
}
160 changes: 160 additions & 0 deletions app/consapp/rtkrcv/conf/rtk_skylark_l1l5.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# rtkrcv options (2022/02/09 22:11:36, v.2.4.3 b34)

console-passwd =admin
console-timetype =gpst # (0:gpst,1:utc,2:jst,3:tow)
console-soltype =dms # (0:dms,1:deg,2:xyz,3:enu,4:pyl)
console-solflag =1 # (0:off,1:std+2:age/ratio/ns)
inpstr1-type =ntripcli # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripcli,7:ftp,8:http)
inpstr2-type =ntripcli # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripcli,7:ftp,8:http)
inpstr3-type =off # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripcli,7:ftp,8:http)
inpstr1-path =username:[email protected]:2101/STFU00USA0
# SWIFT: Skylark host may vary depending on geographic region and frequency range
inpstr2-path =username:[email protected]:2101/CRS
inpstr3-path =
inpstr1-format =rtcm3 # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:javad,9:nvs,10:binex,11:rt17)
inpstr2-format =rtcm3 # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:javad,9:nvs,10:binex,11:rt17)
inpstr3-format =rtcm3 # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:javad,9:nvs,10:binex,11:rt17)
inpstr2-nmeareq =single # (0:off,1:latlon,2:single)
inpstr2-nmealat =0 # (deg)
inpstr2-nmealon =0 # (deg)
inpstr2-nmeahgt =0 # (m)
outstr1-type =off # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr,11:ntripc_c)
outstr2-type =off # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr,11:ntripc_c)
outstr1-path =
outstr2-path =
outstr1-format =xyz # (0:llh,1:xyz,2:enu,3:nmea,4:stat)
outstr2-format =llh # (0:llh,1:xyz,2:enu,3:nmea,4:stat)
logstr1-type =off # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr,11:ntripc_c)
logstr2-type =off # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr,11:ntripc_c)
logstr3-type =off # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr,11:ntripc_c)
logstr1-path =
logstr2-path =
logstr3-path =
misc-svrcycle =10 # (ms)
misc-timeout =10000 # (ms)
misc-reconnect =10000 # (ms)
misc-nmeacycle =5000 # (ms)
misc-buffsize =32768 # (bytes)
misc-navmsgsel =all # (0:all,1:rover,2:base,3:corr)
misc-proxyaddr =
misc-fswapmargin =30 # (s)
misc-startcmd =
misc-stopcmd =
file-cmdfile1 =
file-cmdfile2 =
file-cmdfile3 =
pos1-posmode =kinematic # (0:single,1:dgps,2:kinematic,3:static,4:movingbase,5:fixed,6:ppp-kine,7:ppp-static,8:ppp-fixed)
# SWIFT: l1+2 for L1/L2, l1+2+3 for L1/L5
pos1-frequency =l1+2+3 # (1:l1,2:l1+2,3:l1+2+3,4:l1+2+3+4,5:l1+2+3+4+5)
pos1-soltype =forward # (0:forward,1:backward,2:combined)
pos1-elmask =15 # (deg)
pos1-snrmask_r =off # (0:off,1:on)
pos1-snrmask_b =off # (0:off,1:on)
pos1-snrmask_L1 =0,0,0,0,0,0,0,0,0
pos1-snrmask_L2 =0,0,0,0,0,0,0,0,0
pos1-snrmask_L5 =0,0,0,0,0,0,0,0,0
pos1-dynamics =off # (0:off,1:on)
pos1-tidecorr =off # (0:off,1:on,2:otl)
pos1-ionoopt =brdc # (0:off,1:brdc,2:sbas,3:dual-freq,4:est-stec,5:ionex-tec,6:qzs-brdc)
pos1-tropopt =saas # (0:off,1:saas,2:sbas,3:est-ztd,4:est-ztdgrad)
pos1-sateph =brdc # (0:brdc,1:precise,2:brdc+sbas,3:brdc+ssrapc,4:brdc+ssrcom)
pos1-posopt1 =on # (0:off,1:on)
pos1-posopt2 =on # (0:off,1:on)
pos1-posopt3 =on # (0:off,1:on,2:precise)
pos1-posopt4 =on # (0:off,1:on)
pos1-posopt5 =on # (0:off,1:on)
pos1-posopt6 =off # (0:off,1:on)
pos1-exclsats =C02 # (prn ...)
pos1-navsys =41 # (1:gps+2:sbas+4:glo+8:gal+16:qzs+32:bds+64:navic)
pos2-armode =wide-lane # (0:off,1:continuous,2:instantaneous,3:fix-and-hold,4:WLNL,5:TCAR,6:wide-lane)
# SWIFT: only enable for static positioning mode
pos2-wlarmode =off # (0:off,1:on)
pos2-gloarmode =off # (0:off,1:on)
pos2-bdsarmode =off # (0:off,1:on)
pos2-arthres =3
pos2-arthres1 =0.9999
pos2-arthres2 =0.25
pos2-arthres3 =0.1
pos2-arthres4 =0.05
pos2-arlockcnt =30
pos2-arelmask =0 # (deg)
pos2-arminfix =30
pos2-armaxiter =1
pos2-elmaskhold =0 # (deg)
pos2-aroutcnt =30
pos2-maxage =30 # (s)
pos2-syncsol =off # (0:off,1:on)
pos2-slipthres =0.05 # (m)
pos2-rejionno =30 # (m)
pos2-rejgdop =30
pos2-niter =1
pos2-baselen =0 # (m)
pos2-basesig =0 # (m)
out-solformat =xyz # (0:llh,1:xyz,2:enu,3:nmea)
out-outhead =off # (0:off,1:on)
out-outopt =off # (0:off,1:on)
out-outvel =off # (0:off,1:on)
out-timesys =gpst # (0:gpst,1:utc,2:jst)
out-timeform =tow # (0:tow,1:hms)
out-timendec =3
out-degform =dms # (0:deg,1:dms)
out-fieldsep =
out-outsingle =on # (0:off,1:on)
out-maxsolstd =0 # (m)
out-height =geodetic # (0:ellipsoidal,1:geodetic)
out-geoid =internal # (0:internal,1:egm96,2:egm08_2.5,3:egm08_1,4:gsi2000)
out-solstatic =all # (0:all,1:single)
out-nmeaintv1 =0 # (s)
out-nmeaintv2 =0 # (s)
out-outstat =state # (0:off,1:state,2:residual)
stats-eratio1 =100
stats-eratio2 =100
stats-errphase =0.01 # (m)
stats-errphaseel =0.01 # (m)
stats-errphasebl =0 # (m/10km)
stats-errdoppler =1 # (Hz)
stats-stdbias =30 # (m)
stats-stdiono =0.03 # (m)
stats-stdtrop =0.3 # (m)
stats-prnaccelh =10 # (m/s^2)
stats-prnaccelv =10 # (m/s^2)
stats-prnbias =0.0001 # (m)
stats-prniono =0.001 # (m)
stats-prntrop =0.0001 # (m)
stats-prnpos =0 # (m)
stats-clkstab =5e-12 # (s/s)
ant1-postype =llh # (0:llh,1:xyz,2:single,3:posfile,4:rinexhead,5:rtcm,6:raw,7:rinexdynamic)
ant1-pos1 =90 # (deg|m)
ant1-pos2 =0 # (deg|m)
ant1-pos3 =-6335367.6285 # (m|m)
ant1-anttype =
ant1-antdele =0 # (m)
ant1-antdeln =0 # (m)
ant1-antdelu =0 # (m)
ant2-postype =rtcm # (0:llh,1:xyz,2:single,3:posfile,4:rinexhead,5:rtcm,6:raw,7:rinexdynamic)
ant2-pos1 =0 # (deg|m)
ant2-pos2 =0 # (deg|m)
ant2-pos3 =0 # (m|m)
ant2-anttype =
ant2-antdele =0 # (m)
ant2-antdeln =0 # (m)
ant2-antdelu =0 # (m)
ant2-maxaveep =3600
ant2-initrst =on # (0:off,1:on)
misc-timeinterp =off # (0:off,1:on)
misc-sbasatsel =0 # (0:all)
misc-rnxopt1 =
misc-rnxopt2 =
misc-pppopt =
file-satantfile =
file-rcvantfile =
file-staposfile =
file-geoidfile =
file-ionofile =
file-dcbfile =
file-eopfile =
file-blqfile =
file-tempdir =
file-geexefile =
file-solstatfile =
file-tracefile =
2 changes: 2 additions & 0 deletions app/winapp/rtknavi/navimain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2453,6 +2453,7 @@ void __fastcall TMainForm::LoadOpt(void)
PrcOpt.dynamics =ini->ReadInteger("prcopt", "dynamics", 0);
PrcOpt.tidecorr =ini->ReadInteger("prcopt", "tidecorr", 0);
PrcOpt.modear =ini->ReadInteger("prcopt", "modear", 1);
PrcOpt.wlmodear =ini->ReadInteger("prcopt", "wlmodear", 0);
PrcOpt.glomodear=ini->ReadInteger("prcopt", "glomodear", 0);
PrcOpt.bdsmodear=ini->ReadInteger("prcopt", "bdsmodear", 0);
PrcOpt.maxout =ini->ReadInteger("prcopt", "maxout", 5);
Expand Down Expand Up @@ -2701,6 +2702,7 @@ void __fastcall TMainForm::SaveOpt(void)
ini->WriteInteger("prcopt", "dynamics", PrcOpt.dynamics );
ini->WriteInteger("prcopt", "tidecorr", PrcOpt.tidecorr );
ini->WriteInteger("prcopt", "modear", PrcOpt.modear );
ini->WriteInteger("prcopt", "wlmodear", PrcOpt.wlmodear );
ini->WriteInteger("prcopt", "glomodear", PrcOpt.glomodear );
ini->WriteInteger("prcopt", "bdsmodear", PrcOpt.bdsmodear );
ini->WriteInteger("prcopt", "maxout", PrcOpt.maxout );
Expand Down
31 changes: 28 additions & 3 deletions app/winapp/rtknavi/naviopt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,15 @@ void __fastcall TOptDialog::GetOpt(void)
IonoOpt ->ItemIndex=PrcOpt.ionoopt;
TropOpt ->ItemIndex=PrcOpt.tropopt;
SatEphem ->ItemIndex=PrcOpt.sateph;
AmbRes ->ItemIndex=PrcOpt.modear;
if(PrcOpt.modear>ARMODE_FIXHOLD) {
if(PrcOpt.wlmodear==0) {
AmbRes ->ItemIndex =4;
} else {
AmbRes ->ItemIndex =5;
}
} else {
AmbRes ->ItemIndex =PrcOpt.modear;
}
GloAmbRes ->ItemIndex=PrcOpt.glomodear;
BdsAmbRes ->ItemIndex=PrcOpt.bdsmodear;
ValidThresAR ->Text =s.sprintf("%.1f",PrcOpt.thresar[0]);
Expand Down Expand Up @@ -533,6 +541,11 @@ void __fastcall TOptDialog::SetOpt(void)
PrcOpt.tropopt =TropOpt ->ItemIndex;
PrcOpt.sateph =SatEphem ->ItemIndex;
PrcOpt.modear =AmbRes ->ItemIndex;
PrcOpt.wlmodear=0;
if(AmbRes->ItemIndex>3) {
PrcOpt.modear=ARMODE_WL;
if(AmbRes->ItemIndex==5) PrcOpt.wlmodear=1;
}
PrcOpt.glomodear =GloAmbRes ->ItemIndex;
PrcOpt.bdsmodear =BdsAmbRes ->ItemIndex;
PrcOpt.thresar[0]=str2dbl(ValidThresAR->Text);
Expand Down Expand Up @@ -720,8 +733,15 @@ void __fastcall TOptDialog::LoadOpt(AnsiString file)
PosOpt4 ->Checked =prcopt.posopt[3];
PosOpt5 ->Checked =prcopt.posopt[4];
PosOpt6 ->Checked =prcopt.posopt[5];

AmbRes ->ItemIndex =prcopt.modear;
if(prcopt.modear>ARMODE_FIXHOLD) {
if(prcopt.wlmodear==0) {
AmbRes ->ItemIndex =4;
} else {
AmbRes ->ItemIndex =5;
}
} else {
AmbRes ->ItemIndex =prcopt.modear;
}
GloAmbRes ->ItemIndex =prcopt.glomodear;
BdsAmbRes ->ItemIndex =prcopt.bdsmodear;
ValidThresAR ->Text =s.sprintf("%.1f",prcopt.thresar[0]);
Expand Down Expand Up @@ -937,6 +957,11 @@ void __fastcall TOptDialog::SaveOpt(AnsiString file)
prcopt.posopt[5]=PosOpt6->Checked;

prcopt.modear =AmbRes ->ItemIndex;
prcopt.wlmodear=0;
if(AmbRes->ItemIndex>3) {
prcopt.modear=ARMODE_WL;
if(AmbRes->ItemIndex==5) prcopt.wlmodear=1;
}
prcopt.glomodear=GloAmbRes ->ItemIndex;
prcopt.bdsmodear=BdsAmbRes ->ItemIndex;
prcopt.thresar[0]=str2dbl(ValidThresAR->Text);
Expand Down
Loading