Можно использовать обнаружение столкновения, чтобы точно смоделировать физические ограничения объектов в реальном мире, чтобы избежать одновременного нахождения двух объектов в одном и том же месте. Можно использовать выходы узла обнаружения столкновений для:
Измените состояние других узлов виртуального мира.
Применить MATLAB® алгоритмы для данных о столкновении.
Драйв 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
виртуальный мир:
The Robot_Body
узел имеет Line_Set
узел как один из его дочерних элементов. The Line_Set
узел задает геометрию комплектования для датчика.
The 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
значение.
The isActive
выходное свойство датчика становится TRUE
когда происходит столкновение. Чтобы связать модель со сценой виртуальной реальности, можно использовать блок VR Source, чтобы считать датчик isActive
свойство и текущее положение объекта, для которого задан датчик. Можно использовать блок VR Sink, чтобы задать поведение объекта виртуального мира, такого как его положение, поворот или цвет.
Например, блок VR Source в верхней левой части vrcollisions
Simulink модели получает данные из связанного виртуального мира.
В модели выберите блок VR Source, а затем в Simulink 3D Animation Viewer выберите Simulation > Block parameters. На этом изображении показаны некоторые из ключевых выбранных свойств.
Для LinePickSensor
PointPickSensor
, и PrimitivePickSensor
можно выбрать следующие выходы свойства для блока VR Source:
enabled
- Включает операцию узла.
Примечание
Свойство enabled является единственным свойством, которое можно выбрать с VR Sink блоком.
isActive
- Указывает, когда пересекающийся объект комплектуется геометрией комплектования.
pickedPoint
- отображает точки на поверхности базового PickGeometry
выбранные (в локальной системе координат).
pickedRange
- Указывает показания области значений от комплектования. Для получения дополнительной информации см. «Избегайте предстоящих столкновений».
Для PointPickSensor
, можно выбрать enabled
, isActive
, и pickedPoint
выходы. Для PrimitivePickSensor
, можно выбрать enabled
и isActive
выходы.
The 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.
The vrmaze
виртуальный мир задает два зеленых IndexedLineSet
датчики захвата (Sensor1
и Sensor2
) для фиолетового робота (Robot
узел).
Код VRML включает ROUTE
узлы для каждого из датчиков захвата.
The ROUTE
узлы используют логику, заданную в Script
узел называется ChangeColor
.