主要内容

探测和跟踪LEO卫星星座与地面雷达

这个例子展示了如何导入一个两行元素(框架)文件的一个卫星星座,模拟雷达探测的星座,星座和跟踪。

填充的任务和维护一个目录环绕地球的太空物体在太空监测是至关重要的。这个任务包括几个过程:检测和识别新对象并将它们添加到目录,目录中更新已知对象的轨道,轨道跟踪改变一生,和预测再入大气中。在这个例子中,我们正在研究如何探测和跟踪新卫星,并将它们添加到一个目录。

保证安全操作与其他卫星在空间和防止碰撞或已知的碎片,它重要的正确检测和跟踪新推出的卫星。通常空间机构分享下水前的信息,它可以用来选择一个搜索策略。低地球轨道(LEO)卫星组成的搜索策略fence-type雷达系统是常用的。fence-type雷达系统搜索空间中的一个有限体积和探测卫星通过其视野。这种策略可以迅速探测和跟踪新推出的星座。[1]

从框架文件导入卫星星座

两行元素集是一个通用的数据格式保存轨道信息的卫星。您可以使用satelliteScenario对象导入卫星轨道框架定义在一个文件中。默认情况下,进口使用SGP4轨道传播卫星轨道传播算法为狮子座对象提供了良好的精度。在这个例子中,这些轨道提供了与地面真理来测试雷达跟踪系统能够检测新推出的卫星。

%建立一个卫星的场景satscene = satelliteScenario;%添加卫星从框架文件。tleFile =“leoSatelliteConstellation.tle”;星座=卫星(satscene tleFile);

用卫星场景观众星座形象化。

玩(satscene);

模拟合成检测和跟踪的星座

建模空间监视雷达

定义两个站与扇形雷达梁研究的空间。球迷的卫星轨道检测的数量最大化。雷达站位于北美形成一个东西方栅栏。

%在LLA第一站坐标station1 = [48 -80 0];% LLA第二站坐标station2 = (-117 0);

每个地铁站都配备有一个雷达,它是通过使用建模fusionRadarSensor对象。为了探测卫星LEO范围,雷达有以下要求:

  • 检测10 dBsm对象达2000公里

  • 解决对象横向和纵向精度的100 2000公里距离

  • 在方位120度的视野,在海拔30度

  • 查找到太空

%创建扇形单站雷达fov = [40] 120;;radar1 = fusionRadarSensor (1,“UpdateRate”,0.1,10秒“ScanMode”,“没有扫描”,“MountingAngles”,90 0][0,查找“FieldOfView”fov,“ReferenceRange”2000年e3,“RangeLimits”[0 2000年e3),“ReferenceRCS”10dBsm“HasFalseAlarms”假的,“HasNoise”,真的,“HasElevation”,真的,“AzimuthResolution”,0.03,“ElevationResolution”,0.03,“RangeResolution”,2000,m %准确性~ = 2000 * 0.05(米)“DetectionCoordinates”,“球形传感器”,“TargetReportFormat”,“检测”);radar2 =克隆(radar1);radar2。SensorIndex = 2;

雷达处理链

在这个例子中,几个坐标转换和坐标轴转换执行正确运行雷达跟踪链。下图说明了上面定义的输入转换和传递到雷达。

在第一步中,计算每颗卫星构成在当地雷达站NED轴。你实现这一目标,首先获得地面站ECEF姿势和转换的卫星位置和速度ECEF坐标。雷达获得的输入通过卫星姿态与地面站之间的差异构成和旋转到地面站本地NED轴的区别。看到assembleRadarInputs万博1manbetx支持功能的实现细节。

在第二个步骤中,您将所需的信息添加到检测对象,以便跟踪器可以操作ECEF状态。您使用MeasurementParameters属性在每个对象检测来实现这一目的,如图所示addMeasurementParams万博1manbetx支持功能。

定义一个跟踪器

上面定义的雷达模型输出检测。估计卫星轨道,你使用跟踪器。传感器融合和跟踪工具箱™提供了各种多目标跟踪器。在这个例子中,你选择一个联合概率数据关联(JPDA)跟踪器,因为它提供了一个良好的跟踪性能和计算成本平衡。

您需要定义一个跟踪器的跟踪滤波器。您可以使用较低的忠诚比SGP4模型,如开普勒集成的运动方程,跟踪卫星。通常缺乏忠诚的目标运动模型的补偿,测量更新和合并过程噪音过滤器。支持函数万博1manbetxinitKeplerUKF定义跟踪滤波器。

