주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

위성군의 지상국 액세스

이 예제에서는 지상국과 위성군에 탑재된 원뿔형 센서 간의 액세스 분석을 설정하는 방법을 보여줍니다. 지상국과 위성에 속한 원뿔형 센서가 서로 액세스 가능하려면, 지상국이 원뿔형 센서의 시야(field of view) 내에 있고, 지상국 기준에서 원뿔형 센서의 고도각이 지상국의 최소 고도각보다 크거나 같아야 합니다. 이 시나리오는 40개의 지구 저궤도 위성으로 이루어진 위성군과 한 지점의 지리적 위치가 있다고 가정합니다. 각 위성에는 시야가 90도인 카메라가 있습니다. 이 전체 위성군의 임무는 북위 42.3001도, 서경 71.3504도에 위치한 지리적 지점을 촬영하는 것입니다. 2020년 5월 12일 오후 1:00 UTC부터 2020년 5월 12일 오후 7:00 UTC 사이에 태양이 적절히 비추는 시간대에 이 위치를 촬영해야 합니다. 대기 왜곡을 최소화하면서 좋은 품질의 사진을 촬영하려면, 위성의 고도각이 이 위치를 기준으로 최소 30도 이상이어야 합니다(참고로, 30도는 설명을 위해 임의로 선택된 각도입니다). 6시간의 구간 동안 각 위성이 언제 이 위치를 촬영할 수 있는지 확인해야 합니다. 또한 이 구간 동안 적어도 하나의 위성 카메라가 이 위치를 볼 수 있는 시간의 비율도 확인해야 합니다. 이 백분율 수치를 시스템 전체의 액세스 비율(system-wide access percentage)이라고 합니다.

위성 시나리오 만들기

satelliteScenario를 사용하여 위성 시나리오를 만듭니다. datetime을 사용하여 시작 시간을 2020년 5월 12일 오후 1:00:00 UTC로 설정하고, 중지 시간을 2020년 5월 12일 오후 7:00:00 UTC로 설정합니다. 시뮬레이션 샘플 시간을 30초로 설정합니다.

startTime = datetime(2020,5,12,13,0,0);
stopTime = startTime + hours(6);
sampleTime = 30; % seconds
sc = satelliteScenario(startTime,stopTime,sampleTime)
sc = 
  satelliteScenario with properties:

             StartTime: 12-May-2020 13:00:00
              StopTime: 12-May-2020 19:00:00
            SampleTime: 30
          AutoSimulate: 1
    CentralBodyOptions: [1×1 Aero.satellitescenario.CentralBodyOptions]
            Satellites: [1×0 matlabshared.satellitescenario.Satellite]
        GroundStations: [1×0 matlabshared.satellitescenario.GroundStation]
             Platforms: [1×0 matlabshared.satellitescenario.Platform]
               Viewers: [0×0 matlabshared.satellitescenario.Viewer]
              AutoShow: 1

위성 시나리오에 위성 추가하기

satellite를 사용하여 TLE 파일 leoSatelliteConstellation.tle의 위성을 시나리오에 추가합니다. 이 TLE 파일은 고도 약 500km와 경사각 약 55도에서 거의 원의 형태로 지구 저궤도를 도는 일반 위성 40개의 평균 궤도 파라미터를 정의합니다.

tleFile = "leoSatelliteConstellation.tle";
sat = satellite(sc,tleFile)
sat = 
  1x40 Satellite array with properties:

    Name
    ID
    PhysicalProperties
    ConicalSensors
    Gimbals
    Transmitters
    Receivers
    Accesses
    Eclipse
    GroundTrack
    Orbit
    CoordinateAxes
    OrbitPropagator
    MarkerColor
    MarkerSize
    ShowLabel
    LabelFontColor
    LabelFontSize
    Visual3DModel
    Visual3DModelScale

위성에 카메라 추가하기

conicalSensor를 사용하여 각 위성에 원뿔형 센서를 추가합니다. 이러한 원뿔형 센서는 카메라를 나타냅니다. MaxViewAngle을 90도로 지정합니다. 이 각도에 의해 시야(field of view)가 정의됩니다.

