主要内容

使用传感器

要基于虚拟世界中发生的用户动作或事件与模型的仿真进行交互,可以使用虚拟现实传感器。要想在虚拟世界中移动图形对象或根据用户动作或事件改变其外观,您可以:

  1. 定义一个传感器节点,它根据场景中的时间、导航、动作和距离变化生成事件和输出值。例如,一个TouchSensor节点跟踪指向设备的位置和状态。当你指向包含在TouchSensor节点母公司。看到向虚拟世界添加传感器

  2. 添加一个虚拟现实来源阻塞并选择要读取的传感器属性。看到使用MATLAB读取传感器值

    请注意

    而不是使用虚拟现实来源块读取传感器值时,可以写入s函数或使用MATLAB函数块。

    如果你在用MATLAB®,您可以读取传感器值使用vrnode对象属性。

  3. 使用a读取传感器值虚拟现实来源块,其输出可用于驱动仿真行为。

向虚拟世界添加传感器

您可以在Simulink中设置接口金宝app®虚拟现实场景中传感器的框图。您还可以从虚拟世界以编程方式将信号输入到仿真模型中。

虚拟现实场景可以包含传感器,这些节点根据场景中的时间、导航、动作和距离变化生成事件和输出值。这些节点为虚拟世界添加了交互性。虚拟世界的传感器类似于真实世界的传感器,如超声波、激光雷达和触摸传感器。您可以使用金宝app仿真软件3 d动画™功能将传感器场值读取到仿真模型中,并基于用户与虚拟场景的交互进行控制仿真。

使用传感器的方法包括:

  • 使用来自虚拟世界的传感器数据来控制仿真。

  • 提供用户之间的交互导航和虚拟世界中的交互以及模型的仿真。

  • 让模拟对虚拟世界的事件做出反应,比如时间滴答声或脚本的输出。

  • 使用来自虚拟世界的静态信息,例如盒子的大小,来控制模拟。

您可以使用碰撞检测来精确建模现实世界中物体的物理约束,在现实世界中,通常两个物体不能同时在同一地点。你可以使用碰撞检测节点输出:

  • 更改其他虚拟世界节点的状态。

  • 应用MATLAB算法处理碰撞数据。

  • 驱动仿真软件金宝app模型。

例如,可以使用几何传感器进行机器人建模。有关更多信息,请参见检测物体碰撞

你可以在场景中定义这些传感器。

传感器 描述
CylinderSensor 将指针运动(例如,鼠标)映射到与指针对齐的不可见圆柱上的旋转y局部坐标系的-轴。
PlaneSensor 将指向设备的运动映射为平面上平行的二维平移z=0平面的局部坐标系。
ProximitySensor 当查看器进入、退出和在空间区域内移动时生成事件(由框定义)
SphereSensor 将指向设备的运动映射为围绕局部坐标系原点的球面旋转
TimeSensor 随着时间的推移产生事件
TouchSensor 跟踪指向设备的位置和状态,并检测何时指向包含的几何图形TouchSensor节点母公司。
VisibilitySensor 当你在世界中导航时,检测一个矩形框的可见性变化。
PointPickSensor 使用点云来检测哪些点在碰撞几何图形内部
LinePickSensor 使用射线扇或其他线集来检测到碰撞几何图形的距离
PrimitivePickSensor 探测碰撞几何的基本几何图形(如圆锥、球体或盒子)

读取传感器的值

你可以通过以下方法从虚拟世界的传感器节点读取值:

使用VR源块读取传感器值

你可以使用虚拟现实来源块,用于在虚拟世界中导航的用户与Simulink模型的仿真之间进行交互。金宝app的虚拟现实来源块注册用户与虚拟世界的交互,并将该数据传递给模型以影响模型的仿真。的虚拟现实来源block从block Parameters对话框中指定的虚拟世界字段中读取值,并将它们输入到模型中。

例如,您可以在虚拟世界中指定设定值(期望的位置),以便用户可以交互地指定虚拟世界对象的位置。然后模拟响应对象的位置变化。的虚拟现实来源块可以从虚拟世界读入模型事件,如时间刻度或脚本的输出。的虚拟现实来源块还可以将关于虚拟世界的静态信息读入模型(例如,虚拟世界3D文件中定义的盒子的大小)。

例如,使用a虚拟现实来源块,看虚拟控制面板磁悬浮模型

使用s -函数读取传感器值

要在Simulink模型中使用设定值,可以编写s函数或金宝appMATLAB函数块,周期性地读取传感器输出。这个例子使用了s函数。

  1. 右键单击虚拟传感器的读者磁悬浮模型vrmaglev)模型和选择面具>看下面具

    vrmaglev / VR传感器读者模型显示。该模型包含vrextin这是一个s函数块。该vrextin s -功能同步传感器领域设置方法,并定期将其值读入mdlUpdate方法。

  2. 检查s函数参数。右键单击vrextin并选择功能参数

    掩码中定义的参数提供了示例时间、虚拟世界以及要读取的节点和字段。

关于vrextin s -函数的说明

  • 函数没有设置自己的块输出,而是vrextins函数设置相邻的Constant块的值value_holder.这个设置使虚拟传感器的读者块兼容金宝app仿真软件编码器™代码生成以便模型可以运行金宝app仿真软件编码器目标。

  • 用户动作(使用鼠标将球移动到想要的位置)之间的信号循环通过相关的Simulink模型关闭金宝appvrmaglev.只有当模型正在运行,且模型将蓝色选择方法切换到虚拟现实传感器信号路径时,才能抓取球并移动到新的位置。要体验仅使用虚拟场景的plansensor的行为,请保存maglev.wrl文件的新名称。删除注释符号(#)以启用该文件的最后一行。这些动作激活了传感器输出到球平移的直接路由。然后你可以用新创建的场景代替原来的场景进行实验maglev.wrl世界。

    Grab_Sensor路线。翻译_changedTO Ball.translation
  • 可以使用这种方法从该类型的所有节点字段输入信息exposedFieldeventOut,而不仅仅是传感器eventOut字段。看到VRML数据类类型有关虚拟世界数据类类型的更多信息。

  • 对于类的字段exposedField,您可以使用后缀为,_changed.例如,翻译translation_changed的翻译字段值请求的替代名称是否为Grab_Sensor节点。

另请参阅

相关的话题