《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 112968|回复: 695
收起左侧

[教程] [原创]使用Matlab/Simulink实现运动可视化技术

    [复制链接]
发表于 2010-12-17 21:55:54 | 显示全部楼层 |阅读模式
       还在为不知道如何使自己的仿真结果更容易让人接受而烦恼吗?
       还在为用一条条曲线所表示的运动太过抽象而苦不堪言吗?
       建个3D模型,使用MATLAB平台,投资小,利润高!小本经营,无限回报,赶快继续阅读吧,依托强大的Matlab平台支持,帮你解决仿真过程中遇到的这些烦恼~~
       试想一下,无论是学术活动还是各种汇报,一个会动的仿真结果和一组组曲线相比哪个更直观,再配以必要的文字、数字说明,相信下面介绍的方法所得到的结果,无论从哪个角度来讲可能都会更具说服力。是个不错的选择~~   ^_^
===================================分割线===============================
       广告打完了,言归正传。运动可视化使用到的是虚拟现实技术。虚拟现实(Virtual Reality,VR)顾名思义就是使用电脑模拟一个三维空间,让观察者有身临其境感觉的一项可视化技术。如果其中物体的运动是受外界控制的,那么就实现了运动的可视化,使运动不再抽象,控制效果也不再是一条条仿真曲线,可以从3D模型的运动中直观地反映出来。
       运动可视化技术可以应用于很多领域,如控制中可以用它来反映被控对象的运动情况,机械中借助于外界输入设备(鼠标、操纵杆等)可以观察复杂机械设备的联动情况。做出来的虚拟现实系统也可以应用于虚拟训练、虚拟地图等场合。
        虚拟现实所使用到的语言为VRML(Virtual Reality Modeling Language)即虚拟现实建模语言。由于早期的网络使用的语言HTML (HyperText Mark-up Language)无法满足巨大信息量的要求,为了解决这个问题,就应运而生了VRML语言,此处的运动可视化技术是借用VRML的强大建模的功能,在Matlab平台上实现虚拟现实。
        那么下面就介绍一下虚拟现实的实现流程吧
总体操作流程.jpg

        从流程图上看,操作过程并不复杂,实际上也是这样的,下面介绍的这样方法,即使没有VRML语言基础也能建立很好的虚拟现实场景。
        首先是VRML建模工具的选择。
        建模工具有很多种,比如V-Realm Builder 2.0(Matlab自带的VR建模工具),3D Max(功能强大,操作相对简单的工具,强烈推荐),如果对VRML语言十分精通,甚至可以使用记事本进行建模,虽然看起来最拽,但前期需要投入相当多的精力研究VRML语言。我使用的工具是3D Max和V-Realm Builder 2.0兼用,前者是在初期建模时使用的工具,后者是在对模型修改时所使用到的工具。
        其次是虚拟现实浏览器的选择。
        虚拟现实浏览器可以理解为VRML语言编译的编译器,通过虚拟现实浏览器可以将VRML语言编译成为3D模型。至于VRML浏览器的选择也有很多种,但如果是基于Matlab平台的系统,推荐使用Matlab/Simulink/Simulink 3D Animation工具箱中自带的VR Sink浏览器,使用这种浏览器不用考虑与Matlab的接口问题。
        工具选择好之后,那么就举个例子看一下到底怎么用吧
1.建立3D模型

        使用3D Max建立3D模型
概念车3D模型.jpg

        3D Max建模过程相对简单,效果可以做到相当逼真的程度,完全可以满足虚拟现实中对模型精度的要求。如果不想自己建模也可以借助网络资源,使用搜索引擎搜索“3D模型”,可以找到大量现成的模型。
2.生成VRML 97格式文件

        为了能在虚拟现实浏览器中反映出使用3D Max建立出的3D模型,需要将模型转换生成VRML97格式的文件。导出的方法很简单,选择文件→导出→VRML97格式的文件就行了。
3.使用虚拟现实浏览器

        将Matlab/Simulink/Simulink 3D Animation/VR Sink模块拖拽到新建文件中,双击,出现如下界面
VR Sink参数.jpg

        单击Browse按钮,选择上步所生成的VRML97格式文件,之后界面变成如下形式
VR Sink参数1.jpg

        这时窗口的右侧VRML Tree中就显示了很多节点,这些节点和VRML语言中的节点是一一对应的,这里面对于控制而言经常用到两个节点为rotation(旋转),translation(位置)。
        需要注意的是,在建模过程中需要将一起运动的部件分到一个“组”中,控制时控制这个组的“旋转”和“位置”就行了。
