主要内容

利用模拟卫星星座估计GNSS接收机位置

使用模拟全球卫星导航系统(GNSS)接收器跟踪地面车辆的位置。卫星是用satelliteScenario对接收机的卫星信号处理进行了仿真lookangles(导航工具箱)伪距(导航工具箱)函数,用该函数估计接收机位置receiverposition(导航工具箱)函数。

这个例子需要导航工具箱™。

概述

本例的重点是空间段,或卫星星座,以及卫星系统的GNSS传感器设备。为了获得GNSS接收机位置的估计,导航处理器需要来自空间段的卫星位置和来自接收机中测距处理器的伪距。

指定仿真参数

加载mat -文件,其中包含一辆地面车辆行驶到MathWorks, Inc.的MA校区Natick的地面真实位置和速度。

指定模拟的开始、停止和采样时间。另外,指定GNSS接收机的掩模角或最小仰角。

装载地面真实轨迹。负载(“routeNatickMA.mat”“纬度”“朗”“pos””或者““lla0”);recPos = pos;recVel =韦尔;%指定模拟时间。开始时间= datetime(8 2020年10,28日,0,0,“时区”“美国/ New_York”);simulationSteps =大小(pos, 1);dt = 1;stopTime = startTime + seconds((simulationSteps-1)*dt);%指定掩码角度。maskAngle = 5;%度%将接收机位置由东北-下(NED)转换为大地测量%的坐标。需要导航工具箱(TM)。receiverLLA = ned2lla (recPos lla0,“椭球体”);%设置RNG种子允许可重复的结果。rng (“默认”);

可视化geoplot地面真实轨道。

图geoplot(纬度、经度)geobasemap (“地形”)标题(“地面实况轨迹”

图中包含一个轴对象。axis对象包含一个类型为line的对象。

模拟随时间变化的卫星位置

satelliteScenario对象使您能够指定初始轨道参数,并使用satelliteScenarioViewer对象。本示例使用satelliteScenario以及一个带有初始轨道参数的mat文件,以模拟GPS星座随时间的变化。或者,你可以用gnssconstellation(导航工具箱)利用公称轨道参数模拟卫星位置,只需当前模拟时间即可计算卫星位置。

%创建场景。sc =卫星场景(startTime, stopTime, dt);负载(“initialOrbitalParameters.mat”“semiMajorAxis”“偏心”...“倾向”“rightAscensionOfAscendingNode”...“argumentOfPeriapsis”“trueAnomaly”“prnStr”);%初始化卫星。卫星(sc、semiMajorAxis偏心、倾斜...rightAscensionOfAscendingNode、argumentOfPeriapsis trueAnomaly,...“名称”, prnStr);% Preallocate结果。numSats =元素个数(sc.Satellites);allSatPos = 0 (numSats 3 simulationSteps);allSatVel = 0 (numSats 3 simulationSteps);%在整个模拟中保存卫星状态。i = 1:numel(sc.卫星)[oneSatPos, oneSatVel] = states(sc.卫星(i),“CoordinateFrame”“ecef”);allSatPos(i,:,:) = permute(oneSatPos,[3 1 2]);allSatVel(i,:,:) = permute(oneSatVel,[3 1 2]);结束

计算伪距

在整个模拟过程中,使用卫星位置来计算伪距和卫星能见度。掩模角用于确定接收机可见的卫星。伪距是卫星和GNSS接收器之间的距离。这个词伪距之所以使用,是因为这个距离值是通过将当前接收机时钟时间与带有时间标记的卫星信号之间的时间差乘以光速计算出来的。

% Preallocate结果。allP = 0 (numSats simulationSteps);allPDot = 0 (numSats simulationSteps);allIsSatVisible = false (numSats simulationSteps);%使用skyplot在视图中可视化卫星。Sp = skyplot([], []);idx = 1:simulationSteps satPos = allSatPos(:,:,idx);satVel = allSatVel (:,:, idx);%从接收机位置计算卫星能见度。satEl, [satAz allIsSatVisible (:, idx)] = lookangles (receiverLLA (idx:), satPos, maskAngle);使用卫星和计算伪距和伪距率接收位置和速度。[allP: idx) allPDot (:, idx)] =伪距(receiverLLA (idx:), satPos, recVel (idx:), satVel);集(sp,“AzimuthData”, satAz (allIsSatVisible (:, idx)),...“ElevationData”satEl (allIsSatVisible (:, idx)),...“LabelData”, prnStr (allIsSatVisible (:, idx))) drawnowlimitrate结束

Figure包含一个skyplot类型的对象。

从伪距和卫星位置估计接收机位置

最后,利用卫星位置和伪距估计接收机位置receiverposition函数。

% Preallocate结果。lla = 0 (simulationSteps, 3);gnssVel = 0 (simulationSteps, 3);hdop = 0 (simulationSteps, 1);vdop = 0 (simulationSteps, 1);idx = 1:simulationSteps p = allP(:,idx);pdot = allPDot (:, idx);isSatVisible = allIsSatVisible (:, idx);satPos = allSatPos (:,:, idx);satVel = allSatVel (:,:, idx);使用伪距估计接收机位置和速度,伪距率,以及卫星位置和速度。[lla idx:), gnssVel (idx:), hdop (idx:), vdop (idx:)] = receiverposition (p (isSatVisible),...satPos (isSatVisible:), pdot (isSatVisible) satVel (isSatVisible:));结束

可视化的结果

在a上绘制地面真实位置和估计接收机位置geoplot

图geoplot(纬度,经度,lla (: 1), lla (:, 2) geobasemap (“地形”)传说(“地面实况”“估计”

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表Ground Truth, Estimate。

绘制位置估计中的绝对误差。通过移动中值来消除误差,使绘图更具可读性。x轴和y轴的误差较小,因为接收机两侧都有卫星。z轴的误差更大,因为只有卫星在接收器上方,而不是下方。随着接收器的移动和一些卫星的进入和消失,误差会随着时间而变化。

estPos = lla2ned (lla lla0,“椭球体”);winSize =地板(大小(estPos, 1) / 10);图绘制(smoothdata (abs (estPos-pos),“movmedian”winSize)传说(“x”“y”“z”)包含(“时间(s)”) ylabel (“错误(m)”)标题(“位置(NED)错误”

图中包含一个轴对象。带有标题位置(NED)错误的轴对象包含3个类型为line的对象。这些对象代表x y z。

另请参阅

对象

功能

相关的例子

更多关于