names = sat.Name + " Camera";
cam = conicalSensor(sat,"Name",names,"MaxViewAngle",90)
cam = 
  1x40 ConicalSensor array with properties:

    Name
    ID
    MountingLocation
    MountingAngles
    MaxViewAngle
    Accesses
    FieldOfView
    CoordinateAxes

촬영할 지리적 위치를 위성 시나리오에 정의하기

groundStation을 사용하여 지상국을 추가합니다. 이 지상국은 촬영하고자 하는 지리적 위치를 나타냅니다. MinElevationAngle을 30도로 지정합니다. 위도와 경도를 지정하지 않으면 디폴트 값은 북위 42.3001도, 서경 71.3504도입니다.

name = "Geographical Site";
minElevationAngle = 30; % degrees
geoSite = groundStation(sc, ...
    "Name",name, ...
    "MinElevationAngle",minElevationAngle)
geoSite = 
  GroundStation with properties:

                  Name:  Geographical Site
                    ID:  81
              Latitude:  42.3 degrees
             Longitude:  -71.35 degrees
              Altitude:  0 meters
     MinElevationAngle:  30 degrees
    MaskElevationAngle:  30 degrees
      MaskAzimuthEdges:  [0 360]
        ConicalSensors:  [1x0 matlabshared.satellitescenario.ConicalSensor]
               Gimbals:  [1x0 matlabshared.satellitescenario.Gimbal]
          Transmitters:  [1x0 satcom.satellitescenario.Transmitter]
             Receivers:  [1x0 satcom.satellitescenario.Receiver]
              Accesses:  [1x0 matlabshared.satellitescenario.Access]
               Eclipse:  [1x0 Aero.satellitescenario.Eclipse]
        CoordinateAxes:  [1x1 matlabshared.satellitescenario.CoordinateAxes]
           MarkerColor:  [1 0.4118 0.1608]
            MarkerSize:  6
             ShowLabel:  true
        LabelFontColor:  [1 1 1]
         LabelFontSize:  15

카메라와 지리적 위치 간의 액세스 분석 추가하기

access를 사용하여 각 카메라와 지리적 위치 간의 액세스 분석을 추가합니다. 액세스 분석은 각 카메라가 해당 위치를 언제 촬영할 수 있는지 확인하고자 할 때 사용합니다.

ac = access(cam,geoSite);

% Properties of access analysis objects
ac(1)
ans = 
  Access with properties:

    Sequence:  [41 81]
    LineWidth:  3
    LineColor:  [0.3922 0.8314 0.0745]

시나리오 시각화하기

satelliteScenarioViewer를 사용하여 위성 시나리오 뷰어를 실행하고 시나리오를 시각화합니다. ShowDetails 이름-값 쌍을 false로 설정하여 위성과 지상국의 궤도와 레이블을 숨깁니다. 지리적 위치와 Satellite 4의 레이블을 표시하고, 위성이 화면 중앙에 오도록 합니다.

v = satelliteScenarioViewer(sc,"ShowDetails",false);
sat(4).ShowLabel = true;
geoSite.ShowLabel = true;
show(sat(4));

ShowDetails 속성을 false로 설정하면 위성과 지상국만 표시됩니다. 레이블, 궤도, 시야, 지상 궤적은 숨겨집니다. 위성과 지상국 위에 마우스를 올리면 레이블이 표시됩니다. 위성이나 지상국을 클릭하면 레이블, 궤도와 기타 숨겨진 그래픽이 표시됩니다. 위성이나 지상국을 다시 클릭하면 해당 그래픽이 사라집니다.

뷰어는 시나리오가 올바르게 설정되었는지 시각적으로 확인하는 용도로 사용할 수 있습니다. 보라색 선은 Satellite 4의 카메라와 지리적 위치가 서로 액세스할 수 있음을 나타냅니다. 즉, 지리적 위치가 카메라의 시야 내에 있고, 이 위치에 대한 카메라의 고도각이 30도 이상임을 의미합니다. 이는 이 시나리오의 목표대로 카메라가 해당 위치를 성공적으로 촬영할 수 있음을 의미합니다.

카메라의 시야 시각화하기

fieldOfView를 사용하여 Satellite 4에 있는 각 카메라의 시야를 시각화합니다.

