Этот пример показывает, как визуализировать взлет самолета и вертолет преследования с объектом Animation виртуальной реальности. В этом примере можно использовать Аэро. Объект VirtualRealityAnimation настроить анимацию виртуальной реальности на основе asttkoff.wrl файла. Сцена моделирует взлет самолета. Пример добавляет автомобиль преследования в симуляцию и точку зрения преследования, сопоставленную с новым автомобилем.
Этот код создает экземпляр объекта 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'];
Методы объекта 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'];
Метод 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();