61 bool smallAngleApprox,
77 std::tie(
range, rotatedSvXvt) =
78 computeRange(rxPos, svXvt, tof, ellipsoid, smallAngleApprox);
80 tof =
range / ellipsoid.
c();
82 }
while(
ABS(tof - tof_prev) > threshold && ++iter < maxIter);
84 std::tie(
range, rotatedSvXvt) =
85 computeRange(rxPos, svXvt, tof, ellipsoid, smallAngleApprox);
87 return std::make_tuple(
true,
range, rotatedSvXvt);
96 bool smallAngleApprox,
107 if(!navLib.
getXvt(sat, transmit, svXvt,
false, xmitHealth,
valid, order))
109 return std::make_tuple(
false,
110 std::numeric_limits<double>::quiet_NaN(),
114 return fromSvPos(rxPos, svXvt, ellipsoid, smallAngleApprox,
115 seed, threshold, maxIter);
125 bool smallAngleApprox,
132 if(!navLib.
getXvt(sat, transmit, svXvt,
false, xmitHealth,
valid, order))
134 return std::make_tuple(
false,
135 std::numeric_limits<double>::quiet_NaN(),
139 double tof = (pseudorange / ellipsoid.
c()) - svXvt.
clkbias - svXvt.
relcorr;
143 std::tie(
range, rotatedSvXvt) =
144 computeRange(rxPos, svXvt, tof, ellipsoid, smallAngleApprox);
146 return std::make_tuple(
true,
range, rotatedSvXvt);
156 bool smallAngleApprox,
169 std::tie(success, transmitEst) =
171 xmitHealth,
valid, order, seed,
175 return std::make_tuple(
false,
176 std::numeric_limits<double>::quiet_NaN(),
181 success = navLib.
getXvt(sat, transmitEst, svXvt,
false,
182 xmitHealth,
valid, order);
185 return std::make_tuple(
false,
186 std::numeric_limits<double>::quiet_NaN(),
194 transmitEst, ellipsoid,
196 return std::make_tuple(
true,
range, rotatedSvXvt);
205 bool smallAngleApprox,
219 std::tie(success,
range, rotatedSvXvt) =
221 smallAngleApprox, xmitHealth,
valid, order,
222 seed, threshold, maxIter);
225 return std::make_tuple(
false,
226 std::numeric_limits<double>::quiet_NaN(),
231 double fakePsuedorange =
235 std::tie(success,
range, rotatedSvXvt) =
237 navLib, sat, ellipsoid, smallAngleApprox,
238 xmitHealth,
valid, order);
239 return std::make_tuple(success,
range, rotatedSvXvt);
249 bool smallAngleApprox,
259 std::tie(success, transmitEst) =
261 xmitHealth,
valid, order);
264 return std::make_tuple(
false,
265 std::numeric_limits<double>::quiet_NaN(),
270 success = navLib.
getXvt(sat, transmitEst, svXvt,
false,
271 xmitHealth,
valid, order);
274 return std::make_tuple(
false,
275 std::numeric_limits<double>::quiet_NaN(),
285 std::tie(
range, std::ignore) =
286 computeRange(rxPos, svXvt, 0, ellipsoid, smallAngleApprox);
287 double tof =
range / ellipsoid.
c();
291 std::tie(
range, rotatedSvXvt) =
292 computeRange(rxPos, svXvt, tof, ellipsoid, smallAngleApprox);
294 return std::make_tuple(
true,
range, rotatedSvXvt);
321 estTransmit = receive - tof;
323 if(!navLib.
getXvt(sat, estTransmit, svXvt,
324 false, xmitHealth,
valid, order))
330 std::tie(
range, std::ignore) =
331 computeRange(rxPos, receive, svXvt, estTransmit, ellipsoid);
339 tof =
range / ellipsoid.
c();
341 }
while(
ABS(tof - prevTof) > threshold && ++iter < maxIter);
343 return std::make_tuple(
true, estTransmit);
360 if(!navLib.
getXvt(sat, nominalTransmit, svXvt,
false,
361 xmitHealth,
valid, order))
366 CommonTime transmit = nominalTransmit - (svXvt.clkbias + svXvt.relcorr);
367 return std::make_tuple(
true, transmit);
377 bool smallAngleApprox)
379 double tof = receive - transmit;
380 return computeRange(rxPos, svXvt, tof, ellipsoid, smallAngleApprox);
388 bool smallAngleApprox)
390 Xvt svXvtRotated =
rotateECEF(svXvt, tof, ellipsoid, smallAngleApprox);
391 double dist =
range(rxPos, svXvtRotated.
x);
392 return std::make_tuple(dist, svXvtRotated);
401 bool smallAngleApprox)
403 double tof = receive - transmit;
404 return computeRange(rxPos, svPos, tof, ellipsoid, smallAngleApprox);
412 bool smallAngleApprox
416 double dist =
range(rxPos, svPosRotated);
417 return std::make_tuple(dist, svPosRotated);
424 bool smallAngleApprox)
432 vecRotated[0] = vec[0] + vec[1] * rotate;
433 vecRotated[1] = vec[1] - vec[0] * rotate;
434 vecRotated[2] = vec[2];
448 bool smallAngleApprox)
455 ellipsoid, smallAngleApprox);
456 pos.setECEF(rotatedVec);
457 pos.transformTo(sys);
466 bool smallAngleApprox)
469 returnXvt.
x =
rotateECEF(xvt.
x, dt, ellipsoid, smallAngleApprox);
470 returnXvt.
v =
rotateECEF(xvt.
v, dt, ellipsoid, smallAngleApprox);