Визуализируйте Взлет Самолета через Объект 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();
Для просмотра документации необходимо авторизоваться на сайте