fov = fieldOfView(cam([cam.Name] == "Satellite 4 Camera"))
fov = 
  FieldOfView with properties:

         LineWidth: 1
         LineColor: [1 0.0745 0.6510]
    VisibilityMode: 'inherit'

지리적 위치가 윤곽선 안에 있으면, Satellite 4에 탑재된 카메라의 시야 내에 있다는 것을 시각적으로 확인할 수 있습니다.

시각화 사용자 지정하기

액세스 시각화의 색을 빨간색으로 변경합니다.

ac.LineColor = 'red';

카메라가 지리적 위치를 촬영할 수 있는 시간 확인하기

accessIntervals를 사용하여 각 카메라와 지리적 위치가 서로 액세스할 수 있는 시간을 확인합니다. 다음은 카메라가 해당 위치를 촬영할 수 있는 시간입니다.

accessIntervals(ac)
ans=30×8 table
           Source                  Target           IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
    _____________________    ___________________    ______________    ____________________    ____________________    ________    __________    ________

    "Satellite 1 Camera"     "Geographical Site"          1           12-May-2020 13:36:00    12-May-2020 13:39:30      210           1            1    
    "Satellite 1 Camera"     "Geographical Site"          2           12-May-2020 15:23:00    12-May-2020 15:25:00      120           2            2    
    "Satellite 2 Camera"     "Geographical Site"          1           12-May-2020 14:30:30    12-May-2020 14:34:30      240           1            1    
    "Satellite 3 Camera"     "Geographical Site"          1           12-May-2020 13:28:30    12-May-2020 13:32:30      240           1            1    
    "Satellite 4 Camera"     "Geographical Site"          1           12-May-2020 13:00:00    12-May-2020 13:02:30      150           1            1    
    "Satellite 4 Camera"     "Geographical Site"          2           12-May-2020 14:46:00    12-May-2020 14:48:30      150           2            2    
    "Satellite 5 Camera"     "Geographical Site"          1           12-May-2020 16:28:30    12-May-2020 16:33:00      270           3            3    
    "Satellite 6 Camera"     "Geographical Site"          1           12-May-2020 17:05:30    12-May-2020 17:09:30      240           3            3    
    "Satellite 7 Camera"     "Geographical Site"          1           12-May-2020 16:20:00    12-May-2020 16:24:30      270           2            3    
    "Satellite 8 Camera"     "Geographical Site"          1           12-May-2020 15:18:00    12-May-2020 15:20:00      120           2            2    
    "Satellite 8 Camera"     "Geographical Site"          2           12-May-2020 17:03:30    12-May-2020 17:07:00      210           3            3    
    "Satellite 9 Camera"     "Geographical Site"          1           12-May-2020 17:55:30    12-May-2020 17:57:00       90           3            3    
    "Satellite 10 Camera"    "Geographical Site"          1           12-May-2020 18:44:30    12-May-2020 18:49:00      270           4            4    
    "Satellite 11 Camera"    "Geographical Site"          1           12-May-2020 18:39:30    12-May-2020 18:44:00      270           4            4    
    "Satellite 12 Camera"    "Geographical Site"          1           12-May-2020 17:58:00    12-May-2020 18:01:00      180           3            3    
    "Satellite 29 Camera"    "Geographical Site"          1           12-May-2020 13:09:30    12-May-2020 13:13:30      240           1            1    
      ⋮

위의 표는 지정된 카메라가 해당 위치를 촬영할 수 있는 각 구간의 시작 시간과 종료 시간으로 구성되어 있습니다. 각 구간의 지속 시간은 초 단위로 보고됩니다. StartOrbit과 EndOrbit은 액세스가 시작되고 끝날 때 카메라가 연결된 위성의 궤도 카운트입니다. 카운트는 시나리오 시작 시간부터 시작됩니다.

play를 사용하여 시작 시간부터 종료 시간까지 시나리오의 시뮬레이션을 시각화합니다. 카메라가 지리적 위치를 촬영할 수 있을 때마다 녹색 선이 나타나는 것을 볼 수 있습니다.

play(sc);

시스템 전체의 액세스 비율 계산하기