4.虚拟现实浏览器的数据接口

        常用的数据接口主要是针对rotation节点和translation节点的。
        对于rotation节点需要四维数据,前三维定义绕哪个轴旋转,定义方法如下[1,0,0]表示绕x轴旋转,[0,1,0] 表示绕y轴旋转,[0,0,1] 表示绕z轴旋转;最后一维定义转动角度,以弧度为单位。坐标轴定义如下
坐标轴.jpg

        对于translation节点只需要三维数据,即三个当前时刻中心的坐标。
        由于rotation是经常需要使用到的节点,所以,每次都写很多0,1很麻烦,可以将rotation的接口用一个模块来替代,使用之前只需要选择绕哪个轴即可,输入由原来的四维变成了一维,可以大大提高建模效率。模块参数如下
rotation模块.jpg

        做好一切准备工作之后,剩下的就是按动开始仿真的按钮了,让我们一起看一下效果吧~~
finally.jpg

        模型是使4个轮子旋转,并且整体移动,如果这样的试验通过了,下一步就是接入能使车真正运动起来的数据,进而可以仿真真实车辆行驶的全过程了
        上图中左侧的图就是Matlab自带的虚拟现实浏览器,其中下方有许许多多按钮,下方的这些按钮是控制观察者的视角的,类似一些RPG游戏一样,观察者也可以通过鼠标任意调整视角,360°看到虚拟现实世界中的一切,不过前提是场景得做的十分精细,附件中的模型我指贴了一面的贴图,如果大家好奇心特别重,旋转了视角,将会看到另一个世界~~
==================================分割线================================
        上面介绍了VRML建模的全过程,如果遇到复杂的模型,耗费时间的地方在于对真实模型和环境的刻画,Matlab这边的工作,Simulink 3D Animation工具箱已经做了足够多,不需要更改什么,设置一些参数就能直接用了。
        此外,Simulink 3D Animation工具箱还提供了很多其他强大的功能,例如在虚拟现实世界中显示文字(VR Text Output),将运动物体的运动后的轨迹记录并在浏览器中显示(VR Tracer),一些外部输入设备的驱动(Joystick Input,Space Mouse Input)。最经典的是Demos模块中提供了各式各样的例子,里面不同类型的应用,基本能够满足简单的要求,同时也是学习虚拟现实一个很好的工具。

下载

car.mdl (26.4 KB, 下载次数: 740)

评分

参与人数 8威望 +20 贝壳 +35 贡献 +31 收起 理由
arthurm + 2 支持原创内容,鼓励自己动手
pyescc + 1 + 3 感谢您分享自己珍贵的资料
lycz0634116 + 1 + 1
gfd5807 + 1 + 1
huangyunping986 + 6

查看全部评分

发表于 2016-1-21 09:14:04 | 显示全部楼层
楼主棒棒哒
回复 支持 0 反对 1

使用道具 举报

发表于 2016-6-15 10:15:14 | 显示全部楼层
  需要注意的是,在建模过程中需要将一起运动的部件分到一个“组”中,控制时控制这个组的“旋转”和“位置”就行了。我想问怎么把零件分到一个组里,我做了一个旋翼无人机的模型,转换到VR里,所有的零件都分开了,像螺旋桨转动,只有螺旋桨自己飞走了,其他的都没动
回复 支持 反对

使用道具 举报

发表于 2016-5-19 11:31:21 | 显示全部楼层
上面介绍了VRML建模的全过程,如果遇到复杂的模型,耗费时间的地方在于对真实模型和环境的刻画,Matlab这边的工作,Simulink 3D Animation工具箱已经做了足够多,不需要更改什么,设置一些参数就能直接用了。
回复 支持 反对

使用道具 举报

发表于 2010-12-18 00:00:34 | 显示全部楼层
支持下~~~
 楼主| 发表于 2010-12-18 14:42:14 | 显示全部楼层
发表于 2010-12-18 15:18:27 | 显示全部楼层
回复 wjshi09 的帖子

这个很给力O(∩_∩)O~
发表于 2010-12-18 15:20:57 | 显示全部楼层
回复 wjshi09 的帖子

顶开篇语 :

还在为不知道如何使自己的仿真结果更容易让人接受而烦恼吗?
       还在为用一条条曲线所表示的运动太过抽象而苦不堪言吗?
 楼主| 发表于 2010-12-18 18:41:30 | 显示全部楼层
回复 faruto 的帖子

广告广告,O(∩_∩)O哈哈~
发表于 2010-12-19 17:30:29 | 显示全部楼层
发表于 2010-12-22 01:04:48 | 显示全部楼层
ms搞得很高端啊,谢谢分享!
发表于 2010-12-22 10:02:27 | 显示全部楼层
看起来贼给力啊,支持一下
发表于 2010-12-22 15:17:27 | 显示全部楼层
gelivable!!! 支持!!
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-2-23 06:36 , Processed in 0.081907 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表