exponenta event banner

Взаимодействие с виртуальным миром с помощью 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       
    

    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

См. также

Функции

Связанные темы