각 카메라가 지리적 위치를 촬영할 수 있는 시간을 확인하는 것 외에, 시나리오 시작 시간부터 중지 시간까지 적어도 하나의 위성이 해당 위치를 촬영할 수 있는 시간의 비율, 즉 시스템 전체의 액세스 비율(system-wide access percentage)도 구해야 합니다. 이는 다음과 같이 계산됩니다.

  • accessStatus를 사용하여 해당 위치에 대한 각 카메라의 액세스 상태 기록을 계산합니다. 이는 각 카메라에 대한 논리값 행 벡터로 반환되며, 벡터의 각 요소는 주어진 시간 샘플에서의 액세스 상태를 나타냅니다. 값이 True이면 카메라가 그 특정 시간 샘플에서 위치를 촬영할 수 있음을 나타냅니다.

  • 각 카메라가 위치에 액세스 가능한지를 나타낸 행 벡터 전체에 대해 논리 OR을 수행합니다. 이렇게 하면 하나의 논리값 행 벡터가 생성되며, 시나리오 샘플 시간 30초 동안 적어도 하나의 카메라가 해당 시간 샘플에서 위치를 촬영할 수 있으면 그 요소는 true 값을 가집니다.

  • 벡터에서 값이 True인 요소의 개수를 셉니다. 이 개수에 샘플 시간 30초를 곱하면 적어도 하나의 카메라가 위치를 촬영할 수 있는 총 시간(단위: 초)을 확인할 수 있습니다.

  • 이 수치를 시나리오 지속 시간(6시간)으로 나누고 100을 곱하여 시스템 전체의 액세스 비율을 구합니다.

for idx = 1:numel(ac)
    [s,time] = accessStatus(ac(idx));
    
    if idx == 1
        % Initialize system-wide access status vector in the first iteration
        systemWideAccessStatus = s;
    else
        % Update system-wide access status vector by performing a logical OR
        % with access status for the current camera-site access
        % analysis
        systemWideAccessStatus = or(systemWideAccessStatus,s);
    end
end

plot을 사용하여 시간에 따른 시스템 전체의 액세스 상태를 플로팅합니다.

plot(time,systemWideAccessStatus,"LineWidth",2);
grid on;
xlabel("Time");
ylabel("System-Wide Access Status");

Figure contains an axes object. The axes object with xlabel Time, ylabel System-Wide Access Status contains an object of type line.

시스템 전체의 액세스 상태가 1(True)인 시간에는 적어도 하나의 카메라가 위치를 촬영할 수 있습니다.

nnz를 사용하여 systemWideAccessStatus에서 값이 True인 요소의 개수를 확인합니다.

n = nnz(systemWideAccessStatus)
n = 
203

적어도 하나의 카메라가 위치를 촬영할 수 있는 총 시간을 확인합니다. 이는 True 요소의 수에 시나리오의 샘플 시간을 곱하여 계산합니다.

systemWideAccessDuration = n*sc.SampleTime % seconds
systemWideAccessDuration = 
6090

seconds를 사용하여 총 시나리오 지속 시간을 계산합니다.

scenarioDuration = seconds(sc.StopTime - sc.StartTime)
scenarioDuration = 
21600

시스템 전체의 액세스 비율을 계산합니다.

systemWideAccessPercentage = (systemWideAccessDuration/scenarioDuration)*100
systemWideAccessPercentage = 
28.1944

카메라가 지리적 위치를 추적하도록 하여 시스템 전체의 액세스 비율 높이기

위성의 디폴트 자세 구성은 요(yaw) 축이 바로 아래의 천저(nadir: 위성 바로 아래 지구상의 지점)를 향하도록 되어 있습니다. 카메라는 기본적으로 요 축과 정렬되어 있기 때문에 카메라도 똑바로 아래를 향하게 됩니다. 그 결과, 카메라의 고도각이 30도 이하로 떨어지기 전에 지리적 위치가 카메라의 시야에서 벗어나게 됩니다. 따라서 누적 액세스 비율은 카메라의 시야에 의해 제한됩니다.

