В жизненном цикле 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
The 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