主要内容

利用模拟卫星星座估算GNSS接收器位置

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

概述

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

指定仿真参数

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

指定模拟的开始、停止和采样时间。同时,还要指定GNSS接收机的掩码角或最小仰角。最后,为初始卫星轨道参数指定RINEX导航消息文件。

%加载地面真实轨迹。负载(“routeNatickMA.mat”“纬度”“朗”“pos””或者““lla0”);recPos = pos;recVel =韦尔;指定模拟次数。开始时间= datetime(2021、6、24日8 0 0,“时区”“美国/ New_York”);simulationSteps =大小(pos, 1);dt = 1;stopTime = startTime + seconds((simulationSteps-1)*dt);指定掩码角度。maskAngle = 5;%度将接收器位置由东北向下(NED)转换为大地位置%的坐标。receiverLLA = ned2lla (recPos lla0,“椭球体”);指定RINEX文件。rinexFile =“GODS00USA_R_20211750000_01D_GN.rnx”设置RNG种子以允许可重复的结果。rng (“默认”);

可视化geoplot为地面真值轨迹。

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

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

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

satelliteScenario对象使您能够指定初始轨道参数并使用satelliteScenarioViewer对象。此示例使用satelliteScenario以及带有初始轨道参数的RINEX文件,用于模拟GPS星座随时间的变化。或者,您也可以使用gnssconstellation(导航工具箱)对象,该对象使用标称轨道参数或RINEX文件模拟卫星位置,只需要当前模拟时间来计算卫星位置。

%创建场景。sc = satitescenario (startTime, stopTime, dt);%初始化卫星。navmsg = rinexread (rinexFile);卫星(sc, navmsg);satID = sc.Satellites.Name;% Preallocate结果。numSats =元素个数(sc.Satellites);allSatPos = 0 (numSats 3 simulationSteps);allSatVel = 0 (numSats 3 simulationSteps);在整个模拟中保存卫星状态。i = 1:numel(sc. satellite) [oneSatPos, oneSatVel] = states(sc. satellite (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);使用天空图在视野中可视化卫星。sp = skyplot ([] [], MaskElevation = maskAngle);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”, satID (allIsSatVisible (:, idx))) drawnowlimitrate结束

图中包含一个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 (“地形”)传说(“地面实况”“估计”

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。这些对象代表了“基本真理”、“估计”。

画出位置估计的绝对误差。通过移动中位数平滑了错误,使图更容易读懂。x轴和y轴的误差较小,因为接收器的两侧都有卫星。z轴上的误差较大,因为只有卫星在接收器上方,而不是接收器下方。随着接收器的移动和一些卫星的进入和消失,误差会随着时间的推移而变化。

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

图中包含一个axes对象。标题为Position (NED) Error的axes对象包含3个类型为line的对象。这些对象代表x y z。

另请参阅

对象

功能

相关的例子

更多关于

Baidu
map