随着科技的不断发展, 人类对地球的探索已经远远不能满足人类的好奇心, 自上世纪中期人类第一次发射卫星进入太空到现在人类已经探索距离地球更远的空间, 航天科技已经取得了质的飞跃[1]. 当下我国正在为进行探月工程月面无人采样并安全返回地面的任务的紧急筹备中, 因此寻找到一种可以可视化显示月球探测器的途径, 可以为月面无人采样的成功实施提供一定的保障.
目前, 市场上存在着很多对空间机器人进行仿真的软件, 例如MATLAB、unity3d、VRP(VR-Platform)、Virtool、VEGA、OGRE、OSG等等. 其中MATLAB的优势在于数据的可视化及分析上, 它无法满足实现对空间机器人的精确控制; 而unity3d主要应用于游戏行业的开发, 但是对显卡的要求较高, 不适合低端机器需求的高端渲染效果; VRP更适用于场景的显示模拟, 例如城市规划设计、工业仿真、室内场景动态显示等[2]. Virtool、VEGA、虽然对编写代码的需求较小, 但是Virtool的缺点在于虽然是中文界面显示, 但是在开发过程中不支持中文输入; VEGA只支持.fit格式文件, 只能由配套的Creator软件来建立模型, 从而导致模型使用的方式过于单一; OSG和OGRE都是以C++进行开发的, 这两者十分相似, 但是OGRE偏向于游戏开发, 而OSG更偏向虚拟仿真, 同时它更加强调库的功能性.
OpenSceneGraph简称OSG, 是以OpenGL底层渲染API为基础, 采用C++语言编写, 提供了大量的第三方库, 并且随着技术的不断发展, 该库也在不断被完善[3,4]. 相比于OpenGL具有性能高、快速开发、可扩展性和可移植性强等优势, 同时它能够读取二维和三维图像的格式, 其中二维图像支持的格式有.gif, .jpgf, .bmp等, 支持三维图像的格式有.3DS, .obj等. 因此利用OSG的第三方库在Windows下以Qt和C++为基础来研究对空间机器人的三维仿真具有重要意义.
1 环境搭建本研究的完成是在基于Windows 7环境下借助Microsoft Visual Studio 2008、Qt和OSG来实现最终的可视化效果, 因此需要的主要工有如下9种:
(1) 64位Windows 7操作系统的电脑1台;
(2) Microsoft Visual Studio 2008;
(3) Cmake-3.8.0-win32-x86.exe;
(4) OpenSceneGraph-3.0.0.zip;
(5) OpenSceneGraph-Data-3.0.0.zip;
(6) 3rdParty_VC9sp1_x86_x64_V7.zip;
(7) Autodesk 3ds max 2011;
(8) qt-win-opensource-4.7.4-vs2008;
(9) qt-vs-addin-1.1.11-opensource.
其中(3)Cmake-3.8.0-win32-x86.exe是用来对OSG源代码的软件, 并生成(2)Microsoft Visual Studio 2008能运行.sln文件; (4)OpenSceneGraph-3.0.0.zip中存放着OSG的源代码; (5)中存放着有关于OSG中的实例数据和一些物体模型, 如cow.osg、avatar.osg、lz.osg等; (6)3rdParty_VC9sp1_x86_x64_V7.zip中含有编译所依赖的OSG第三方库; (7)Autodesk 3dsmax 2011用于研究中所需的月面探测器的模型创建; (8)为Qt4.7.4的安装包, 它是一款跨平台的C++图形用户界面应用程序开发框架, 本研究中利用该软件来搭建可视化平台的界面; (9)是一款可以让Qt在VS2008上进行程序编写和框架搭建的插件.
上述(1)~(6)的工具是用于编译生成OSG的库, 并应用在本研究中的场景模型的显示, 在安装完成相应的软件后, 生成OSG的过程如图1所示.
2 三维建模和格式转换
OSG虽然是以OpenGL为底层进行渲染的, 但是同样也同OpenGL一样无法进行直接高效地建模. OSG中共有三种生成模型的方式: (1) 通过OpenGL的绘图基元封装后产生的几何体, 如osg:: Geometry; (2) OSG本身所携带大量的模型, 这些模型可以满足用户学习使用; (3) 通过第三方建模软件创建三维模型并导入OSG场景中. 本研究需要使用指定的空间机器人的模型, 第一种方法需要花费大量的时间和精力, 同时因为需要使用大量的绘图语句, 这将会使内存占用过多, 从而降低了程序的执行效率[5]; 第二种方法OSG的模型库中不能提供本研究中所需的模型, 因此采用第三种方法可以满足本研究中的需求.
市场上有很多功能强大的建模工具, 比如Autodesk 3ds Max、Maya、ZBrush、Blender等等, 它们都能够为建立三维模型提供很多高级命令, 而本研究决定选用Autodesk 3ds Max 2011软件创建三维模型, 并导出生成.3DS格式的文件.
2.1 探测器模型的组成及三视图探月工程探测器是由着陆器、上升器、轨道器和返回器等多个部分组成, 通过对月面采样的着陆器的结构特征分析, 对着陆器、上升器的主体部分建立三视图如图2所示.
图2(a), (b), (c)为着陆器的前视图、顶视图和左视图, 分别有太阳能电板、点火装置、土壤采集罐和机械臂等组成. 着陆器的作用是为了实现在月球表面实现软着陆, 并且通过自身携带的机械臂完成月面土壤的采集和封罐任务. 太阳能电板将太阳能转化为电能存储起来, 为月面采样和地月通信提供基础保障; 雷达用于月面通信, 比如月面环境信息的传输, 接收地面控制机械臂的指令信息等等, 点火装置能够为月面软着陆提供动力. 采样罐用于接收机械臂采集的样本, 并存储这些样品. 机械臂为四自由度机械臂, 即分为四段机械短臂和四个关节点. 在整个探月工程中, 地面人员通过遥操作系统控制机械臂来改变位置及姿态来完成月面无人采样任务.
图2(d)、(e)、(f)分别为探测器上升器的前视图、顶视图和左视图, 由点火装置、雷达等组成, 它的作用是在完成月面采样和封罐任务后, 携带月面土壤样本上升至月面轨道, 与月面轨道上的轨道器进行交会对接, 最终月面土壤被送至返回器内, 由返回器携带月面样本抵达地面.
2.2 三维模型创建和导出
Autodesk 3ds max软件提供了多种建模方式, 如: 基础建模、复合建模、多边形建模、面片建模和NUBRS建模等. 其中多边形建模是利用3dsmax中已有的几何体或者自行创建的几何体进行修改而创建生成的模型, 面片建模适用于一些表面性的建模, 如树叶等, NUBRS建模已经不是现在的主流建模方式, 需要使用时基本靠插件来实现, 经过分析, 本研究综合使用多边形建模、基础建模和复合建模三种方式. 本研究使用多变形建模来创建着陆器、上升器等; 使用基础建模和复合建模生成脚架和机械臂.
模型创建完成后, 需要对模型添加纹理材质. 在单个模型对象中需要用到多种贴图材质, 若对模型单个对象分离成多个对象进行贴图, 则会占用多个材质球, 同时增加文件的大小, 不利于后期的处理及导出生成.3DS文件格式, 经过分析, 决定采用多维子材质对模型进行贴图处理.
通过上述2.1中的三视图在Autodesk 3ds max 2011软件中使用各种高级命令创建三维模型, 并生成.max和.3DS文件, 整个过程的流程图如图3所示.
2.3 3DS文件格式说明3DS文件是由一个ID是“0x4D4D”的基本块(chunk)通过树状结构组成, 这个基本块是3DS文件中必不可少的, 是用于判断该文件是否为3DS文件. 一个块由三部分组成, 块的ID, 块的长度和块的数据内容, 而数据内容中又可以包含子块, 同样的每个子块中也可以包含它结构下的子块[6,7]. 在块的模式中, 它的总字节为块的长度, 其中ID占用前面2个字节, 接下来有4个字节来存储块的长度, 最后剩下的字节用于保存块的数据信息内容[8].
3DS文件是一种小型文件, 它能存储的场景内当个单个模型不能超过64 000个面, 在建模完成后需要计算3ds max中各个对象的面的总数, 若场景内单个对象超过64 000个面, 可以通过软件中命令修改器中提供的MultiRes、ProOptimizer等各种命令来对模型进行优化, 这些命令能够减少模型的面数和顶点数, 同时对模型最终的渲染效果的影响最小. 若是对象在减面后仍然无法满足导出.3DS格式的需求, 可以将单个对象进行分割变成多个对象, 同时又要保证尽量对象的个数比较少.
3DS文件在导出后无法保存位图等贴图, 只能保存漫反射的材质颜色, 因此在导出3DS文件的同时利用3ds max中的资源收集器将相应的模型材质导出, 并且在使用这些3DS文件中的模型时要重新附上贴图.
3 可视化显示系统搭建可视化显示平台界面可以更加方便用户对三维模型等的资源管理, 有效地减少了用户寻找模型位置所花的时间. 本研究使用Qt4.7.4和OSG库基于Windows7环境下使用C++编程语言搭建可视化界面. 可视化显示系统能够让月面探测器显示在场景中, 同时能够实现简单的缩放、旋转功能, 能够进行多方位的观测探测器.
3.1 系统说明使用Qt4.7.4在VS2008上进行可视化系统的界面设计, 在该界面的菜单栏中有任务、窗口、帮助这三个菜单项, 其中任务菜单中含有用于探月工程的各项任务列表, 而探测器可视化显示为其中的任务之一, 窗口菜单是自定义窗口布局, 帮助菜单是有关该系统的相关说明.
在菜单栏下方左边是资源管理器、文件管理器和任务管理器三个子窗口, 通过分页的方式显示出来, 右侧是任务窗口, 如可视化显示界面分布在该位置.
最下方的左右两边是相关进程的信息, 分别为文件接收信息, 后台监控信息和文件查询结果等.
3.2 三维重构可视化的设计三维重构可视化需要借助OSG中的各种库, 通过这些库可以完成对整个探测器的文件模型的三维重构, 并实现对场景中探测器的旋转, 缩放, 移动等功能. 整个三维重构所涉及到有关OSG库和工具库说明如下.
osg库, 提供用于创建场景中的二维或三维图形的节点类, 向量和矩阵运算的类、三维模型变换的类和有关渲染的类等. 这些类主要有osg::Geode, osg::Vec3, osg::PositionAttitudeTransform, osg::Vec4, osg::ShapeDrawable, osg::MatrixTransform等.
osgViewer库, 主要用于OSG的视窗管理, 它提供了各种视口类, 并且能与Qt结合使用. 相关的类如osgViewer::Viewer[9].
osgUtil库, 该库包含的类主要用于渲染器的创建和对osg场景中的模型进行相关的操作.
osgDB库, 提供三维模型数据库类和方法, 可用来实现对模型的读取, 从而实现模型显示在场景中的功能. 如osgDB::readNodeFile().
将模型显示在场景中有多种方法, 可以对模型整个全部一次性加载到场景中, 也可以对模型进行分割依次导入到场景中. 考虑到后续月面无人采样时控制机械臂移动, 本研究中采用将整个探测器模型分割开来分别加载到场景中. 分别为四段机械臂, 四个关节点和一个探测器主体共九个3DS文件. 在将3DS文件加载到场景后, 在程序中相关的参数描述如表1所示.
将探测器模型分为九个部分之前, 要对九个分开的模型的坐标轴的位置进行调整,探测器主体的坐标位置为第一段机械臂的位置, 机械臂mj_1的坐标轴位置和探测器主体的位置相同, 机械臂mj_2的坐标轴位置在机械臂mj_1的末端, 机械臂mj_3的坐标轴位置在机械臂mj_2的末端, 同理机械臂mj_4坐标轴的位置在机械臂mj_3的末端. 场景中坐标轴的位置能使探测器能够很好的连接起来并使后续机械臂移动时不会破坏模型的整体效果, 使的三维重构趋于真实情况.
要对其分别加载到场景中, 本研究从探测器主体开始依次加载剩余的文件, 直至完成所有3DS文件的读取.最后在加载模型和场景数据包括模型材质、光照等信息后, 完成整个模型重绘. 图4表示了加载3DS文件的整个过程.
整个加载模型到场景中分为以下六个步骤:
第一步: 读取探测器的主体部分的3DS文件, 并赋值给_model, 若探测器主体模型未成功读取, 则加载错误, 模型不显示; 将_model作为子节点赋给_MTModel;
第二步: 声明新的节点node, 读取机械臂1的3DS文件并赋给变量node, 如果机械臂不存在, 则不显示, 将node作为子节点添加到mj_1进行位置矩阵变换之后添加到_MTModel, 并将关节点1添加到机械臂1上.
第三步: 重新声明node变量, 读取机械臂2的3DS文件并赋给变量node, 将node作为子节点添加到mj_2进行位置矩阵变换之后添加到mj_1; 并将关节点2添加机械臂2上.
第四步: 重新声明node变量, 读取机械臂3的3DS文件并赋给变量node, 将node作为子节点添加到mj_3进行位置矩阵变换之后添加到mj_2; 并将关节点3添加机械臂3上.
第五步: 重新声明node变量, 读取机械臂4的3DS文件并赋给变量node, 将node作为子节点添加到mj_4进行位置矩阵变换之后添加到mj_3; 并将关节点4添加机械臂4上.
第六步: 将所有模型加载成一个组, 赋给m_group并进行位置和姿态初始化.
3.4 可视化场景显示在进行上述设计后, 在Windows7环境下的可视化界面及探测器三维重构的结果如图5所示.
4 结论与展望三维可视化系统采用面向对象C++为开发语言, 在Microsoft Visual Studio 2008平台上结合Qt和OSG库完成可视化界面的搭建, 使用Autodesk 3dsmax软件用于创建“嫦娥五号”探测器, 并利用该系统能够实现“嫦娥五号”探测器的三维重构可视化显示. 该系统还能通过旋转、缩放视角、移动等功能实现了对探测器进行全方位的观测, 为未来月面探测可视化显示方面提供一定的参考依据, 甚至对其它的有关星体探测提供一个可视化平台. 目前该系统还存在一定的不足, 有待后期进一步完善, 如控制机械臂移动, 模拟月面土壤采集的情景, 因此可在今后的工作中对如何控制机械臂模拟月面采样进行设计并进行可视化显示.
[1] |
齐真. 世界第一颗人造地球卫星成功发射60周年. 国际太空, 2017(9): 40-41. |
[2] |
余金睿. 基于虚拟现实技术VR-Platform平台的产品展示研究. 自动化技术与应用, 2017, 36(9): 56-59. DOI:10.3969/j.issn.1003-7241.2017.09.014 |
[3] |
刘楚斌, 李东, 薛楠, 等. 基于OSG的火箭飞行三维仿真技术研究. 计算机与数字工程, 2018, 46(1): 167-169, 194. DOI:10.3969/j.issn.1672-9722.2018.01.035 |
[4] |
Song JM, Yan ZH, Yuan H. Application of 3D virtual scene building technology based on OSG in gas station training simulation system. Advanced Materials Research, 2014, 918: 252-257. DOI:10.4028/www.scientific.net/AMR.918 |
[5] |
李泰国, 李文新, 王伟文, 等. 基于OpenGL空间机械臂三维重构可视化研究. 计算机技术与发展, 2018, 28(1): 178-181, 187. DOI:10.3969/j.issn.1673-629X.2018.01.038 |
[6] |
陈蕾, 赵正旭. 基于BNF的3DS文件格式规范化描述. 计算机系统应用, 2017, 26(5): 23-28. DOI:10.3969/j.issn.1003-3254.2017.05.005 |
[7] |
陈蕾. 深空探测三维实时可视化模型创建与管理研究[硕士学位论文]. 石家庄: 石家庄铁道大学, 2017.
|
[8] |
杨帆, 杨克俭, 王玉华, 等. 3DS文件格式与自定义文件格式的转换. 交通与计算机, 2004, 22(3): 101-104. DOI:10.3963/j.issn.1674-4861.2004.03.030 |
[9] |
鱼江海, 占怡. 基于OSG的三维场景构建. 黑龙江科技信息, 2010(1): 81. DOI:10.3969/j.issn.1673-1328.2010.01.075 |