Можно использовать обнаружение столкновений, чтобы смоделировать физические ограничения объектов в реальном мире точно, постараться не иметь два объекта в том же месте одновременно. Можно использовать узел обнаружения столкновений выходные параметры для:
Измените состояние других узлов виртуального мира.
Примените алгоритмы MATLAB® к данным о столкновении.
Модели Drive Simulink®.
Например, можно использовать геометрические датчики для моделирования робототехники. Для примеров использования обнаружения столкновений смотрите vrcollisions
и vrmaze
.
Чтобы настроить обнаружение столкновений, задайте столкновение (выбор) датчики, которые обнаруживают, когда они сталкиваются с целенаправленными окружающими объектами сцены. Датчики виртуального мира напоминают реальные датчики, такой как сверхзвуковые, лазерный дальномер и сенсорные датчики. Датчики Simulink 3D Animation™ основаны на датчиках X3D (также поддерживаемый для VRML), как описано в X3D, выбирающем спецификацию компонента. Для описаний выходных свойств датчика выбора, к которым можно получить доступ с Источником VR и блоками Приемника VR, смотрите Данные об Обнаружении столкновений Использования в Моделях.
PointPickSensor
— Облака точек, которые обнаруживают, какая из точек является внутренними сталкивающимися конфигурациями
LinePickSensor
— Излучите вентиляторы или другие наборы строк, которые обнаруживают расстояние до сталкивающихся конфигураций
PrimitivePickSensor
— Примитивные конфигурации (такие как конус, сфера или поле), которые обнаруживают сталкивающиеся конфигурации
Чтобы добавить датчик обнаружения столкновений, используйте эти общие шаги. Для примера, который отражает этот рабочий процесс, смотрите vrcollisions
.
В панели древовидной структуры 3D World Editor выберите узел children
узла Transform
, в который вы хотите добавить датчик выбора.
Чтобы создать геометрию выбора, чтобы использовать с датчиком, добавьте узел geometry
. Выберите Nodes> Add> Geometry и выберите геометрию, соответствующую типу датчика выбора (например, Point Set).
Добавьте узел датчика выбора путем выбора Nodes> Add> Pick Sensor Node.
В узле датчика щелкните правой кнопкой по свойству 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
. В целом эта установка приводит к более точным результатам.
Границы
(Значение по умолчанию) датчик сталкивается с одной большой ограничительной рамкой, истолкованной вокруг всех объектов, заданных в поле 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. Этот пример основан на виртуальном мире 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
.