Визуализируйте Взлет Самолета через Объект Animation Виртуальной реальности

Этот пример показывает, как визуализировать взлет самолета и вертолет преследования с объектом Animation виртуальной реальности. В этом примере можно использовать Аэро. Объект VirtualRealityAnimation настроить анимацию виртуальной реальности на основе asttkoff.wrl файла. Сцена моделирует взлет самолета. Пример добавляет автомобиль преследования в симуляцию и точку зрения преследования, сопоставленную с новым автомобилем.

Создайте объект Animation

Этот код создает экземпляр объекта Aero.VirtualRealityAnimation.

h = Aero.VirtualRealityAnimation;

Установите свойства объекта Animation

Это кодовые наборы количество кадров в секунду и секунды данных анимации в секунду время, масштабируясь. 'FramesPerSecond' управляет уровнем, на котором кадры отображены в окне рисунка. 'TimeScaling' является секундами данных анимации в секунду время, масштабируясь.

Свойства 'TimeScaling' и 'FramesPerSecond' определяют временной шаг симуляции. Настройки в этом примере приводят к временному шагу приблизительно 0,5 с. Уравнение:

(1/FramesPerSecond) *TimeScaling + дополнительные условия, чтобы обработать для подвторой точности.

h.FramesPerSecond = 10;
h.TimeScaling = 5;

Это кодовые наборы .wrl файл, который будет использоваться в анимации виртуальной реальности.

h.VRWorldFilename = [matlabroot,'/toolbox/aero/astdemos/asttkoff.wrl'];

Измените директорию

Методы объекта VirtualRealityAnimation используют временные .wrl файлы, чтобы отслеживать изменения в мире. Это требует, чтобы директория, содержащая исходный .wrl файл, была перезаписываема. Этот код запускает пример из временной директории, чтобы гарантировать, что нет никаких проблем с полномочиями директории. Отметьте, лицензия на Simulink® 3D Animation™ требуется запустить этот пример.

% Copy file to temporary directory
copyfile(h.VRWorldFilename,[tempdir,'asttkoff.wrl'],'f');
% Set world filename to the copied .wrl file.
h.VRWorldFilename = [tempdir,'asttkoff.wrl'];

Инициализируйте объект Animation виртуальной реальности

Метод initialize загружает мир анимации, описанный в поле 'VRWorldFilename' объекта Animation. При парсинге мира объекты узла создаются для существующих узлов с именами DEF. Метод initialize также открывает средство просмотра Simulink 3D Animation.

h.initialize();

Установите дополнительную информацию об узле

Эти данные о timeseries симуляции кодовых наборов. takeoffData.mat содержит регистрируемые моделируемые данные. takeoffData настраивается как 'StructureWithTime', который является одним из форматов данных по умолчанию.

load takeoffData
[~, idxPlane] = find(strcmp('Plane', h.nodeInfo));
h.Nodes{idxPlane}.TimeseriesSource = takeoffData;
h.Nodes{idxPlane}.TimeseriesSourceType = 'StructureWithTime';

Координата набора преобразовывает функцию

Объект Animation виртуальной реальности ожидает положения и вращения в космических координатах тела. Если входные данные отличаются, необходимо создать координатную функцию преобразования по порядку, чтобы правильно выстроить в линию положение и данные о вращении с окружающими объектами в виртуальном мире. Это кодовые наборы координатное преобразование функционирует для анимации виртуальной реальности.

В данном случае, если входные координаты перемещения [x1, y1, z1], они должны быть настроены можно следующим образом: [X, Y, Z] = - [y1, x1, z1]. Пользовательские преобразовывают функцию, видны здесь: matlabroot/toolbox/aero/astdemos/vranimCustomTransform.m

h.Nodes{idxPlane}.CoordTransformFcn = @vranimCustomTransform;

Добавьте вертолет преследования

Этот код показывает, как добавить вертолет преследования в объект Animation.

Можно просмотреть все узлы в настоящее время в объекте Animation виртуальной реальности при помощи метода nodeInfo. Когда названо без выходного аргумента, этот метод распечатывает информацию об узле к командному окну. С выходным аргументом метод устанавливает информацию об узле на тот аргумент.

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 расположении файла. Чтобы отключить это сообщение, установите свойство 'ShowSaveWarning' в объекте VirtualRealityAnimation.

h.ShowSaveWarning = false;
h.addNode('Lynx',[matlabroot,'/toolbox/aero/astdemos/chaseHelicopter.wrl']);

Другой вызов nodeInfo показывает недавно добавленные Объекты узла.

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.Node{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'. Новая точка зрения появится в выпадающем меню точки зрения в окне виртуальной реальности как "Представление От Вертолета". Другой вызов nodeInfo показывает недавно добавленные объекты узла. Узел создается как дочерний элемент вертолета преследования.

h.addViewpoint(h.Nodes{idxLynx}.VRNode,'children','chaseView','View From Helicopter');

Проигрывайте анимацию

Метод play запускает симуляцию для заданных данных о timeseries.

h.play();

Проигрывайте анимацию от вертолета

Это кодовые наборы ориентация точки зрения через объект 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. Это будет допускать "Поездку на Плоской" точке зрения функционировать, как предназначено.

h.addRoute('Plane','translation','Camera1','translation');

Сцена с вертолетной точки зрения

Этот код проигрывает анимацию.

h.play();

Добавьте другое тело

Этот код добавляет другой вертолет в сцену. Это также изменяется на другую точку зрения просмотреть все три тела в сцене целиком.

set(h.VRFigure,'Viewpoint','See Whole Trajectory');
h.addNode('Lynx1',[matlabroot,'/toolbox/aero/astdemos/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.Node{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

Вернитесь к исходному миру

Исходное имя файла хранится в свойстве 'VRWorldOldFilename' объекта Animation. Чтобы поднять исходный мир, установите 'VRWorldFilename' на настоящее имя и переинициализацию его.

h.VRWorldFilename = h.VRWorldOldFilename{1};
h.initialize();

Закройте и удалите мир

Закрыться и delete

h.delete();