В жизненном цикле vrworld можно задать новые значения для всех доступных узлов виртуального мира и их полей с помощью vrnode объектные методы. Таким образом, можно изменять и управлять степенями свободы виртуального мира из среды MATLAB ®.
Объект типа vrworld содержит узлы, именованные в файле 3D виртуального мира с помощью инструкции DEF. Эти узлы имеют тип vrnode. Дополнительные сведения см. в разделе vrworld и vrnode функции.
После открытия vrworld можно получить список доступных узлов в виртуальном мире. В этой процедуре используется vrworld объект myworld и виртуальный мир vrmount.wrl в качестве примера. Для создания myworld, см. раздел Создание объекта vrworld для виртуального мира.
В окне команды MATLAB введите
nodes(myworld);
В окне команды MATLAB отображается список vrnode объекты и их поля, доступные из программного обеспечения Simulink ® 3D Animation™.
Tunnel (Transform) [My first virtual world] Road (Shape) [My first virtual world] Bridge (Shape) [My first virtual world] River (Shape) [My first virtual world] ElevApp (Appearance) [My first virtual world] Canal (Shape) [My first virtual world] Wood (Group) [My first virtual world] Tree1 (Group) [My first virtual world] Wheel (Shape) [My first virtual world] Automobile (Transform) [My first virtual world] VPfollow (Viewpoint) [My first virtual world] Camera_car (Transform) [My first virtual world] View1 (Viewpoint) [My first virtual world]
Напечатать
mynodes = get(myworld, 'Nodes')
Программное обеспечение MATLAB создает массив vrnode объекты, соответствующие виртуальным мировым узлам и дисплеям
mynodes = vrnode object: 13-by-1 Tunnel (Transform) [My first virtual world] Road (Shape) [My first virtual world] Bridge (Shape) [My first virtual world] River (Shape) [My first virtual world] ElevApp (Appearance) [My first virtual world] Canal (Shape) [My first virtual world] Wood (Group) [My first virtual world] Tree1 (Group) [My first virtual world] Wheel (Shape) [My first virtual world] Automobile (Transform) [My first virtual world] VPfollow (Viewpoint) [My first virtual world] Camera_car (Transform) [My first virtual world] View1 (Viewpoint) [My first virtual world]
Напечатать
whos
В окне команд MATLAB отображаются сообщения
Name Size Bytes Class ans 1x1 132 vrfigure object mynodes 13x1 3564 vrnode object myworld 1x1 132 vrworld object
Теперь можно получить признаки узла и задать новые значения для определенных свойств узла. Например, можно изменить положение автомобиля с помощью Automobile, который является четвертым узлом в виртуальном мире.
Доступ к полям Automobile узел путем ввода
fields(myworld.Automobile)
или
fields(mynodes(10));
В окне команды MATLAB отображается информация о Automobile узел.
Field Access Type Sync ----------------------------------------------------------- addChildren eventIn MFNode off removeChildren eventIn MFNode off children exposedField MFNode off center exposedField SFVec3f off rotation exposedField SFRotation off scale exposedField SFVec3f off scaleOrientation exposedField SFRotation off translation exposedField SFVec3f off bboxCenter field SFVec3f off bboxSize field SFVec3f off
Automobile узел имеет тип Transform. Этот узел позволяет изменить его положение, изменив его translation значения полей. Из списка можно увидеть, что translation требуется три значения, представляющие координаты [x y z] объекта.
Напечатать
view(myworld)
Средство просмотра по умолчанию открывает и отображает виртуальный мир vrmount.wrl.
Перемещайте окно MATLAB и окно браузера бок о бок, чтобы можно было просматривать оба окна одновременно. В окне команды MATLAB введите
myworld.Automobile.translation = [15 0.25 20];
MATLAB устанавливает новую позицию для Automobile узел. Можно заметить, что автомобиль переставлен в окне браузера виртуального мира.
Можно изменить перечисленные поля узлов с помощью функции. vrnode/setfield.
Примечание
Точечная нотация является предпочтительным способом доступа к узлам.
Чтение значения читаемого поля (либо exposedField или eventOut), сначала синхронизируйте это поле с vrnode/sync способ. После синхронизации при каждом изменении поля в сцене значение поля обновляется на хосте. Затем можно прочитать значение поля с помощью vrnode/getfield или прямой доступ к значению поля с помощью точечной нотации.
Виртуальная сцена для примера Магнитная модель левитации, maglev.wrl, содержит датчик PlaneSensor (с DEF имя 'Grab_Sensor'). PlaneSensor прикрепляется к геометрии шарика для регистрации попыток перемещения шарика вверх или вниз при захвате его с помощью мыши. В примере используются поля датчика. minPosition и maxPosition ограничить движение в других направлениях. В качестве новой уставки для контроллера положения шарика можно использовать вывод поля перемещения датчика. Можно считывать выходное значение датчика в переменную уставку MATLAB.
Создайте объект vrworld и откройте мир.
wh = vrworld('maglev.wrl');
open(wh);Получите дескриптор узла.
nh = vrnode(wh, 'Grab_Sensor');Синхронизировать поле перевода.
sync(nh, 'translation', 'on');
Прочтите значение синхронизированного поля, используя один из трех вариантов:
setpoint = getfield(nh, 'translation');
setpoint = nh.translation;
setpoint = wh.Grab_Sensor.translation;
Значения поворота и перемещения для Transform задаются в локальных координатах относительно родительского объекта объекта. Simulink 3D Animation предоставляет два расширения для преобразования значений поворота и перемещения в глобальные координаты: rotation_abs и translation_abs. Для доступа к этим глобальным координатам используйте точечную нотацию с полем перемещения или поворота, добавляя _abs к имени поля. В этом примере показано различие между локальными и глобальными координатами для перевода:
w = vrview('vrmanipul.wrl'); n = get(w,'Nodes'); n = w.Grip_Reference; n.translation n.translation_abs
ans =
0 -0.1000 0
ans =
-3.0406 -3.0000 2.3334