主要内容

跟踪使用开普勒运动模型空间碎片

这个例子展示了如何使用自定义模型地球轨迹一样运动模型trackingScenario如何配置一个fusionRadarSensor在单站模式来生成合成空间碎片的探测,以及如何设置一个多目标跟踪器跟踪模拟目标。

空间碎片的场景

有超过30000个大型碎片对象(直径大于10厘米)和100万多名小碎片对象在低地球轨道(LEO) [1]。这个碎片可以是危险的人类活动的空间,损害操作卫星,并迫使时间敏感的和昂贵的规避策略。随着空间活动增加,减少空间碎片和监控变得至关重要。

您可以使用传感器融合和碎片轨迹跟踪工具箱™模型,生成合成雷达探测的碎片,并获得每个对象的位置和速度估计。

首先,创建一个跟踪场景和设置随机种子可重复的结果。

s =提高;rng (2020);现场= trackingScenario (“IsEarthCentered”,真的,“InitialAdvance”,“UpdateInterval”,“StopTime”,3600,“UpdateRate”,0.1);

您使用Earth-Centered-Earth-Fixed坐标系(ECEF)。这个框架的起源是在地球的中心和Z轴指向北极。X轴指向赤道的交集和格林威治子午线。Y轴完成右撇子体系。平台位置和速度被定义在这个框架使用笛卡尔坐标。

定义碎片运动模型

helperMotionTrajectory这个示例中所使用的类定义了碎片对象使用一个自定义的运动轨迹模型的功能。

空间对象的轨迹旋转地球可以近似用开普勒模型,假定地球是一个质点的身体和物体绕地球的质量可以忽略不计。高阶效应在地球引力场和环境干扰不占。由于运动方程是表示在ECEF框架是一个惯性参考系,科氏力和向心力。

ECEF碎片对象加速度向量

一个 = - - - - - - μ r 3 r - - - - - - 2 Ω × d d t r - - - - - - Ω × ( Ω × r ) ,

在哪里 μ 是地球的标准重力参数, r 是ECEF碎片对象位置向量, r 是位置向量的常态, Ω 是地球旋转向量。

这个函数keplerorbit以下采用四阶龙格-库塔数值积分方程传播时间的位置和速度。

首先,我们创建初始位置和速度空间碎片对象。这是通过获得传统的轨道参数(偏心轴,倾向,升交点经度,近拱点的观点,和真正的异常角)这些对象的随机分布。然后将这些轨道元素转换为位置和速度矢量通过使用支持功能万博1manbetxoe2rv

%生成一个人口的碎片numDebris = 100;范围= 7 e6 + 1 e5 * randn (numDebris, 1);ecc = 0.015 + 0.005 * randn (numDebris, 1);公司= 80 + 10 *兰德(numDebris, 1);局域网= 360 *兰德(numDebris, 1);w = 360 *兰德(numDebris, 1);ν= 360 *兰德(numDebris, 1);%转换为初始位置和速度i = 1: numDebris [r, v] = oe2rv(范围(i), ecc (i),公司(我),局域网(i), w (i),ν(我));数据(我)。InitialPosition = r;% #好< SAGROW >数据(我)。InitialVelocity = v;% #好< SAGROW >结束%创建平台和分配使用keplerorbit运动轨迹模型i = 1: numDebris碎片(i) =平台(现场);% #好< SAGROW >碎片(i)。轨迹= helperMotionTrajectory (@keplerorbit,“SampleRate”,0.1,%集成步骤10秒“位置”、数据(我).InitialPosition“速度”、数据(我).InitialVelocity);% #好< SAGROW >结束

模型空间监视雷达

在这个例子中,我们定义了四个对映站扇形雷达梁研究空间。球迷们穿过的轨道碎片对象对象检测的数量最大化。一双站位于太平洋和大西洋,而第二个一双监视站两极附近。有四个分散雷达允许re-detection空间碎片的正确位置估计和也获得新的碎片检测。

%创建一个空间监视站在太平洋station1 =平台(场景,“位置”,(180 0));%创建第二个监视站在大西洋station2 =平台(场景,“位置”-20年[0 0]);%在北极附近,创建一个第三监视站在冰岛station3 =平台(场景,“位置”,(65 -20 0));%创建第四个监视站在南极附近station4 =平台(场景,“位置”,-90 0 0);

每个地铁站都配备有雷达与建模fusionRadarSensor对象。为了检测在狮子座碎片对象范围,雷达有以下要求:

  • 检测10 dBsm对象达2000公里

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

  • 有一个扇形的视野120度方位和30度的仰角

  • 基于其地理位置查找到太空

