В этом примере показано, как визуализировать взлет самолета и вертолет преследования с объектом Animation виртуальной реальности. В этом примере можно использовать Aero.VirtualRealityAnimation object, чтобы настроить анимацию виртуальной реальности на основе 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 = 0; 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.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
метод запускает симуляцию для заданных данных о 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.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'
свойство объекта Animation. Чтобы поднять исходный мир, установите 'VRWorldFilename'
к настоящему имени и переинициализации его.
h.VRWorldFilename = h.VRWorldOldFilename{1}; h.initialize();
Закройте и удалите мир
Закрыться и delete
h.delete();
Aero.Node
| Aero.Viewpoint
| Aero.VirtualRealityAnimation