Взаимодействие с виртуальным миром с MATLAB

Установите значения для узлов

В жизненном цикле vrworld Объект можно задать новые значения для всех доступных узлов виртуального мира и их полей с помощью vrnode методы объекта. Таким образом, вы можете изменять и управлять степенями свободы для виртуального мира из MATLAB® окружение.

Объект типа vrworld содержит узлы с именами в файле 3D виртуального мира с помощью оператора DEF. Эти узлы имеют тип vrnode. Для получения дополнительной информации см. vrworld и vrnode функций.

После того, как вы откроете vrworld объект, можно получить список доступных узлов в виртуальном мире. Эта процедура использует vrworld myworld объекта и виртуальный мир vrmount.wrl в качестве примера. Как создать myworld, см. «Создание объекта vrworld для виртуального мира».

  1. В Командном Окне 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]
    
  2. Напечатать

    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]
    
  3. Напечатать

    whos
    

    Командное окно MATLAB отображает сообщения

    Name          Size                    Bytes  Class
    
      ans           1x1                       132  vrfigure object
      mynodes      13x1                      3564  vrnode object
      myworld       1x1                       132  vrworld object
    

    Теперь можно получить характеристики узла и задать новые значения для определенных свойств узла. Например, вы можете изменить положение автомобиля при помощи Automobile, который является четвертым узлом в виртуальном мире.

  4. Доступ к полям 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] объекта.

  5. Напечатать

    view(myworld)
    

    Ваше средство просмотра по умолчанию откроется и отобразит виртуальный мир vrmount.wrl.

  6. Переместите окно MATLAB и окно браузера один за другим, чтобы можно было одновременно просматривать оба окна. В Командном Окне MATLAB введите

    myworld.Automobile.translation = [15 0.25 20];
    

    MATLAB устанавливает новую должность для Automobile узел. Можно заметить, что машина переопределена в окне браузера виртуального мира.

Вы можете изменить поля узла в списке с помощью функции vrnode/setfield.

Примечание

Запись через точку является предпочтительным способом доступа к узлам.

Чтение значений датчика с помощью MATLAB

Чтение значения считываемого поля (либо exposedField или eventOut), сначала синхронизируйте это поле с vrnode/sync способ. После синхронизации каждый раз, когда поле изменяется в сцене, значение поля обновляется на хосте. Затем вы можете считать значение поля с vrnode/getfield метод или прямой доступ к значению поля с помощью записи через точку.

Виртуальная сцена для примера модели магнитного левитации, maglev.wrl, содержит PlaneSensor (с DEF имя 'Grab_Sensor'). PlaneSensor присоединен к геометрии мяча, чтобы зарегистрировать ваши попытки переместить мяч вверх или вниз при захвате его с помощью мыши. В примере используются поля датчика minPosition и maxPosition ограничить движение в других направлениях. Можно использовать выход поля преобразования датчика как новую уставку для контроллера положения мяча. Можно считать значение выхода датчика в Переменный MATLAB уставку.

  1. Создайте объект vrworld и откройте мир.

    wh = vrworld('maglev.wrl');
    open(wh);
  2. Получите указатель на узел.

    nh = vrnode(wh, 'Grab_Sensor');
  3. Синхронизируйте поле перевода.

    sync(nh, 'translation', 'on');
  4. Считайте синхронизированное значение поля, используя одну из трех альтернативных возможностей:

    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

См. также

Функции

Похожие темы