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

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

Функции

Похожие темы