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

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

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

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

После того, как вы откроете объект 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

Смотрите также

Функции

Похожие темы