%定义跟踪器追踪= trackerJPDA (“FilterInitializationFcn”@initKeplerUKF,“HasDetectableTrackIDsInput”,真的,“ClutterDensity”1 e-40“AssignmentThreshold”1 e4,“DeletionThreshold”,8 [5],“ConfirmationThreshold”8 [5]);

运行仿真

剩下的这个例子中,你通过场景模拟雷达探测和跟踪卫星。本节使用trackingGlobeViewer可视化。你使用这个类来显示传感器和跟踪数据不确定性椭圆和显示每颗卫星的真实位置。

观众= trackingGlobeViewer (“ShowDroppedTracks”假的,“PlatformHistoryDepth”,700);%定义每个雷达覆盖的配置,并呈现在世界各地station1 ned1 = dcmecef2ned (station1 (1), (2));station2 ned2 = dcmecef2ned (station2 (1), (2));covcon (1) = coverageConfig (radar1 lla2ecef (station1),四元数(ned1,“rotmat”,“帧”));covcon (2) = coverageConfig (radar2 lla2ecef (station2),四元数(ned2,“rotmat”,“帧”));covcon plotCoverage(查看器,“ECEF”);

你第一次生成的整个历史的星座超过5小时。然后,模拟雷达探测和生成跟踪在一个循环中。

satscene。StopTime = satscene。开始时间(5)+小时;satscene。SampleTime = 10;numSteps =装天花板(秒(satscene。StopTime - satscene.StartTime) / satscene.SampleTime);%得到星座位置和速度的模拟公寓= repmat (结构(“PlatformID”0,“位置”(0 0 0),“速度”,0 0 0),numSteps 40);i = 1:元素个数(星座)[pos,韦尔]=州(星座(我),“CoordinateFrame”,“ECEF”);j = 1: numSteps公寓(j,我)。位置= pos (:, j) ';我的公寓(j)。速度=韦尔(:,j)”;我的公寓(j)。PlatformID =我;结束结束%初始化跟踪和跟踪日志confTracks = objectTrack.empty (0,1);trackLog =细胞(1、numSteps);%初始化雷达情节radarplt = helperRadarPlot (fov);%设置随机种子可重复的结果s =提高;rng (2020);一步= 0;一步< =一步* satscene.SampleTime numSteps时间;一步= + 1步;%产生探测雷达后的星座%处理链targets1 = assembleRadarInputs (station1公寓(一步,:));[dets1, numdets1] = radar1 (targets1、时间);dets1 = addMeasurementParams (dets1 numdets1 station1);targets2 = assembleRadarInputs (station2公寓(一步,:));[dets2, numdets2] = radar2 (targets2、时间);dets2 = addMeasurementParams (dets2 numdets2 station2);检测= [dets1;dets2];updateRadarPlots (radarplt、targets1 targets2、dets1 dets2)%生成和更新detectableInput = isDetectable(跟踪、时间covcon);如果~ isempty(检测)| | isLocked(跟踪)[confTracks, ~, ~,信息]=追踪(检测、时间detectableInput);结束trackLog{一步}= confTracks;%更新查看器plotPlatform(观众、公寓(一步,:)“ECEF”,“颜色”(1 0 0),“线宽”1);plotDetection(查看器,检测,“ECEF”);confTracks plotTrack(查看器,“ECEF”,“颜色”(0 1 0),“线宽”3);结束

图包含2轴对象。坐标轴对象1 1标题雷达视场包含772行类型的对象。坐标轴对象2 2标题雷达视场包含1052行类型的对象。

上面的图显示了轨道(蓝点)和检测(红圈)每个雷达的角度。

%恢复以前的随机种子的状态rng(年代);
图;快照(观众);

经过5个小时的跟踪,大约一半的星座是成功跟踪。与部分轨道保持跟踪报道具有挑战性的,因为卫星通常可以保持未被发现长时间在这个配置。在这个示例中,只有两个雷达站。额外的跟踪站预计将产生更好的跟踪性能。任务指标,评估跟踪性能之间通过比较真实的对象和跟踪,如下所示。

