В жизненном цикле объекта vrworld
можно установить новые значения для всех доступных узлов виртуального мира и их полей с помощью методов объекта vrnode
. Таким образом, можно изменить и управлять степенями свободы для виртуального мира из среды MATLAB®.
Объект типа vrworld
содержит узлы, названные в виртуальном мире 3D файл с помощью оператора DEF. Эти узлы имеют тип vrnode
. Для получения дополнительной информации смотрите функции vrnode
и vrworld
.
После того, как вы откроете объект 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