하지만 카메라가 항상 지리적 위치를 향하도록 하면, 지구가 가시선을 가리지 않는 한 해당 지리적 위치는 항상 카메라의 시야 내에 있게 됩니다. 결과적으로 시스템 전체의 액세스 비율이 카메라의 시야가 아니라, 지리적 위치의 MinElevationAngle에 의해 제한되게 됩니다. 전자의 경우에는 해당 위치가 카메라의 시야에 들어올 때와 시야에서 벗어날 때 액세스 구간이 시작되고 끝났습니다. 카메라의 고도각이 30도보다 높아지고 얼마 지난 뒤에야 시야에 들어오고, 30도보다 낮아지기 전에 시야에서 벗어났습니다. 그러나 카메라가 항상 해당 위치를 향하도록 하면, 고도각이 30도보다 높아지는 시점에 액세스 구간이 시작되고 30도 아래로 떨어질 때 액세스 구간이 끝나므로 액세스가 지속되는 시간이 길어집니다. 따라서 시스템 전체의 액세스 비율도 증가합니다.

카메라는 위성에 고정되어 있으므로, 위성의 요 축이 지리적 위치를 추적하도록 하려면 궤도를 따라가면서 방향을 계속 조정해야 합니다. 카메라는 요 축과 정렬되어 있으므로 마찬가지로 이 위치를 향하게 됩니다. pointAt을 사용하여 각 위성의 요 축이 지리적 위치를 추적하도록 합니다.

pointAt(sat,geoSite);

시스템 전체의 액세스 비율을 다시 계산합니다.

% Calculate system-wide access status
for idx = 1:numel(ac)
    [s,time] = accessStatus(ac(idx));
    
    if idx == 1
        % Initialize system-wide access status vector in the first iteration
        systemWideAccessStatus = s;
    else
        % Update system-wide access status vector by performing a logical OR
        % with access status for the current camera-site combination
        systemWideAccessStatus = or(systemWideAccessStatus,s);
    end
end

% Calculate system-wide access percentage
n = nnz(systemWideAccessStatus);
systemWideAccessDuration = n*sc.SampleTime;
systemWideAccessPercentageWithTracking = (systemWideAccessDuration/scenarioDuration)*100
systemWideAccessPercentageWithTracking = 
38.3333

시스템 전체의 액세스 비율이 약 36% 향상되었습니다. 이는 카메라가 항상 지리적 위치를 향하도록 해서 나온 결과입니다. play를 다시 사용하여 이를 시각화할 수 있습니다.

play(sc)

카메라가 지리적 위치를 추적함에 따라 더 이상 바로 아래 방향만 바라보지 않으므로 시야의 윤곽선이 더 이상 원형이 아닙니다.

예제 탐색하기

이 예제에서는 지상국과 위성군에 탑재된 원뿔형 센서 간의 액세스 분석을 설정하는 방법을 보여주었습니다. 위성에 탑재된 카메라는 원뿔형 센서로 표현하고 촬영할 지리적 위치는 지상국으로 표현하였습니다. 위성에 탑재된 카메라가 지리적 위치를 촬영할 수 있는 시간은 액세스 분석을 통해 확인하였습니다. 또한 시스템 전체의 액세스 비율을 계산하여 6시간 동안 적어도 하나의 위성이 해당 위치를 촬영할 수 있는 시간의 비율을 구했습니다. 그 결과는 카메라가 가리키는 방향에 따라 달라지는 것으로 나타났습니다.

이러한 결과는 또한 다음과 같은 요소들의 함수이기도 합니다.

  • 위성의 궤도

  • 지리적 위치의 MinElevationAngle

  • 위성을 기준으로 한 카메라의 장착 위치와 배치

  • 카메라가 지리적 위치를 지속적으로 향하고 있지 않은 경우 카메라의 시야(MaxViewAngle)

위의 파라미터를 자신의 요구 사항에 맞게 수정한 다음 액세스 구간과 시스템 전체의 액세스 비율에 미치는 영향을 관측해 보십시오. satellite를 사용하여 케플러 궤도 요소를 명시적으로 지정하면 위성의 궤도를 변경할 수 있습니다. 또한 카메라를 gimbals에 장착하여 위성과 독립적으로 회전시킬 수 있습니다. 이렇게 하면 위성은 똑바로 아래를 향하고(디폴트 동작), 카메라만 독립적으로 지리적 위치를 추적하도록 짐벌을 구성할 수 있습니다.

참고 항목

| | | |