exponenta event banner

Обнаружение конфликтов объектов

Обнаружение столкновений можно использовать для точного моделирования физических ограничений объектов в реальном мире, чтобы избежать одновременного размещения двух объектов в одном и том же месте. Выходные данные узла обнаружения коллизий можно использовать для:

  • Изменение состояния других узлов виртуального мира.

  • Применение алгоритмов MATLAB ® к данным коллизий.

  • Приводите модели Simulink ®.

Например, можно использовать геометрические датчики для робототехнического моделирования. Примеры использования обнаружения столкновений см. в разделе vrcollisions и vrmaze.

Настройка обнаружения коллизий

Чтобы настроить обнаружение столкновений, определите датчики столкновений (захвата), которые обнаруживают, когда они сталкиваются с целевыми окружающими объектами сцены. Датчики виртуального мира напоминают датчики реального мира, такие как ультразвуковые, лидарные и сенсорные датчики. 3D датчики Animation™ Simulink основаны на датчиках X3D (также поддержанный для VRML), как описано в X3D, выбирающем составляющую спецификацию. Описание выходных свойств датчика выбора, к которым можно получить доступ с помощью блоков источника VR и приемника VR, см. в разделе Использование данных обнаружения коллизий в моделях.

  • PointPickSensor - Облака точек, которые обнаруживают, какая из точек находится внутри сталкивающейся геометрии

  • LinePickSensor - вентиляторы лучей или другие наборы линий, которые определяют расстояние до сопряженных геометрий;

  • PrimitivePickSensor - примитивные геометрии (такие как конус, сфера или коробка), которые обнаруживают конфликтующие геометрии;

Чтобы добавить датчик обнаружения столкновений, выполните следующие общие действия. Пример, отражающий этот рабочий процесс, см. в разделе vrcollisions.

  1. На панели структуры дерева Редактора мира 3D выберите children узел Transform узел, к которому требуется добавить датчик комплектации.

  2. Чтобы создать геометрию комплектации для использования с датчиком, добавьте geometry узел. Выберите Узлы (Nodes) > Добавить (Add) > Геометрия (Geometry) и выберите геометрию, соответствующую типу датчика выбора (например, набор точек).

  3. Добавьте узел датчика выбора, выбрав Узлы > Добавить > Выбрать узел датчика.

  4. В узле датчика щелкните правой кнопкой мыши значок pickingGeometry и выберите USE. Укажите geometry узел, созданный для датчика.

  5. Также в узле датчика щелкните правой кнопкой мыши pickingTarget и выберите USE. Укажите целевые объекты, для которых датчик должен обнаруживать коллизии.

    Вместо задания геометрии комплектации с помощью USE можно определить геометрию комплектации напрямую. Однако непосредственно определенная геометрия невидима.

  6. При необходимости измените значения свойств по умолчанию или укажите другие значения свойств датчика. Для получения информации о intersectionTypeсм. раздел Коллизии датчиков с несколькими целями выбора объектов. Описание выходных свойств, к которым можно получить доступ с помощью блока источника VR, см. в разделе Использование данных обнаружения коллизий в моделях.

Вот пример ключевых узлов для определения датчика обнаружения столкновения для робота в vrcollisions виртуальный мир:

  • Robot_Body узел имеет Line_Set узел как один из его нижестоящих элементов. Line_Set узел определяет геометрию комплектации для датчика.

  • Collision_Sensor определяет датчик обнаружения столкновения для робота. Узел датчика pickingGeometry указывает на использование Line_Set узел как геометрия комплектации и Walls_Obstacles узел в качестве целей для обнаружения столкновений.

Коллизии датчиков с несколькими целями выбора объектов

Чтобы управлять поведением датчика захвата при столкновении с геометрией захвата, состоящей из нескольких объектов, используйте intersectionType собственность. Возможные значения:

  • GEOMETRY - Датчик сталкивается с объединением отдельных ограничивающих рамок всех объектов, определенных в pickTarget поле. Как правило, эта настройка дает более точные результаты.

  • BOUNDS - (По умолчанию) Датчик сталкивается с одной большой ограничивающей рамкой вокруг всех объектов, определенных в pickTarget поле.

