Обнаружение столкновений можно использовать для точного моделирования физических ограничений объектов в реальном мире, чтобы избежать одновременного размещения двух объектов в одном и том же месте. Выходные данные узла обнаружения коллизий можно использовать для:
Изменение состояния других узлов виртуального мира.
Применение алгоритмов MATLAB ® к данным коллизий.
Приводите модели Simulink ®.
Например, можно использовать геометрические датчики для робототехнического моделирования. Примеры использования обнаружения столкновений см. в разделе vrcollisions и vrmaze.
Чтобы настроить обнаружение столкновений, определите датчики столкновений (захвата), которые обнаруживают, когда они сталкиваются с целевыми окружающими объектами сцены. Датчики виртуального мира напоминают датчики реального мира, такие как ультразвуковые, лидарные и сенсорные датчики. 3D датчики Animation™ Simulink основаны на датчиках X3D (также поддержанный для VRML), как описано в X3D, выбирающем составляющую спецификацию. Описание выходных свойств датчика выбора, к которым можно получить доступ с помощью блоков источника VR и приемника VR, см. в разделе Использование данных обнаружения коллизий в моделях.
PointPickSensor - Облака точек, которые обнаруживают, какая из точек находится внутри сталкивающейся геометрии
LinePickSensor - вентиляторы лучей или другие наборы линий, которые определяют расстояние до сопряженных геометрий;
PrimitivePickSensor - примитивные геометрии (такие как конус, сфера или коробка), которые обнаруживают конфликтующие геометрии;
Чтобы добавить датчик обнаружения столкновений, выполните следующие общие действия. Пример, отражающий этот рабочий процесс, см. в разделе vrcollisions.
На панели структуры дерева Редактора мира 3D выберите children узел Transform узел, к которому требуется добавить датчик комплектации.
Чтобы создать геометрию комплектации для использования с датчиком, добавьте geometry узел. Выберите Узлы (Nodes) > Добавить (Add) > Геометрия (Geometry) и выберите геометрию, соответствующую типу датчика выбора (например, набор точек).
Добавьте узел датчика выбора, выбрав Узлы > Добавить > Выбрать узел датчика.
В узле датчика щелкните правой кнопкой мыши значок pickingGeometry и выберите USE. Укажите geometry узел, созданный для датчика.
Также в узле датчика щелкните правой кнопкой мыши pickingTarget и выберите USE. Укажите целевые объекты, для которых датчик должен обнаруживать коллизии.
Вместо задания геометрии комплектации с помощью USE можно определить геометрию комплектации напрямую. Однако непосредственно определенная геометрия невидима.
При необходимости измените значения свойств по умолчанию или укажите другие значения свойств датчика. Для получения информации о 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. Этот пример основан на vrcollisions виртуальный мир. Модель Simulink не используется.
Открыть и просмотреть vrcollisions виртуальный мир.
w = vrworld('vrcollisions'); open(w); fig = view(w, '-internal');
Получите датчик столкновения и узлы роботов виртуального мира.
col = vrnode(w,'Collision_Sensor') rob = vrnode(w,'Robot') color = vrnode(w,'Robot_color')
Перемещение робота на основе обнаружения столкновений (когда 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.