%创建扇形单站雷达监视太空垃圾对象radar1 = fusionRadarSensor (1,“UpdateRate”,0.1,10秒“ScanMode”,“没有扫描”,“MountingAngles”,90 0][0,查找“FieldOfView”(120;30),“ReferenceRange”2 e6,“RangeLimits”[0 2 e6],“ReferenceRCS”10dBsm“HasFalseAlarms”假的,“HasElevation”,真的,“AzimuthResolution”,0.01,“ElevationResolution”,0.01,“RangeResolution”,100,“之内”,真的,“DetectionCoordinates”,“场景”);station1。传感器= radar1;radar2 =克隆(radar1);radar2。SensorIndex = 2;station2。传感器= radar2;radar3 =克隆(radar1);radar3。SensorIndex = 3; station3.Sensors = radar3; radar4 = clone(radar1); radar4.SensorIndex = 4; station4.Sensors = radar4;

可视化与trackingGlobeViewer地面实况

你使用trackingGlobeViewer可视化跟踪场景中定义的所有元素:个人碎片对象及其轨迹,雷达的粉丝,雷达探测和跟踪。

f = uifigure;观众= trackingGlobeViewer (f,“技术”,“卫星”,“ShowDroppedTracks”、假);%添加信息框上的全球观众infotext = simulationInfoText (0, 0, 0);infobox = uilabel (f,“文本”infotext,“FontColor”(1 1 1),“字形大小”11“位置”(300 70),“可见”,“上”);%显示雷达梁上covcon = coverageConfig(现场);covcon plotCoverage(查看器,“ECEF”);推进(场景)信息框。文本= simulationInfoText(场景。SimulationTime 0 numDebris);plotPlatform(查看器碎片,“ECEF”);结束%的快照的场景快照(观众);

在虚拟世界中,您可以看到白色的点所代表的空间碎片与个别落后于轨迹白线所示。大多数生成的碎片对象与高轨道倾角角度接近80度。

轨迹绘制在ECEF坐标,因此整个轨迹旋转向西方由于地球自转。几个轨道周期后,所有空间碎片通过监视雷达的光束。

模拟合成检测和跟踪太空碎片

传感器模型使用地面真理来生成合成检测。调用检测方法跟踪场景获取场景中所有的检测。

多目标跟踪器trackerJPDA副检测是用于创建新的跟踪现有的痕迹,估计其状态和删除发散。设置属性HasDetectableTrackIDsInput真正的允许追踪接受一个输入表明一个跟踪对象是否可检测在监测地区。这是重要的不是惩罚之外传播跟踪雷达的监视区域。效用函数isDetectable在每个仿真步骤是计算跟踪检测的。

此外,一个效用函数deleteBadTracks用于删除发散跟踪速度。

%定义跟踪器追踪= trackerJPDA (“FilterInitializationFcn”@initKeplerUKF,“HasDetectableTrackIDsInput”,真的,“ClutterDensity”1 e-20“AssignmentThreshold”1 e3,“DeletionThreshold”10 [7]);%复位的情况下,种子,和全球范围内显示重启(现场);现场。StopTime = 1800;% 30分钟明确的(观众);%减少碎片的历史深度查看器。PlatformHistoryDepth = 2;%显示10-sigma协方差椭圆为更好的可见性查看器。NumCovarianceSigma = 10;covcon plotCoverage(查看器,“ECEF”);%初始化跟踪confTracks = objectTrack.empty (0,1);推进(场景)plotPlatform(观众,碎片);时间= scene.SimulationTime;%生成检测检测=检测(现场);plotDetection(查看器,检测,“ECEF”);%生成和更新detectableInput = isDetectable(跟踪、时间covcon);如果isLocked(跟踪)| | ~ isempty(检测)[confTracks ~, allTracks信息]=追踪(检测、时间detectableInput);confTracks = deleteBadTracks(跟踪、confTracks);confTracks plotTrack(查看器,“ECEF”);结束信息框。文本= simulationInfoText(时间,元素个数(confTracks) numDebris);%移动相机在模拟快照开关时间情况下100坎波斯(观众[90 150 5 e6]);camorient(观众,[0 -65 345]);drawnow im1 =快照(观众);情况下270坎波斯(查看器(60 -120 2.6 e6));camorient(观众[20 -45 20]);drawnow情况下380坎波斯(查看器(60 -120 2.6 e6));camorient(观众[20 -45 20]);drawnow im2 =快照(观众);情况下400年%重置坎波斯(查看器(17.3 -67.2 2.400 e7));camorient(查看器(360 -90 0));drawnow情况下1500坎波斯(观众[54 2.3 - 6.09 e6]);camorient(观众,[0 -73 348]);drawnow情况下1560 im3 =快照(观众);drawnow结束结束%恢复随机种子rng(年代);
imshow (im1);

第一个快照,您可以看到一个物体被跟踪,跟踪T1黄色。这个对象是只发现两次,这还不足以减少不确定性的轨道。因此,其协方差大小的椭圆是相对较大。你也可以观察到另一个轨道T2蓝色,由传感器检测到几次。结果,其相应的协方差椭圆小得多,因为有更多的检测用于正确的状态估计。

