matlab如何建立和连接虚拟世界?
1、定义问题
假设您要在虚拟现实中模拟和可视化球体的变形。在您的虚拟世界中,您希望有两个框代表刚性板(B1,B2)和它们之间的弹性球体(S)。所有三个对象均沿x轴居中对齐。框B1和B2以相同的速度向S移动,但方向相反。当它们到达球体S时,它们开始通过减小其x尺寸并拉伸其 y和z尺寸来使其变形。
这是虚拟世界的外观:
2、下表列出了您为此示例创建的对象的位置和尺寸。
3、在Simulink的® 3D动画™产品包括教程模型vrtut3。这个简化的模型模拟了弹性球体的变形。与刚性块碰撞后,球的x 尺寸从1减小到0.4。此外,y和 z尺寸会扩大以使变形球体-椭球体的体积保持恒定。模型中的其他块将正确大小的矢量提供给Simulink 3D Animation块。当球体在x方向上变形为原始大小的0.4倍时,模拟将停止。
4、您的第一个任务是打开Simulink模型并将Simulink 3D动画块添加到模型中。
5、添加Simulink 3D动画块
此过程使用Simulink模型vrtut3演示如何将Simulink 3D动画块添加到模型中。该模型生成B1的位置,B2的位置和S的尺寸的值(如“ 定义问题”中所述)。
1、打开Tutorial #3。例。
在打开的页面顶部,选择打开此示例。
将vrtut3文件保存到您的MATLAB工作文件夹中。
2、在MATLAB中,将当前文件夹更改为您的MATLAB工作文件夹。
3、在MATLAB命令窗口中,输入:
vrtut3
将打开一个Simulink窗口,其中包含一个包含Simulink 3D Animation VR信号扩展器模块的模型,但没有VR Sink模块可将数据从模型写入Simulink 3D Animation。相反,此模型使用范围块临时监视相关信号。
4、在MATLAB Command Window中,键入
vrlib
将打开Simulink 3D动画库。
5、从“库”窗口中,将VR Sink 块拖放到Simulink图中。然后,您可以关闭“库浏览器”窗口。
您的下一个任务是创建一个将与VR Sink块关联的虚拟世界。请参阅打开新的虚拟世界。
6、打开一个新的虚拟世界
您必须创建一个虚拟世界才能连接到Simulink模型以可视化信号。
此过程将打开一个新的虚拟世界,在其中添加用于可视化模型信号的节点vrtut3。虚拟世界和Simulink模型之间的连接要求该模型包含一个VR Sink块,如添加Simulink 3D动画块中所述。
1、在空的虚拟世界中启动3D世界编辑器。在MATLAB Toolstrip的“ 应用程序”选项卡的“ 仿真图形和报告”部分中,单击“ 3D世界编辑器”。
3D世界编辑器显示:
在左窗格中,只有一个ROOT 节点的虚拟场景树
在右窗格中,一个空的虚拟世界
在底部窗格中,一个用于编辑对象的空白窗格
2、您可以随时保存虚拟世界。将虚拟世界保存在 文件所在vrtut3.wrl的相同工作文件夹中 vrtut3。不要关闭3D世界编辑器。
接下来的两个任务将创建一个虚拟世界以用于vrtut3 模型:
添加节点
建立和连接虚拟世界
7、添加节点
创建盒子
定义虚拟世界对象涉及定义节点的层次结构。此示例示出了如何定义Transform节点的下ROOT 节点,每个Transform节点包括的层次结构 children,Shape,Appearance,Geometry,和特定的形状(在这种情况下,Box)节点。
1、在左窗格的树中,单击ROOT (最上面的项)。
2、Transform使用以下菜单选择序列添加节点。
3、该Transform节点用于B1框。命名Transform节点:
右键单击该Transform节点。
选择“ 编辑名称”菜单项。
在Transform节点左侧的编辑框中,键入 B1。
4、添加一个Shape节点:
展开B1 Transform节点。
选择children节点。
Shape使用以下菜单选择序列添加节点:
5、Appearance为Shape节点添加一个节点:
在Shape节点下,选择appearance (SFNode)节点。
Appearance使用以下菜单选择序列添加节点。
6、将Material节点添加到该 Appearance节点:
展开(Appearance)节点并选择该 material(SFNode)节点。
Material使用以下菜单选择序列添加节点。
7、将Box节点添加到该 geometry节点:
选择geometry(SFNode)节点的 (Shape)节点。
Box使用以下菜单选择序列添加节点。
展开所有节点后,“ 3D世界编辑器”现在在虚拟世界显示窗格中显示一个框 。
8、通过编辑框的size 属性来使其更小:
选择 节点的size属性Box。
在3D世界编辑器底部的对象属性编辑窗格中,0.3在第一栏中输入, 1在第二和第三栏中输入。
点击应用。
盒子变小了。
9、通过更改节点的translation(SFVec3f)属性, 将框向右移动 B1(Transform)。在对象属性编辑窗格中,将第一列设置为3,将第二列和第三列设置为0。
10、添加第二个类似于第一个框的框。
在ROOT节点下,添加一个Transform 节点(请参阅步骤2)并命名B2(请参阅步骤3)。
复制Shape节点。在B1 Transform节点下,右键单击Shape节点中的 B1 Transform节点,然后选择“ 复制”菜单项。
将复制的Shape节点粘贴到该B2 Transform节点中。在B2 Transform节点下),右键单击该 children节点,然后选择“ 粘贴节点” >“ 粘贴”菜单项。
随着B1节点的折叠和B2 节点的展开,“ 3D世界编辑器”如下图所示。
11、通过更改 节点的translation属性,将您创建的框移动到左侧 B2(Transform)。在对象属性编辑窗格中,将第一列设置为 -3,将第二列和第三列设置为 0。
8、创建一个球体
您的下一个任务是在两个框之间添加一个球体。本节假定您已完成“ 添加节点”中描述的任务。
1、为了使树结构窗格更容易地集中在要添加的节点上,请折叠B1(Transform)和 B2(Transform)节点。
2、在左窗格的树中,单击“ ROOT 节点”。
3、添加一个Sphere节点。3D世界编辑器包括用于建立虚拟世界的对象库,其中包括一个 Sphere对象。
Sphere使用以下菜单选择序列添加库对象。
从组件库文件夹列表中,选择Shapes 文件夹,然后选择Sphere.wrl文件。
4、选择Transform节点并命名 S。
在S Transform节点完全展开而其他 Transform节点折叠的情况下,“ 3D世界编辑器”如下图所示。
5、要使球形变为蓝色,请在Material节点下选择 diffuseColor属性。在对象属性编辑窗格中,将第一列的值更改为0.2,将第二列的值更改为1,将第三列的值更改为 1。
6、保存虚拟世界文件。
您的下一个任务是将模型输出连接到Simulink模型中的Simulink 3D Animation模块。请参阅链接到Simulink模型。
9、链接到Simulink模型
创建虚拟世界和带有VR Sink块的Simulink模型后,定义模型信号与虚拟世界之间的关联。
10、注意
此过程以模型vrtut3为例。假定您已打开模型并添加了VR Sink块,并且已创建了一个名为的虚拟世界vrtut3.wrl。请参阅从添加Simulink 3D动画块开始的教程。
11、1、打开“ VR接收器块参数”对话框。在Simulink编辑器中,双击VR Sink块。
2、在“ 源文件”编辑框旁边,单击“ 浏览”。
3、选择vrtut3.wrl,然后单击 打开。
4、在“ 输出”窗格中,选择“ 自动打开查看器”。此复选框指定在运行模型时启动虚拟世界的查看器。
5、对于Description参数,输入 vrtut3。
6、在“ VR Sink”对话框中,单击“ 应用”。
7、在树结构窗格中,选择 B1平移,B2平移和 S比例复选框作为要连接到模型信号的节点。单击确定。
将显示VR Sink块以及相应的输入。
8、删除三个示波器模块及其关联的输入信号线。
9、将来自两个VR信号扩展器模块的输入线连接S Scaling in XYZ到VR Sink模块中的相应端口。
10、双击VR Sink块。
查看器出现。
11、在查看器中,选择“ 仿真” >“ 块参数”选项。您的默认查看器将打开并显示虚拟世界。有关更改默认查看器的更多信息,请参见设置默认查看器。
12、在“ VR接收器块参数”对话框中,单击“ 查看”按钮。
13、在Simulink编辑器中,选择Simulation > Run。
在默认查看器中,您会看到场景的3D动画。使用查看器控件,您可以从各个角度观察动作。
当球体的宽度减小到其原始大小的0.4时,模拟将停止运行。
12、本示例向您展示如何创建和使用简单的虚拟现实模型。使用相同的方法,可以创建更复杂的模型来解决您面临的特定问题。