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