Можно использовать обнаружение столкновений, чтобы смоделировать физические ограничения объектов в реальном мире точно, постараться не иметь два объекта в том же месте одновременно. Можно использовать узел обнаружения столкновений выходные параметры для:
Измените состояние других узлов виртуального мира.
Примените алгоритмы MATLAB® к данным о столкновении.
Модели Drive Simulink®.
Например, можно использовать геометрические датчики в моделировании робототехники. Для примеров использования обнаружения столкновений смотрите vrcollisions
и vrmaze
.
Чтобы настроить обнаружение столкновений, задайте столкновение (выбор) датчики, которые обнаруживают, когда они сталкиваются с целенаправленными окружающими объектами сцены. Датчики виртуального мира напоминают реальные датчики, такой как сверхзвуковые, лидар и сенсорные датчики. Датчики Simulink 3D Animation™ основаны на датчиках X3D (также поддерживаемый для VRML), как описано в X3D, выбирающем спецификацию компонента. Для описаний выходных свойств датчика выбора, к которым можно получить доступ с VR Source и блоками VR Sink, смотрите Данные об Обнаружении столкновений Использования в Моделях.
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 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. Этот пример основан на 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
.