이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
virtual reality animation 객체를 통한 항공기 이륙 시각화
이 예제는 virtual reality animation 객체를 사용하여 항공기 이륙과 추격 헬리콥터를 시각화하는 방법을 보여줍니다. 이 예제에서는 Aero.VirtualRealityAnimation 객체를 사용하여 asttkoff.wrl 파일을 기반으로 가상 현실 애니메이션을 설정할 수 있습니다. 해당 장면은 항공기 이륙을 시뮬레이션합니다. 이 예제는 시뮬레이션에 추적 비행체를 추가하고, 새로 추가된 비행체와 연관된 추적 시점을 생성합니다.
참고: 이 예제는 MATLAB Online에서 지원되지 않습니다.
animation 객체 생성
이 코드는 Aero.VirtualRealityAnimation 객체의 인스턴스를 생성합니다.
h = Aero.VirtualRealityAnimation;
animation 객체 속성 설정
아래 코드는 초당 프레임 수와 애니메이션 데이터의 초당 시간 스케일링을 설정합니다. 'FramesPerSecond'는 Figure 창에 프레임이 표시되는 속도를 제어합니다. 'TimeScaling'은 애니메이션 데이터의 초당 시간 스케일링을 나타냅니다.
'TimeScaling' 및 'FramesPerSecond' 속성은 시뮬레이션의 시간 스텝을 결정합니다. 이 예제의 설정은 약 0.5초의 시간 스텝을 생성합니다. 방정식은 다음과 같습니다:
(1/FramesPerSecond)*TimeScaling + 초 미만의 정밀도를 처리하기 위한 추가 항들.
h.FramesPerSecond = 10; h.TimeScaling = 5;
아래 코드는 가상 현실 애니메이션에 사용될 .wrl 파일을 설정합니다.
h.VRWorldFilename = "asttkoff.wrl";virtual reality animation 객체 초기화
initialize 메서드는 animation 객체의 'VRWorldFilename' 필드에 정의된 애니메이션 세계를 로드합니다. 세계를 파싱할 때, DEF 이름을 가진 기존 노드에 대해 node 객체가 생성됩니다. initialize 메서드는 또한 Simulink 3D Animation 뷰어를 엽니다.
h.initialize();

추가 노드 정보 설정
아래 코드는 시뮬레이션 시계열 데이터를 설정합니다. takeoffData.mat에는 로그 처리된 시뮬레이션 데이터가 포함됩니다. takeoffData는 기본 데이터 형식 중 하나인 'StructureWithTime'로 설정됩니다.
load takeoffData [~, idxPlane] = find(strcmp('Plane', h.nodeInfo)); h.Nodes{idxPlane}.TimeseriesSource = takeoffData; h.Nodes{idxPlane}.TimeseriesSourceType = 'StructureWithTime';
좌표 변환 함수 설정
virtual reality animation 객체는 항공우주 기체 좌표계에서의 위치와 회전 데이터를 필요로 합니다. 입력 데이터가 다를 경우, 가상 세계 내 주변 객체들과 위치 및 회전 데이터를 정확히 정렬하기 위해 좌표 변환 함수를 생성해야 합니다. 아래 코드는 가상 현실 애니메이션의 좌표 변환 함수를 설정합니다.
이 특정 경우에서 입력 평행 이동 좌표가 [x1,y1,z1]인 경우, 다음과 같이 조정해야 합니다: [X,Y,Z] = -[y1,x1,z1].
사용자 지정 변환 함수는 vranimCustomTransform.m 파일에서 확인할 수 있습니다.
h.Nodes{idxPlane}.CoordTransformFcn = @vranimCustomTransform;추격 헬리콥터 추가
아래 코드는 animation 객체에 추격 헬리콥터를 추가하는 방법을 보여줍니다.
nodeInfo 메서드를 사용하여 virtual reality animation 객체에 현재 존재하는 모든 노드를 확인할 수 있습니다. 출력 인수를 지정하지 않고 호출하면, 이 메서드는 노드 정보를 명령 창에 출력합니다. 출력 인수를 사용하여 메서드는 노드 정보를 해당 인수로 설정합니다.
h.nodeInfo;
Node Information 1 Camera1 2 Plane 3 _V2 4 Block 5 Terminal 6 _v3 7 Lighthouse 8 _v1
아래 코드는 가상 현실 인물의 카메라 각도를 이동시켜 항공기를 볼 수 있도록 합니다.
set(h.VRFigure,'CameraDirection',[0.45 0 -1]);addNode 메서드를 사용하여 객체에 다른 노드를 추가합니다. 기본적으로 노드나 경로를 추가하거나 제거할 때마다, 또는 saveas 메서드를 호출할 때마다 Aerospace Toolbox는 현재 .wrl 파일 위치에 대한 메시지를 표시합니다. 이 메시지를 비활성화하려면 VirtualRealityAnimation 객체에서 'ShowSaveWarning' 속성을 설정하십시오.
h.ShowSaveWarning = 0; h.addNode('Lynx',fullfile(pwd,"chaseHelicopter.wrl"));