imshow (im2);

几分钟后,看到上面的快照,T1被删除,因为跟踪变得太大的不确定性没有检测。另一方面,第二由于额外的检测跟踪T2幸存下来。

imshow (im3)

在上面的截图中,你可以看到跟踪T15(浅蓝色)即将进入雷达监视区。跟踪T11(橙色)只是更新检测,减少了不确定性的估计位置和速度。雷达站配置,经过30分钟的监测、18跟踪和确认的100碎片对象初始化。如果你增加仿真时间,雷达将覆盖360度空间,最终可以跟踪更多的碎片。可以探索不同的雷达站位置和配置跟踪对象的数量增加。

总结

在本例中您已经了解了如何指定自己的运动模型跟踪场景中移动平台,以及如何使用它们来设置一个追踪者。这使您能够应用传感器融合和跟踪技术在这个工具箱提供了广泛的应用,如模拟和跟踪太空碎片的问题在一个Earth-Centered-Earth-Fixed坐标系,如本例所示。

万博1manbetx支持功能

在这个例子中使用的运动模型介绍如下。国家是ECEF对象的位置和速度[x;vx;y;v;z;款)

函数国家= keplerorbit(状态,dt)% keplerorbit执行数值积分预测的状态%开普勒的身体。状态是[x, vx; y; v; z; vz]% 4龙格-库塔积分法: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);结束结束

initKeplerUKF初始化跟踪滤波器与你自己的运动模型。在这个例子中,我们使用相同的运动模型,建立了地面真理,keplerorbit。

函数过滤器= initKeplerUKF(检测)%假定雷达返回[x y z]变长度输入宗量measmodel = @ (x) x ([1 3 5]:);detNoise = detection.MeasurementNoise;sigpos = 0.4;% msigvel = 0.4;% m / s ^ 2量= detection.Measurement;initState =[多边环境(1);0;量(2);0;量(3);0];过滤器= trackingUKF (@keplerorbit measmodel initState,“StateCovariance”、诊断接头(repmat ([10000]。^ 2, 1, 3)),“ProcessNoise”、诊断接头(repmat ([sigpos, sigvel]。^ 2, 1, 3)),“MeasurementNoise”,detNoise);结束

oe2rv将一组6传统轨道元素转换为位置和速度矢量。

函数(r, v) = oe2rv (a, e, i,局域网,w,ν)%参考:软化,穆勒&白色,天体动力学基础2.5秒μ= 398600.4405 * 1 e9;% s m ^ 3 ^ 2%表示r和病灶周边系统的vcnu = cosd(ν);snu =信德(ν);p = * (1 - e ^ 2);r = p / (1 + e *读书;学校r_peri = [r *制度;r * snu;0);v_peri =√μ/ p) * (-snu;学校e +制度;0);%水谷进入地心赤道坐标系家族= cosd(局域网);超人=信德(局域网);连续波= cosd (w);sw =信德(w);ci = cosd(我);如果=信德(我);R =[家族* cw-slan * sw * ci,家族* sw-slan *连续波* ci,超人*如果;超人*连续波+家族* sw * ci,超人* sw +家族*连续波* ci,家族*如果;sw * si,连续波* si, ci);r = r * r_peri;v = R * v_peri;结束

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) ';结束结束

deleteBadTracks用于去除轨道明显分化。特别是分化跟踪在这个例子中是追踪其当前位置落在地球表面并追踪其协方差变得太大。

函数跟踪= deleteBadTracks(追踪,追踪)%去掉发散跟踪:与协方差> 4 * 1 e8 %—跟踪(20公里标准偏差)%—跟踪估计位置之外的狮子座n =元素个数(跟踪);删除= 0 (1,n,“逻辑”);i = 1:元素个数(跟踪)(pos机,x) = getTrackPositions(跟踪(我),(1 0 0 0 0 0;0 0 1 0 0 0;0 0 0 0 1 0]);如果规范(pos) < 6500 * 1 e3 | |规范(pos) > 8500 * 1 e3 | |马克斯(x, [],“所有”)> 4 * 1 e8 deleteTrack(跟踪,跟踪(i) .TrackID);删除(i) = true;结束结束跟踪(删除)= [];结束

simulationInfoText用于显示仿真时间,碎片的数量,和当前的跟踪情况。

函数文本= simulationInfoText(时间、numTracks numDebris) = vertcat文本(字符串([的模拟运行时间:num2str(圆(时间/ 60))“(min)”]),字符串([当前数量的跟踪:num2str (numTracks)]),字符串([总数的碎片:“num2str (numDebris))));drawnowlimitrate结束

引用

[1]https://www.esa.int/Space_Safety/Space_Debris/Space_debris_by_the_numbers