%显示任务指标truthIdFcn = @ (x) [x.PlatformID];tam = trackAssignmentMetrics (“DistanceFunctionFormat”,“自定义”,“AssignmentDistanceFcn”@distanceFcn,“DivergenceDistanceFcn”@distanceFcn,“TruthIdentifierFcn”truthIdFcn,“AssignmentThreshold”,1000,“DivergenceThreshold”,2000);我= 1:numSteps%提取跟踪和地面真理在第i个跟踪更新我跟踪= trackLog {};真理=公寓(我:);%提取总结任务指标对追踪和真理[trackAM, truthAM] = tam(痕迹,真理);结束
%显示累积指标为每个记录的对象结果= truthMetricsTable (tam);结果(:,{“TruthID”,“AssociatedTrackID”,“BreakLength”,“EstablishmentLength”})
ans =40×4表TruthID AssociatedTrackID BreakLength EstablishmentLength _________ _________________ ___________ ___________________ 1 52 5 232 24 594 3 4 0 2 56 437 55 11 492 5 18 0 6 48 513 811 7 21 0 8 27 661 9 0 1221 10 0 0 1339 37 12 0 1056 1504 11 43 13南0 1800 1800 15南南0 0 1800 16南⋮0 1800

上表列出了40发射的卫星星座显示了卫星跟踪和相关跟踪id。追踪ID的值南表示不跟踪卫星仿真的结束。这也意味着这颗卫星的轨道没有通过的视野两个雷达或卫星的轨道已经下降。跟踪器可以把跟踪由于初始检测数量不足,导致大量不确定性的估计。交替,跟踪器可以把跟踪如果卫星不是re-detected很快,这样缺乏更新导致分歧,最终删除。

总结

在这个示例中,您已经了解了如何使用satelliteScenario对象从航空工具箱™进口轨道框架信息文件。您使用的卫星传播轨迹SGP4和可视化场景使用卫星场景查看器。您学习了如何使用传感器融合的雷达和追踪模型和跟踪工具箱™模型空间监视雷达跟踪系统。建立跟踪系统可以预测估计每个卫星使用低忠诚模型的轨道。

万博1manbetx支持功能

initKeplerUKF初始化一个无味卡尔曼滤波器使用开普勒运动模型。集α= 1,β= 0,卡巴= 0,以确保无香味的过滤器在长期预测的鲁棒性。

函数过滤器= initKeplerUKF radarsphmeas = detection.Measurement(检测);[x, y, z] = sph2cart(函数(radarsphmeas(1)),函数(radarsphmeas (2)), radarsphmeas (3));radarcartmeas = [x y z];Recef2radar = detection.MeasurementParameters.Orientation;ecefmeas = detection.MeasurementParameters。OriginPosition + radarcartmeas * Recef2radar;%这相当于:% Ry90 = [0 0 1;0 1 0;1 0 0];%帧y轴旋转90度% nedmeas (:) = Ry90 ' * radarcartmeas (:);% ecefmeas = lla2ecef (lla) + nedmeas * dcmecef2ned (lla (1) lla (2));initState = [ecefmeas (1);0;ecefmeas (2);0;ecefmeas (3);0);sigpos = 2;% msigvel = 0.5;% m / s ^ 2过滤器= trackingUKF (@keplerorbit @cvmeas initState,“α”,1“β”0,“卡巴”0,“StateCovariance”、诊断接头(repmat ((1000、10000)。^ 2, 1, 3)),“ProcessNoise”、诊断接头(repmat ([sigpos, sigvel]。^ 2, 1, 3)));结束函数国家= keplerorbit(状态,dt)% keplerorbit执行数值积分预测的状态%开普勒的身体。状态是[x, vx; y; v; z; vz]%龙格-库塔第四阶积分法:k1 =开普勒(状态);k2 =开普勒(国家+ dt * k1/2);k3 =开普勒(国家+ dt * k2/2);k4 =开普勒(国家+ dt * k3);状态= + dt * (k1 + 2 * k2 + 2 * k3 + k4) / 6;函数dstate =开普勒(状态)x =状态(1:);vx =状态(2:);y =状态(3:);v =状态(4:);:z =状态(5日);:vz =状态(6日);μ= 398600.4405 * 1 e9;% s m ^ 3 ^ 2ω= 7.292115 e-5;% rad /秒r =规范([x y z]);g =μ/ r ^ 2;% non-intertial坐标系坐标,占科里奥利%和向心加速度ax =ω- g * x / r + 2 * * v +ω^ 2 * x;唉=ω- g * y / r - 2 * * vx +ω^ 2 * y;阿兹= r - g * z /;dstate = [vx;斧子;v;是的;vz; az);结束结束

isDetectable示例中用于确定在给定的时间检测跟踪。

