Для взаимодействия с симуляцией модели, основанной на действиях или событиях пользователя, происходящих в виртуальном мире, можно использовать датчики виртуальной реальности. Чтобы перемещать графические объекты в виртуальном мире во время симуляции или изменить их внешний вид, основываясь на действиях или событиях пользователя, можно:
Задайте узел датчика, который генерирует события и выходные значения в зависимости от времени, навигации, действий и изменений расстояния в сцене. Для примера, a TouchSensor
узел отслеживает местоположение и состояние указывающего устройства. Датчик обнаруживает, когда вы указываете на геометрию, содержащуюся в TouchSensor
узел родительского элемента группа. См. «Добавление датчиков в виртуальные миры».
Добавьте блок VR Source и выберите свойства датчика для чтения. Смотрите Чтение Значений Датчика с Использованием MATLAB.
Примечание
Вместо того, чтобы использовать блок VR Source для чтения значений датчика, можно записать S-функцию или использовать блок MATLAB Function.
Если вы работаете в MATLAB®, вы можете считать значения датчика, используя vrnode
свойства объекта.
Считайте значения датчика с помощью блока VR Source, выходы которого могут использоваться для управления поведением симуляции.
Вы можете настроить интерфейс в Simulink® блок к датчикам в сцене виртуальной реальности. Можно также программно вводить сигналы из виртуального мира в модель симуляции.
Сцены виртуальной реальности могут содержать датчики, которые являются узлами, которые генерируют события и выводят значения в зависимости от времени, навигации, действий и изменений расстояния в сцене. Эти узлы добавляют интерактивность в виртуальный мир. Датчики виртуального мира напоминают датчики реального мира, такие как ультразвуковые, лидарные и сенсорные датчики. Можно использовать функции 3D Animation™ Simulink, чтобы считать значения поля датчика в модели симуляции и управлять симуляцией на основе взаимодействия пользователя с виртуальной сценой.
Способы использования датчиков включают:
Используйте данные датчика из виртуального мира, чтобы управлять симуляцией.
Обеспечьте интерактивность между навигацией пользователя и взаимодействием в виртуальном мире и симуляцией модели.
Имейте реакцию симуляции на события виртуального мира, такие как временные такты или выходы скриптов.
Используйте статическую информацию из виртуального мира, например размер коробки, чтобы управлять симуляцией.
Можно использовать обнаружение столкновения, чтобы точно смоделировать физические ограничения объектов в реальном мире, где обычно два объекта не могут находиться в одном и том же месте одновременно. Можно использовать выходы узла обнаружения столкновений для:
Измените состояние других узлов виртуального мира.
Примените алгоритмы MATLAB к данным о столкновении.
Модели Drive Simulink.
Для примера можно использовать геометрические датчики для робототехнического моделирования. Для получения дополнительной информации смотрите Обнаружение Объекта столкновений.
Можно задать эти датчики в сцене.
Датчики | Описание |
---|---|
CylinderSensor | Преобразует движение указателя (например, мыши) во вращение на невидимом цилиндре, которое выровнено по y оси локальной системы координат. |
PlaneSensor | Преобразует движение указывающего устройства в двумерное перемещение в плоскости, параллельной плоскости z = 0 локальной системы координат. |
ProximitySensor | Генерирует события, когда средство просмотра входит, выходит и перемещается внутри области в пространстве (задается рамкой) |
SphereSensor | Преобразует движение устройства указания в сферическое вращение вокруг источника локальной системы координат |
TimeSensor | Генерирует события по прошествии времени |
TouchSensor | Отслеживает местоположение и состояние указывающего устройства и обнаруживает, когда вы указываете на геометрию, содержащуюся в TouchSensor узел родительского элемента группа. |
VisibilitySensor | Обнаруживает изменения видимости прямоугольного прямоугольника при навигации по миру. |
PointPickSensor | Использует облака точек, чтобы обнаружить, какая из точек находится внутри сталкивающихся геометрий |
LinePickSensor | Использует лучевые вентиляторы или другие наборы линий, которые обнаруживают расстояние до сталкивающихся геометрий |
PrimitivePickSensor | Примитивные геометрии (такие как конус, сфера или коробка), которые обнаруживают сталкивающиеся геометрии |
Можно считать значения с узлов датчика в виртуальном мире при помощи:
Можно использовать блок VR Source для интерактивности между пользователем, перемещающимся по виртуальному миру, и симуляцией модели Simulink. Блок VR Source регистрирует пользовательские взаимодействия с виртуальным миром и передает эти данные в модель, чтобы повлиять на симуляцию модели. Блок VR Source считывает значения из полей виртуального мира, заданных в диалоговом окне Параметров блоков, и вводит их в модель.
Например, можно задать уставки (желаемые положения) в виртуальном мире, чтобы пользователь мог задать местоположение объекта виртуального мира в интерактивном режиме. Симуляция затем реагирует на измененное местоположение объекта. Блок VR Source может считывать в модель события из виртуального мира, такие как временные такты или выходы скриптов. Блок VR Source может также считывать в модель статическую информацию о виртуальном мире (для примера, размер коробки, заданный в файле 3D виртуального мира).
Для примеров, которые используют блок VR Source, см. «Виртуальная панель управления» и «Магнитная модель левитации».
Чтобы использовать значение уставки в модели Simulink, можно записать S-функцию или блок MATLAB Function, который периодически читает выход датчика. Этот пример использует S-функцию.
Щелкните правой кнопкой мыши VR Sensor Reader блок Magnetic Levitation Model (vrmaglev
) моделировать и выбрать Mask > Look Under Mask.
The vrmaglev/VR Sensor Reader
отображения модели. Эта модель содержит vrextin
блок, который является блоком s-function. S-функция vrextin синхронизирует поле датчика в setup
метод и периодически читает его значение в mdlUpdate
способ.
Исследуйте параметры S-функции. Щелкните правой кнопкой мыши vrextin
и выберите S-Function Parameters.
Параметры, заданные в маске, обеспечивают шаг расчета, виртуальный мир и считываемые узел и поле.
Примечания о S-функции vrextin
Вместо того, чтобы устанавливать свои выходные выходы блоков, vrextin
S-функция устанавливает значение смежного блока Constant value_holder
. Эта настройка делает блок VR Sensor Reader совместимым с генерацией кода Simulink Coder™, чтобы модель могла запускаться на целевых устройствах Simulink Coder.
Цикл сигнала между действием пользователя (перемещение мяча в желаемое положение с помощью мыши) закрывается через связанную модель Simulink vrmaglev
. Захват мяча и перемещение его в новое положение работает только тогда, когда модель работает и когда модель устанавливает метод выбора синего цвета, переключается на путь сигнала датчика виртуальной реальности. Чтобы испытать поведение PlaneSensor, используя только виртуальную сцену, сохраните maglev.wrl
файл под новым именем. Удалите символ комментария (#), чтобы включить последнюю линию этого файла. Эти действия активируют прямую маршрутизацию выхода датчика к перемещению мяча. Затем можно экспериментировать с только что созданной сценой вместо оригинала maglev.wrl
в мире.
ROUTE Grab_Sensor.translation_changed TO Ball.translation
Можно использовать этот подход для ввода информации из всех полей узла типа exposedField
или eventOut
, не только сенсорный eventOut
поле. Для получения дополнительной информации о типах классов данных виртуального мира см. раздел «Типы классов данных VRML».
Для полей exposedField классов
, можно использовать альтернативное имя, используя имя поля с суффиксом, _changed
. Для примера, translation
и translation_changed
являются альтернативными именами для запроса значения поля перевода Grab_Sensor
узел.