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

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

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

  • Примените 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 виртуальный мир:

  • 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 Source, и затем в Средстве просмотра Simulink 3D Animation, выберите Simulation> Block parameters. Это изображение показывает, что часть ключа выбрала свойства.

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

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

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

Блоки

Похожие темы