函数detectInput = isDetectable(跟踪、时间covcon)如果~ isLocked(跟踪)detectInput = 0 (0, 1,“uint32”);返回结束跟踪= tracker.predictTracksToTime (“所有”、时间);如果isempty(跟踪)detectInput = 0 (0, 1,“uint32”);其他的alltrackid = [tracks.TrackID];isDetectable = 0(元素个数(跟踪),元素个数(covcon),“逻辑”);i = 1:元素个数(跟踪)跟踪=跟踪(我);pos_scene =。状态([1 3 5]);j = 1:元素个数(covcon)配置= covcon (j);%旋转位置传感器坐标系:d_scene = pos_scene (:)——config.Position (:);scene2sens = rotmat (config.Orientation,“帧”);d_sens = scene2sens * d_scene (:);(阿兹,el) = cart2sph (d_sens (1) d_sens (2), d_sens (3));如果abs (rad2deg (az) < = config.FieldOfView (1) / 2 & & abs (rad2deg (el) < config.FieldOfView (2) / 2 isDetectable (i, j) = true;其他的isDetectable (i, j) = false;结束结束结束detectInput = alltrackid(任何(isDetectable 2) ';结束结束

assembleRadarInput用于构造提出了在每个星座雷达车身骨架。这是第一步中所描述的图。

函数目标= assembleRadarInputs(站、星座)%的每颗卫星星座,推导其构成对%雷达坐标系。%的输入:% -站:LLA雷达地面站的向量% -星座:包含ECEF位置的结构体数组每个卫星的%和ECEF速度%输出:% -目标:包含构成的结构体数组%卫星的雷达,表示在当地%地面雷达坐标系(NED)%模板结构的输出包含所需的所有领域%的雷达步骤方法targetTemplate =结构(“PlatformID”0,“ClassID”0,“位置”,0 (1、3)“速度”,0 (1、3)“加速”,0 (1、3)“定位”四元数(0,0,0),“AngularVelocity”,0 (1、3)“维度”结构(“长度”0,“宽度”0,“高度”0,“OriginOffset”,0 0 0),“签名”{{rcsSignature}});%首先填写当前卫星ECEF姿势targetPoses = repmat (targetTemplate 1元素个数(星座));i = 1:元素个数(星座)targetPoses(我)。位置=(我).Position星座;targetPoses(我)。速度=(我).Velocity星座;targetPoses(我)。PlatformID =(我).PlatformID星座;%方向和角速度是左零,假设卫星%与统一的点目标rcs结束%然后推导出雷达构成ECEF基于地面站的位置Recef2station = dcmecef2ned(站(1)站(2));radarPose。取向=四元数(Recef2station,“rotmat”,“帧”);radarPose。位置= lla2ecef(站);radarPose。速度= 0 (1、3);radarPose。AngularVelocity = 0 (1、3);%最后,取区别和旋转矢量地面站% NED轴目标= targetPoses;i = 1:元素个数(targetPoses) thisTgt = targetPoses(我);pos = Recef2station * (thisTgt.Position (:)——radarPose.Position (:));韦尔= Recef2station * (thisTgt.Velocity (:)——radarPose.Velocity(:))——交叉(radarPose.AngularVelocity (:), pos (:));angVel = thisTgt.AngularVelocity (:)——radarPose.AngularVelocity (:);东方= radarPose。取向的* thisTgt.Orientation;%存储到目标结构数组中目标(我).Position (:) = pos;目标(我).Velocity(:) =韦尔;目标(我).AngularVelocity (:) = angVel;目标(i)。取向=东方;结束结束

addMeasurementParam实现雷达链过程中步骤2中描述的图。

函数依据= addMeasurementParams(精细、numdets站)%雷达站信息添加到测量参数Recef2station = dcmecef2ned(站(1)站(2));i = 1: numdets侦破{我}.MeasurementParameters。OriginPosition = lla2ecef(站);依据{我}.MeasurementParameters。IsParentToChild = true;% = ecef母公司,孩子=雷达依据{我}.MeasurementParameters。取向=侦破{我}.MeasurementParameters。取向的* Recef2station;结束结束

distanceFcn与任务指标用于评估跟踪任务。

函数d = distanceFcn(跟踪、真理)估计=。状态([1 3 5 2 4 6]);真的= [truth.Position (:);truth.Velocity (:));x =。StateCovariance ([1 3 5 2 4 6], [1 3 5 2 4 6]);d =(估计-真实)' / x *(估计-真实);结束

参考

[1]曾经、Ramaswamy和安东尼奥·f·Pensa eds。观点在太空监视。麻省理工学院出版社,2017年。