В vrcollisions пример, LinePickSensor имеет intersectionType поле имеет значение GEOMETRY. Эта настройка означает, что датчик, находящийся внутри сталкивающейся геометрии (состоящей из стен помещения), не сталкивается с соединением стен. Столкновение происходит только в том случае, если сенсорные лучи касаются любой из стен. Если intersectionType имеет значение BOUNDSобнаружение столкновений работает только для датчика, который приближается к комнате снаружи. Вся комната обернута в одну большую ограничивающую коробку, которая взаимодействует с датчиком.

Сделать геометрию комплектации прозрачной

Геометрию комплектации, используемую для датчика комплектации, можно сделать невидимой в виртуальном мире. Для геометрии комплектации в ее Material узел, установите Transparency свойство для 1. Например, в vrcollisions виртуальный мир, для Collision_Sensor узел геометрии комплектации (Line_Set), в Materials узел, измените Transparency свойство для 1.

Избегайте надвигающихся столкновений

Чтобы избежать надвигающегося столкновения (до фактического столкновения), можно использовать pickedRange выходное свойство для LinePickSensor. В качестве части геометрии выбора набора линий определите одну или несколько длинных линий, которые отражают требуемое количество предварительного уведомления о предстоящем столкновении. Эти линии можно сделать прозрачными. Затем создайте логику на основе pickedRange значение.

Использование данных обнаружения коллизий в моделях

isActive выходное свойство датчика становится TRUE при столкновении. Чтобы связать модель со сценой виртуальной реальности, можно использовать блок VR Source для считывания датчика isActive и текущее положение объекта, для которого определен датчик. Блок VR Sink можно использовать для определения поведения объекта виртуального мира, например его положения, поворота или цвета.

Например, блок VR Source в левом верхнем углу vrcollisions Модель Simulink получает данные из связанного виртуального мира.

В модели выберите блок «Источник VR», а затем в средстве просмотра анимации Simulink 3D выберите «Моделирование» > «Параметры блока». На этом рисунке показаны некоторые ключевые выбранные свойства.

Для LinePickSensor PointPickSensor, и PrimitivePickSensorможно выбрать следующие выходные свойства для блока VR Source:

  • enabled - Включает работу узла.

    Примечание

    Свойство enabled является единственным свойством, которое можно выбрать с помощью блока VR Sink.

  • isActive - указывает, когда пересекающийся объект выбран геометрией комплектации.

  • pickedPoint - Отображение точек на поверхности нижележащей поверхности PickGeometry которые выбраны (в локальной системе координат).

  • pickedRange - показывает показания диапазона от комплектования. Дополнительные сведения см. в разделе Предотвращение надвигающихся столкновений.

Для PointPickSensor, можно выбрать enabled, isActive, и pickedPoint выходы. Для PrimitivePickSensor, можно выбрать enabled и isActive выходы.

Robot Control блок подсистемы содержит логику изменения цвета и положения робота.

На основе Robot Control на выходе подсистемы блок VR Sink обновляет виртуальный мир для отражения цвета и положения робота.

Совет

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

Использование обнаружения коллизий в MATLAB

Обнаружение коллизий можно использовать в виртуальном мире, определенном в MATLAB. Этот пример основан на vrcollisions виртуальный мир. Модель Simulink не используется.

  1. Открыть и просмотреть vrcollisions виртуальный мир.

    w = vrworld('vrcollisions');
    open(w);
    fig = view(w, '-internal');
    
  2. Получите датчик столкновения и узлы роботов виртуального мира.

    col = vrnode(w,'Collision_Sensor')
    rob = vrnode(w,'Robot')
    color = vrnode(w,'Robot_color')
    
  3. Перемещение робота на основе обнаружения столкновений (когда isActive свойство - TRUE). В положении по умолчанию коллизии не обнаружены.

    col.isActive
     
    for ii = 1:30
     
        % Move robot
        rob.translation = rob.translation + [0.05 0 0];
        vrdrawnow
     
        % If collision is detected, change color to red.
        if col.isActive
            color.diffuseColor = [1 0 0];
        end
    
    end
    

Использование данных обнаружения коллизий в виртуальных мирах

Обнаружение столкновений можно использовать для манипулирования объектами виртуального мира независимо от модели Simulink или объекта виртуального мира в MATLAB.

vrmaze виртуальный мир определяет два зеленых IndexedLineSet датчики захвата (Sensor1 и Sensor2) для фиолетового робота (Robot узел).

Код VRML включает ROUTE узлы для каждого из датчиков захвата.

ROUTE узлы используют логику, определенную в Script вызываемый узел ChangeColor.

См. также

Блоки

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