exponenta event banner

Визуализация взлета самолета с помощью анимационного объекта виртуальной реальности

В этом примере показано, как визуализировать взлет самолета и захват вертолета с помощью объекта анимации виртуальной реальности. В этом примере для настройки анимации виртуальной реальности на основе файла asttkoff.wrl можно использовать объект Aero.VirtityAnimation. Сцена имитирует взлет самолета. В этом примере к моделированию добавляется транспортное средство для погона и точка обзора, связанная с новым транспортным средством.

Создание объекта анимации

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

h = Aero.VirtualRealityAnimation;

Задание свойств объекта анимации

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

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

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

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

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

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

Изменить каталог

Для отслеживания изменений в мире в объектных методах VirtureSharingAnimation используются временные файлы .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'];

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

initialize загружает анимационный мир, описанный в 'VRWorldFilename' поле объекта анимации. При анализе мира объекты узла создаются для существующих узлов с именами DEF. 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';

Задать функцию преобразования координат

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

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

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

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

В этом коде показано, как добавить вертолет погона к анимационному объекту.

Все узлы, находящиеся в данный момент в объекте анимации виртуальной реальности, можно просмотреть с помощью 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' в объекте VirtityTalkAnimation.

h.ShowSaveWarning = 0;
h.addNode('Lynx',[matlabroot,'/toolbox/aero/astdemos/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. Новая точка обзора появится в раскрывающемся меню точки обзора в окне виртуальной реальности как «Вид с вертолета». Еще один звонок nodeInfo показывает вновь добавленные объекты узла. Узел создается как дочерний элемент вертолета.

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

Воспроизведение анимации

play метод запускает моделирование для указанных данных временных интервалов.

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 метод добавления команды ROUTE для соединения положения плоскости с узлом Camera1. Это позволит точке обзора «Ride on the Plane» функционировать по назначению.

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.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

Вернуться к оригинальному миру

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

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

Закрыть и удалить мир

Закрытие и delete

h.delete();