Использование датчиков

Для взаимодействия с симуляцией модели, основанной на действиях или событиях пользователя, происходящих в виртуальном мире, можно использовать датчики виртуальной реальности. Чтобы перемещать графические объекты в виртуальном мире во время симуляции или изменить их внешний вид, основываясь на действиях или событиях пользователя, можно:

  1. Задайте узел датчика, который генерирует события и выходные значения в зависимости от времени, навигации, действий и изменений расстояния в сцене. Для примера, a TouchSensor узел отслеживает местоположение и состояние указывающего устройства. Датчик обнаруживает, когда вы указываете на геометрию, содержащуюся в TouchSensor узел родительского элемента группа. См. «Добавление датчиков в виртуальные миры».

  2. Добавьте блок VR Source и выберите свойства датчика для чтения. Смотрите Чтение Значений Датчика с Использованием MATLAB.

    Примечание

    Вместо того, чтобы использовать блок VR Source для чтения значений датчика, можно записать S-функцию или использовать блок MATLAB Function.

    Если вы работаете в MATLAB®, вы можете считать значения датчика, используя vrnode свойства объекта.

  3. Считайте значения датчика с помощью блока VR Source, выходы которого могут использоваться для управления поведением симуляции.

Добавьте датчики в виртуальные миры

Вы можете настроить интерфейс в Simulink® блок к датчикам в сцене виртуальной реальности. Можно также программно вводить сигналы из виртуального мира в модель симуляции.

Сцены виртуальной реальности могут содержать датчики, которые являются узлами, которые генерируют события и выводят значения в зависимости от времени, навигации, действий и изменений расстояния в сцене. Эти узлы добавляют интерактивность в виртуальный мир. Датчики виртуального мира напоминают датчики реального мира, такие как ультразвуковые, лидарные и сенсорные датчики. Можно использовать функции 3D Animation™ Simulink, чтобы считать значения поля датчика в модели симуляции и управлять симуляцией на основе взаимодействия пользователя с виртуальной сценой.

Способы использования датчиков включают:

  • Используйте данные датчика из виртуального мира, чтобы управлять симуляцией.

  • Обеспечьте интерактивность между навигацией пользователя и взаимодействием в виртуальном мире и симуляцией модели.

  • Имейте реакцию симуляции на события виртуального мира, такие как временные такты или выходы скриптов.

  • Используйте статическую информацию из виртуального мира, например размер коробки, чтобы управлять симуляцией.

Можно использовать обнаружение столкновения, чтобы точно смоделировать физические ограничения объектов в реальном мире, где обычно два объекта не могут находиться в одном и том же месте одновременно. Можно использовать выходы узла обнаружения столкновений для:

  • Измените состояние других узлов виртуального мира.

  • Примените алгоритмы MATLAB к данным о столкновении.

  • Модели Drive Simulink.

Для примера можно использовать геометрические датчики для робототехнического моделирования. Для получения дополнительной информации смотрите Обнаружение Объекта столкновений.

Можно задать эти датчики в сцене.

ДатчикиОписание
CylinderSensorПреобразует движение указателя (например, мыши) во вращение на невидимом цилиндре, которое выровнено по y оси локальной системы координат.
PlaneSensorПреобразует движение указывающего устройства в двумерное перемещение в плоскости, параллельной плоскости z = 0 локальной системы координат.
ProximitySensorГенерирует события, когда средство просмотра входит, выходит и перемещается внутри области в пространстве (задается рамкой)
SphereSensorПреобразует движение устройства указания в сферическое вращение вокруг источника локальной системы координат
TimeSensorГенерирует события по прошествии времени
TouchSensorОтслеживает местоположение и состояние указывающего устройства и обнаруживает, когда вы указываете на геометрию, содержащуюся в TouchSensor узел родительского элемента группа.
VisibilitySensorОбнаруживает изменения видимости прямоугольного прямоугольника при навигации по миру.
PointPickSensorИспользует облака точек, чтобы обнаружить, какая из точек находится внутри сталкивающихся геометрий
LinePickSensorИспользует лучевые вентиляторы или другие наборы линий, которые обнаруживают расстояние до сталкивающихся геометрий
PrimitivePickSensorПримитивные геометрии (такие как конус, сфера или коробка), которые обнаруживают сталкивающиеся геометрии

Чтение значений датчика

Можно считать значения с узлов датчика в виртуальном мире при помощи:

Чтение значений датчика с использованием исходных блоков VR

Можно использовать блок VR Source для интерактивности между пользователем, перемещающимся по виртуальному миру, и симуляцией модели Simulink. Блок VR Source регистрирует пользовательские взаимодействия с виртуальным миром и передает эти данные в модель, чтобы повлиять на симуляцию модели. Блок VR Source считывает значения из полей виртуального мира, заданных в диалоговом окне Параметров блоков, и вводит их в модель.

Например, можно задать уставки (желаемые положения) в виртуальном мире, чтобы пользователь мог задать местоположение объекта виртуального мира в интерактивном режиме. Симуляция затем реагирует на измененное местоположение объекта. Блок VR Source может считывать в модель события из виртуального мира, такие как временные такты или выходы скриптов. Блок VR Source может также считывать в модель статическую информацию о виртуальном мире (для примера, размер коробки, заданный в файле 3D виртуального мира).

Для примеров, которые используют блок VR Source, см. «Виртуальная панель управления» и «Магнитная модель левитации».

Чтение значений датчика с помощью S-функций

Чтобы использовать значение уставки в модели Simulink, можно записать S-функцию или блок MATLAB Function, который периодически читает выход датчика. Этот пример использует S-функцию.

  1. Щелкните правой кнопкой мыши VR Sensor Reader блок Magnetic Levitation Model (vrmaglev) моделировать и выбрать Mask > Look Under Mask.

    The vrmaglev/VR Sensor Reader отображения модели. Эта модель содержит vrextin блок, который является блоком s-function. S-функция vrextin синхронизирует поле датчика в setup метод и периодически читает его значение в mdlUpdate способ.

  2. Исследуйте параметры 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 узел.

См. также

Блоки

Похожие темы