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

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

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

  • Применить MATLAB® алгоритмы для данных о столкновении.

  • Драйв Simulink® модели.

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

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

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

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

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

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

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

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

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

  3. Добавить узел датчика выбора путем выбора Nodes > Add > Pick Sensor Node.

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

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

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

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

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

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

  • The 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 значение.

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

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

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

В модели выберите блок VR Source, а затем в Simulink 3D Animation Viewer выберите Simulation > Block parameters. На этом изображении показаны некоторые из ключевых выбранных свойств.

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

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

    Примечание

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

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

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

  • pickedRange - Указывает показания области значений от комплектования. Для получения дополнительной информации см. «Избегайте предстоящих столкновений».

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

The 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.

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

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

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

См. также

Блоки

Похожие темы

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