주요 콘텐츠

Simulink로 trackingArchitecture 내보내기

R2022a 이후

이 예제에서는 trackingArchitecture 객체를 정의하는 방법과 이 객체를 Simulink로 내보내는 방법을 보여줍니다.

소개

이 예제에서는 여러 검출 수준의 다중 객체 추적기와 트랙 융합기가 포함된 아키텍처를 만듭니다. MATLAB에서 trackingArchitecture 객체를 사용하여 아키텍처를 만들고 trackingArchitecture 객체의 exportToSimulink 객체 함수를 사용하여 Simulink 모델의 Subsystem (Simulink)으로 해당 아키텍처를 내보냅니다. 아키텍처를 추적 시나리오에 연결하고 추적 아키텍처를 실행하고 Simulink의 trackOSPAMetric 블록을 사용하여 추적 성능을 평가합니다.

아키텍처를 만들어 Simulink로 내보내기

2개의 추적기와 1개의 트랙 간 융합기가 포함된 추적 아키텍처를 만듭니다. 첫 번째 추적기는 단일 센서로부터 검출 결과를 받습니다. 두 번째 추적기는 2개의 센서로부터 검출 결과를 받습니다. 아키텍처에는 두 추적기에서의 트랙을 융합하고 융합된 트랙을 출력하기 위한 트랙 융합기도 포함되어 있습니다. trackerGNN 객체와 trackerJPDA 객체를 각각 사용하여 첫 번째 추적기와 두 번째 추적기를 구현합니다. trackFuser 객체를 사용하여 트랙 간 융합기를 구현합니다.

% Define tracking architecture.
ta = trackingArchitecture(ArchitectureName="TrackingSystem");

% Create a sensor-level tracker.
sensorTracker = trackerGNN(TrackerIndex=1, ...
    FilterInitializationFcn=@initcvekf, ...
    AssignmentThreshold=50, ...
    ConfirmationThreshold=[2 3], ...
    DeletionThreshold=[5,5]);
addTracker(ta,sensorTracker,SensorIndices=1,ToOutput=false,Name="Sensor Tracker");

% Create another tracker that accepts detections from two sensors.
tracker = trackerJPDA(TrackerIndex=2, ...
    AssignmentThreshold=50, ...
    ConfirmationThreshold=[2 3], ...
    TrackLogic="History");
addTracker(ta,tracker,SensorIndices=[2,3],ToOutput=false,Name="Tracker");

% Define the track fuser.
fuser = trackFuser(FuserIndex=3, ...  % Identify fuser.
    MaxNumSources=2, ...
    StateFusion="Cross");  % Fuser accepts tracks from 2 sources.
addTrackFuser(ta,fuser,Name="Track Fuser");

아키텍처의 요약을 표시합니다.

summary(ta)
ans=3×4 table
           System            ArchitectureInputs       FuserInputs        ArchitectureOutput
    _____________________    __________________    __________________    __________________

    {'T1:Sensor Tracker'}        {'1'     }        {'Not applicable'}       {0×0 double}   
    {'T2:Tracker'       }        {'2  3'  }        {'Not applicable'}       {0×0 double}   
    {'F3:Track Fuser'   }        {0×0 char}        {'1  2'          }       {[       1]}   

MATLAB Figure에서 아키텍처를 시각화합니다.

show(ta);
f = gcf;
f.Position = [680 153 915 825];

Figure contains an axes object. The axes object with title Tracking Architecture: TrackingSystem contains 29 objects of type rectangle, text, line, patch.

아키텍처를 Simulink로 내보냅니다.

model = exportToSimulink(ta);

exportToSimulink 객체 함수는 trackingArchitecture를 Simulink에서 Subsystem (Simulink)으로 내보냅니다. 서브시스템에는 각 아키텍처 입력과 예측 시간을 위한 입력 포트뿐만 아니라 아키텍처 출력을 위한 출력 포트도 포함되어 있습니다.

archSubsystem.PNG

내보낸 서브시스템을 더블 클릭하여 열고 포함된 블록을 시각화할 수 있습니다. 서브시스템은 아키텍처의 각 추적기 또는 트랙 융합기에 대해 동등한 블록을 포함하고 있습니다. 블록 파라미터도 추적기 또는 트랙 융합기 객체의 속성과 동일하게 구성됩니다. 서브시스템에는 2개의 블록(Detection Concatenation 블록과 Track Concatenation 블록)이 추가적으로 포함되어 있습니다. Detection Concatenation 블록은 추적기에 둘 이상의 입력 소스가 있는 경우 필요합니다. 마찬가지로, Track Concatenation 블록은 트랙 융합기에 둘 이상의 입력 소스가 있는 경우 필요합니다. 내보낸 후에는 모델이 trackingArchitecture 객체로부터 독립됩니다.

입력을 추적 아키텍처 서브시스템에 연결하고 모델이 아키텍처를 실행하도록 시뮬레이션할 수 있습니다. helperSetupArchitectureModel 함수를 사용하여 입력을 아키텍처에 연결하고 모델의 나머지 부분을 구성합니다.

helperSetupArchitectureModel(ta,model)

구성된 모델에서, Tracking Scenario Reader 블록은 MATLAB 작업 공간에서 trackingScenario 객체를 읽어오고 Simulink에서 시뮬레이션 데이터를 생성합니다.

블록은 단일 Simulink Bus Capabilities (Simulink)에서 시나리오의 모든 센서로부터 검출을 생성하는 반면에 아키텍처 서브시스템은 각 센서의 검출 버스 입력이 따로 필요합니다. 각 센서의 검출을 별도의 출력 버스로 분리하기 위해 헬퍼 블록 Helper Detection Selector를 사용합니다. 이 헬퍼 블록은 MATLAB System (Simulink) 블록을 사용하여 구현되며 예제 폴더에 저장된 HelperDetectionSelector 클래스에 정의되어 있습니다. 아키텍처 서브시스템은 검출과 예측 시간을 입력으로 받고 트랙을 출력으로 생성합니다.

추적 아키텍처의 성능을 평가하려면 Optimal Subpattern Assignment Metric 블록을 사용합니다. OSPA 메트릭은 여러 오차 성분을 결합하여 얻은 스칼라 비용 값을 통해 추적 시스템의 성능을 평가합니다. OSPA 값이 낮을수록 추적 성능이 더 좋습니다. 자세한 내용은 trackOSPAMetric 항목을 참조하십시오. Scope (Simulink) 블록을 사용하여 OSPA 메트릭 결과를 시각화합니다.

% Simulate the model
sim(model);

위의 그림에서 OSPA 메트릭이 몇 스텝 후에 내려가는 것을 볼 수 있습니다. OSPA 메트릭의 초기값은 각 트랙에 대한 설정 지연으로 인해 더 높습니다.

close_system(model,0);

요약

이 예제에서는 추적 아키텍처를 정의하는 방법과 추적 아키텍처를 Simulink 모델로 내보내는 방법을 알아보았습니다. 또한 Simulink에서 OSPA 메트릭을 사용하여 아키텍처의 성능을 평가하는 방법도 알아보았습니다.