Обнаружьте объектные столкновения

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

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

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

  • Модели Drive Simulink®.

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

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

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

  • 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, смотрите Данные об Обнаружении столкновений Использования в Моделях.

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

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

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

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

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

  • GEOMETRY – Датчик сталкивается с объединением отдельных ограничительных рамок всех объектов, заданных в поле pickTarget. В целом эта установка приводит к более точным результатам.

  • Границы (Значение по умолчанию) датчик сталкивается с одной большой ограничительной рамкой, истолкованной вокруг всех объектов, заданных в поле pickTarget.

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

Сделайте геометрию выбора прозрачной

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

Постарайтесь не надвигаться столкновения

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

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

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

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

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

Для PointPickSensor LinePickSensor и PrimitivePickSensor, можно выбрать эти выходные свойства для Исходного блока VR:

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

    Примечание

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

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

  • pickedPoint – Отображает точки на поверхности underlying 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.

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

Блоки

Похожие темы

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