主要内容

与虚拟世界互动MATLAB

设置节点的值

在生命周期中虚拟世界对象,可以为所有可用的虚拟世界节点及其字段设置新值vrnode通过这种方式,您可以在MATLAB中更改和控制虚拟世界的自由度®环境

类型为虚拟世界包含使用DEF语句在虚拟世界3D文件中命名的节点。这些节点的类型为vrnode。有关详细信息,请参阅虚拟世界vrnode功能。

在你打开一个虚拟世界对象时,可以获得虚拟世界中可用节点的列表。本程序使用虚拟世界对象我的世界和虚拟世界vrmount.wrl例如,创建我的世界看见为虚拟世界创建vrworld对象.

  1. 在MATLAB命令窗口中,键入

    节点(myworld);

    MATLAB命令窗口显示列表的vrnode对象及其字段可以从万博1manbetx®三维动画™软件。

    隧道(变换)(我的第一个虚拟世界)路(形状)(我的第一个虚拟世界)桥(形状)(我的第一个虚拟世界)河(形状)(我的第一个虚拟世界)ElevApp(外观)(我的第一个虚拟世界)运河(形状)(我的第一个虚拟世界)木(集团)(我的第一个虚拟世界)Tree1(集团)(我的第一个虚拟世界)轮(形状)[我的第一次[我的第一个虚拟世界]VPfollow(视点)[我的第一个虚拟世界]Camera_car(变换)[我的第一个虚拟世界]View1(视点)[我的第一个虚拟世界]
  2. 类型

    mynodes=get(myworld,'Nodes')

    MATLAB软件创建了一组vrnode对象对应于虚拟世界节点和显示器

    mynodes=vrnode对象:13乘1隧道(变换)[我的第一个虚拟世界]道路(形状)[我的第一个虚拟世界]桥梁(形状)[我的第一个虚拟世界]河流(形状)[我的第一个虚拟世界]电梯(外观)[我的第一个虚拟世界]运河(形状)[我的第一个虚拟世界]木材(组)[我的第一个虚拟世界]树1(组)[我的第一个虚拟世界]轮子(形状)[我的第一个虚拟世界]汽车(变换)[我的第一个虚拟世界]VPfollow(视点)[我的第一个虚拟世界]相机车(变换)[我的第一个虚拟世界]视图1(视点)[我的第一个虚拟世界]
  3. 类型

    MATLAB命令窗口显示消息

    Name Size Bytes Class ans 1x1 132 vrfigure object mynodes 13x1 3564 vrnode object myworld 1x1 132 vrworld object

    现在您可以获得节点特征并为某些节点属性设置新值。例如,你可以通过使用来改变汽车的位置汽车用品,这是虚拟世界中的第四个节点。

  4. 访问汽车用品通过键入

    fields(myworld.Automobile)

    字段(mynodes (10));

    MATLAB命令窗口显示有关汽车用品节点。

    字段访问类型同步--------------------------------------------addChildren事件在MFNode中关闭removeChildren事件在MFNode中关闭子级公开字段MFNode偏离中心公开字段SFVec3f偏离旋转公开字段SFVec3f偏离缩放公开字段SFVec3f偏离缩放方向公开字段SFVec3f偏离平移公开字段d SFVec3f关闭bboxCenter字段SFVec3f关闭bboxSize字段SFVec3f关闭

    这个汽车用品节点的类型为变换。此节点允许您通过更改其位置来更改其位置翻译字段值。从列表中,你可以看到翻译需要三个值,表示对象的[x y z]坐标。

  5. 类型

    视图(myworld)

    默认查看器打开并显示虚拟世界vrmount.wrl.

  6. 并排移动MATLAB窗口和浏览器窗口,以便可以同时查看这两个窗口

    myworld.Automobile.translation=[15 0.25 20];

    MATLAB为系统设置了一个新的位置汽车用品节点。您可以观察到汽车已在虚拟世界浏览器窗口中重新定位。

您可以使用该函数更改列出的节点字段vrnode / setfield.

点表示法是访问节点的首选方法。

使用MATLAB读取传感器值

读取可读字段的值(或暴露场出事件),首先将该字段与vrnode/sync方法。同步完成后,场景中的字段每次发生变化,主机上的字段值都会更新。属性读取字段的值vrnode/getfield方法或使用点表示法直接访问字段值。

虚拟场景磁悬浮模型的例子,磁悬浮列车,包含一个平面传感器(带有DEF名称“Grab_Sensor”).planessensor被附加到球的几何形状上,以记录你使用鼠标抓取球时向上或向下移动球的尝试。示例使用了传感器字段绞肉最大位置限制在其他方向的移动。您可以使用传感器平移字段的输出作为球位置控制器的新设定点。您可以将传感器输出值读入MATLAB变量设定点。

  1. 创建vrworld对象并打开世界。

    wh=vrworld(“磁悬浮列车,谢谢”)开放式;
  2. 获取节点句柄。

    nh = vrnode (wh,“Grab_Sensor”);
  3. 同步翻译字段。

    同步(nh,“翻译”,“开”);
  4. 使用以下三个选项之一读取同步字段值:

    设定值=getfield(nh,“翻译”);选点= nh.translation;选点= wh.Grab_Sensor.translation;

旋转和平移的全局坐标

对象的旋转和平移值变换对象相对于该对象的父对象在局部坐标中指定。万博1manbetx仿真软件3 d动画提供两个扩展,用于将旋转和平移值转换为全局坐标:rotation_abs翻译.若要访问这些全局坐标,请在平移或旋转字段中使用点符号,并添加_abs到字段名。这个例子展示了局部坐标和全局坐标之间的差异:

w=vrview(“vrmanipul.wrl”);n=get(w,“节点”);n = w.Grip_Reference;n.translation n.translation_abs
Ans = 0 -0.1000 0 -3.0406 -3.0000 2.3334

另见

功能

相关的话题