Skip to content

Commit 12daec6

Browse files
- Port recent updates from demo5 RTKLIB code
- Add output of residuals file in same format as RTKLIB - Make trace output more similar to demo5 RTKLIB code
1 parent d158121 commit 12daec6

File tree

6 files changed

+142
-98
lines changed

6 files changed

+142
-98
lines changed

src/pntpos.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def rescode(iter, obs, nav, rs, dts, svh, x):
8585
r, e = geodist(rs[i], rr)
8686
if r < 0:
8787
continue
88-
az, el = satazel(pos, e)
88+
[az, el] = satazel(pos, e)
8989
if el < nav.elmin:
9090
continue
9191
if iter > 0:

src/postpos.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,13 @@ def savesol(sol, solfile):
8080
s.stat, s.ns, std[1,1], std[0,0], std[2,2], std[0,1],
8181
std[2,0], std[1,2], s.age, s.ratio))
8282

83-
def procpos(nav, rov, base):
83+
def procpos(nav, rov, base, fp_stat):
8484

8585
try:
8686
if nav.filtertype != 'backward':
8787
# run forward solution
8888
firstpos(nav, rov, base, dir=1)
89-
rtkpos(nav, rov, base, dir=1)
89+
rtkpos(nav, rov, base, fp_stat, dir=1)
9090
sol0 = deepcopy(nav.sol)
9191
savesol(sol0,'forward.pos')
9292
if nav.filtertype != 'forward':
@@ -105,7 +105,7 @@ def procpos(nav, rov, base):
105105
firstpos(nav, rov, base, dir=-1)
106106
else: # combined_noreset
107107
nav.sol = [nav.sol[-1]]
108-
rtkpos(nav, rov, base, dir=-1)
108+
rtkpos(nav, rov, base, fp_stat, dir=-1)
109109
savesol(nav.sol,'backward.pos')
110110
if nav.filtertype == 'combined' or nav.filtertype == 'combined_noreset':
111111
sol = combres(sol0, nav.sol)

src/rinex.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ def decode_nav(self, navfile, nav):
139139
eph.tot = gpst2time(eph.week, tot)
140140
nav.eph.append(eph)
141141
else: # GLONASS
142+
if prn > uGNSS.GLOMAX:
143+
print('Reject nav entry: %s' % line[:3])
144+
break
142145
geph = Geph(sat)
143146
# Toc rounded by 15 min in utc
144147
week, tow = time2gpst(toc)
@@ -370,7 +373,7 @@ def next_obs(nav, rov, base, dir):
370373
def rcvstds(nav, obs):
371374
""" decode receiver stdevs from rinex fields """
372375
# skip if weighting factor is zero
373-
if nav.err[3] == 0:
376+
if nav.err[5] == 0:
374377
return
375378
for i in np.argsort(obs.sat):
376379
for f in range(nav.nf):

src/rtkcmn.py

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,10 @@ def __init__(self, cfg):
237237
self.slip = np.zeros((uGNSS.MAXSAT, self.nf), dtype=int)
238238
self.prev_lli = np.zeros((uGNSS.MAXSAT, self.nf, 2), dtype=int)
239239
self.prev_fix = np.zeros((uGNSS.MAXSAT, self.nf), dtype=int)
240-
self.rcvstd = np.zeros((uGNSS.MAXSAT, self.nf*2))
241240
self.glofrq = np.zeros(uGNSS.GLOMAX, dtype=int)
241+
self.rcvstd = np.zeros((uGNSS.MAXSAT, self.nf*2))
242+
self.resp = np.zeros((uGNSS.MAXSAT, self.nf))
243+
self.resc = np.zeros((uGNSS.MAXSAT, self.nf))
242244

243245
self.prev_ratio1 = 0
244246
self.prev_ratio2 = 0
@@ -597,17 +599,20 @@ def ecef2pos(r):
597599
def pos2ecef(pos, isdeg: bool = False):
598600
""" LLH (rad/deg) to ECEF position conversion """
599601
if isdeg:
600-
pos[0] *= np.pi/180.0
601-
pos[1] *= np.pi/180.0
602-
s_p = sin(pos[0])
603-
c_p = cos(pos[0])
604-
s_l = sin(pos[1])
605-
c_l = cos(pos[1])
606-
e2 = rCST.FE_WGS84 * (2.0 - rCST.FE_WGS84)
607-
v = rCST.RE_WGS84 / sqrt(1.0 - e2 * s_p**2)
608-
r = np.array([(v + pos[2]) * c_p*c_l,
609-
(v + pos[2]) * c_p*s_l,
610-
(v * (1.0 - e2) + pos[2]) * s_p])
602+
s_p = sin(pos[0]*np.pi/180.0)
603+
c_p = cos(pos[0]*np.pi/180.0)
604+
s_l = sin(pos[1]*np.pi/180.0)
605+
c_l = cos(pos[1]*np.pi/180.0)
606+
else:
607+
s_p = sin(pos[0])
608+
c_p = cos(pos[0])
609+
s_l = sin(pos[1])
610+
c_l = cos(pos[1])
611+
e2 = rCST.FE_WGS84 * (2.0 - rCST.FE_WGS84)
612+
v = rCST.RE_WGS84 / sqrt(1.0 - e2 * s_p**2)
613+
r = np.array([(v + pos[2]) * c_p*c_l,
614+
(v + pos[2]) * c_p*s_l,
615+
(v * (1.0 - e2) + pos[2]) * s_p])
611616
return r
612617

613618

@@ -617,6 +622,12 @@ def ecef2enu(pos, r):
617622
e = E @ r
618623
return e
619624

625+
def enu2ecef(pos, e):
626+
""" relative ECEF to ENU conversion """
627+
E = xyz2enu(pos)
628+
r = E.T @ e
629+
return r
630+
620631
def covenu(llh, P):
621632
"""transform ecef covariance to local tangental coordinate --------------------------
622633
* transform ecef covariance to local tangental coordinate
@@ -659,9 +670,9 @@ def satazel(pos, e):
659670
az = atan2(enu[0], enu[1]) if np.dot(enu, enu) > 1e-12 else 0
660671
az = az if az > 0 else az + 2 * np.pi
661672
el = asin(enu[2])
662-
return az, el
673+
return [az, el]
663674
else:
664-
return 0, np.pi / 2
675+
return [0, np.pi / 2]
665676

666677

667678
def ionmodel(t, pos, az, el, ion=None):

0 commit comments

Comments
 (0)