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