nodeInfo에 대한 또 다른 호출은 새로 추가된 node 객체들을 보여줍니다.
h.nodeInfo
Node Information 1 Camera1 2 Plane 3 _V2 4 Block 5 Terminal 6 _v3 7 Lighthouse 8 _v1 9 Lynx 10 Lynx_Inline
새로 추가된 헬리콥터가 활주로 위에 놓이도록 조정합니다.
[~, idxLynx] = find(strcmp('Lynx',h.nodeInfo));
h.Nodes{idxLynx}.VRNode.translation = [0 1.5 0];아래 코드는 추격 헬리콥터의 데이터 속성을 설정합니다. 'TimeseriesSourceType'이 디폴트 값인 'Array6DoF'이므로 추가 속성 변경이 필요하지 않습니다. 이 노드에는 이전 노드와 동일한 좌표 변환 함수(vranimCustomTransform)가 사용됩니다. 이전 nodeInfo 호출은 노드 인덱스(2)를 반환했습니다.
load chaseData
h.Nodes{idxLynx}.TimeseriesSource = chaseData;
h.Nodes{idxLynx}.CoordTransformFcn = @vranimCustomTransform;새로운 시점 생성
아래 코드는 addViewpoint 메서드를 사용하여 'chaseView'라는 새 시점을 생성합니다. 새로운 시점은 가상 현실 창 내 시점 풀다운 메뉴에 "View From Helicopter"로 표시됩니다. nodeInfo에 대한 또 다른 호출은 새로 추가된 node 객체들을 보여줍니다. 해당 노드는 추격 헬리콥터의 자식으로 생성됩니다.
h.addViewpoint(h.Nodes{idxLynx}.VRNode,'children','chaseView','View From Helicopter');
애니메이션 재생
play 메서드는 지정된 시계열 데이터에 대해 시뮬레이션을 실행합니다.
h.play();
기다리기
객체를 수정하기 전에 애니메이션이 재생을 멈출 때까지 기다립니다.
h.wait();
헬리콥터에서 애니메이션 재생
아래 코드는 시점의 node 객체와 연관된 vrnode 객체를 통해 시점의 방향을 설정합니다. 이 경우 시점을 변경하여 헬리콥터의 왼쪽 측면을 통해 비행기를 바라보게 됩니다.
[~, idxChaseView] = find(strcmp('chaseView',h.nodeInfo)); h.Nodes{idxChaseView}.VRNode.orientation = [0 1 0 convang(200,'deg','rad')]; set(h.VRFigure,'Viewpoint','View From Helicopter');

경로 추가
아래 코드는 addRoute 메서드를 호출하여 비행기 위치를 Camera1 노드에 연결하는 ROUTE 명령을 추가합니다. 이렇게 하면 "Ride on the Plane" 시점이 의도된 대로 작동할 수 있게 됩니다.
h.addRoute('Plane','translation','Camera1','translation');

아래 코드는 애니메이션을 재생합니다.
h.play(); h.wait();
다른 기체 추가
이 코드는 장면에 헬리콥터 하나를 추가합니다. 또한 장면 속 세 개의 기체를 한 번에 모두 볼 수 있도록 다른 시점으로 전환됩니다.
set(h.VRFigure,'Viewpoint','See Whole Trajectory'); h.addNode('Lynx1',"chaseHelicopter.wrl");

h.nodeInfo
Node Information 1 Camera1 2 Plane 3 _V2 4 Block 5 Terminal 6 _v3 7 Lighthouse 8 _v1 9 Lynx 10 Lynx_Inline 11 chaseView 12 Lynx1 13 Lynx1_Inline
새로 추가된 헬리콥터가 활주로 위에 떠 있도록 조정합니다.
[~, idxLynx1] = find(strcmp('Lynx1',h.nodeInfo));
h.Nodes{idxLynx1}.VRNode.translation = [0 1.3 0];기체 제거
이 코드는 두 번째 헬리콥터를 제거하기 위해 removeNode 메서드를 사용합니다. removeNode는 노드 이름 또는 노드 인덱스(nodeInfo에서 얻은 값)를 인수로 받습니다. 관련된 인라인 노드도 함께 제거됩니다.
h.removeNode('Lynx1');
h.nodeInfo
Node Information 1 Camera1 2 Plane 3 _V2 4 Block 5 Terminal 6 _v3 7 Lighthouse 8 _v1 9 Lynx 10 Lynx_Inline 11 chaseView
원래 세계로 되돌리기
원본 파일명은 animation 객체의 'VRWorldOldFilename' 속성에 저장됩니다. 원래 세계를 불러오려면 'VRWorldFilename'를 원래 이름으로 설정하고 재초기화하십시오.
h.VRWorldFilename = h.VRWorldOldFilename{1};
h.initialize();
세계 닫기 및 삭제
닫고 delete합니다.
h.delete();
참고 항목
Aero.Node | Aero.Viewpoint | Aero.VirtualRealityAnimation