徐志刚,胡常英
(长安大学 信息工程学院,陕西 西安 710064)
近年来,随着车联网技术和人工智能的发展,智能车作为智能化的交通工具对交通事业的发展具有巨大的促进作用[1]。国内对智能车辆的测试也处于热潮,主要以传统的室外测试和室内的虚拟仿真测试为主。传统的室外测试具有安全隐患,容易受天气的影响,浪费了极大的物力和财力,不能满足重复测试,甚至一些极限的路况无法进行测试。室内的虚拟测试是基于虚拟现实技术和网络通信技术,构建虚拟汽车测试试验场,模拟出多种汽车测试的真实场景,在室内对智能车的性能进行测试,可以进行多次重复测试,不会受天气影响[2-5]。虚拟汽车试验场作为智能车虚拟测试的重要组成部分,因此对其研究与实现具有重大意义。
Unity3D是跨平台的游戏开发工具,有开源的游戏编辑开发环境,是一个专业的游戏引擎。Unity3D的最大优势是性价比高,兼容各种操作系统,开发出的产品用户可以直接进行下载,然后在手机、PC机上可以直接体验测试。Unity3D支持各种群体脚本语言,包括Javascript、C#、Python,真正实现了跨平台[6]。
虚拟汽车试验场的开发遵循软件开发的一般步骤,依次是分析、设计、开发、测试、修改反复且渐进地完成所规划的功能。系统的开发流程可以分为两部分:第一部分是构建汽车试验场的三维模型,其主要内容是利用三维建模软件3Dmax对试验场的道路、地形、建筑、龙门架、交叉口、高速环形跑道、环境等进行建模;第二部分是在虚拟的测试试验场中实现用户和三维的模拟车辆、用户和环境的交互,其主要内容是编写互动脚本,利用脚本把静态的三维模型与Unity3D连接起来,赋予模型交互的能力,即读取和处理用户驾驶模拟驾驶器的操作行为数据,如离合、刹车、油门等数据,使用处理后的数据驱动虚拟场景中的三维模拟车辆的运动[7-9]。系统开发的详细流程如图1所示。
图1 虚拟汽车测试试验场的开发流程
虚拟汽车试验场漫游系统的设计目标是为智能车的虚拟仿真测试提供一个真实的模拟环境,让用户去自由选择道路场景,对智能车的性能进行测试和评价。虚拟测试场景可分为静态的场景和动态的场景,其中静态场景包括:地形、树木、交叉口、高速环形道路、龙门架等;动态场景包括:智能车辆、道路车辆、行人、天气雨雪等。其场景的结构如图2所示。
图2 虚拟测试场景结构
虚拟汽车试验场的设计与规划如下:
(1)用户可以通过菜单选择不同的交通复杂场景,对车辆的性能进行测试。
(2)虚拟汽车试验场的三维展示功能。建立的静态场景和动态场景模型尽量接近现实,达到高仿真的逼真度,模拟出真实的测试场景。
(3)漫游功能。用户可以通过控制模拟驾驶器在虚拟汽车测试试验场内随意行驶和游览,然后到达自己的指定区域。
(4)设置鸟瞰图、小地图,便于用户了解整体的虚拟测试试验场及控制模拟驾驶器在漫游的过程中自己所处的位置。
1.3.1 场景建模技术
对于场景建模有两种方式,一种是利用Unity3D本身的功能建模,另一种是从外部导入模型。文中采用从外部导入模型的方式进行场景建模。以导入3Dmax软件的模型为例,首先需在3Dmax中建立三维模型,然后导出成.FBX的文件格式并保存模型纹理贴图,最后将模型导入到Unity3D,形成虚拟场景。
1.3.2 交互技术
交互是实现对虚拟汽车试验场场景漫游的主要方式。简单的交互可以用C#实现,如可以通过读取和处理用户控制模拟驾驶器的操作行为数据,并通过网络通信将其数据处理结果发送给Unity3D并作为驱动车辆行驶的函数参数,用它驱动虚拟车移动,实现用户利用驾驶模拟器控制虚拟场景中车辆的漫游[10-11]。
GUI交互界面的设计,用户可以选择点击菜单,切换不同的交通场景,也可以选择不同的车辆进行漫游,方便用户操作。
虚拟场景包括建筑模型、车辆道路模型、车辆模型和自然环境。通过CAD规划平面图以及数码相机获得具体的建筑数据,构建建筑模型。车辆道路模型、自然环境通过软件自带的模型构建,车辆模型从网上下载,然后导入到Unity3D中进行使用。
2.1.1 信息的获取
要建立仿真逼真高的虚拟汽车试验场环境,获得真实的测试试验场的空间数据信息是关键。文中主要采取以下几种方法获取试验场的数据。
(1)寻求学校相关部门的支持,搜寻初建学校时的CAD规划图,根据图纸得到部分的数据信息。
(2)通过航拍得到试验场的空间信息数据,与CAD规划的图纸进行比较,校准其数据的正确性。
(3)用测量工具对试验场中标识不清楚的地方进行重新测量和标定。
(4)用相机拍摄重要的建筑和周围的环境,尽量拍其正视图,并对其图片进行处理以达到好的清晰度,作为建筑模型和周围环境的纹理贴图,以模拟真实的试验场环境。
2.1.2 模型的构建
建筑模型是虚拟测试试验场中的地形、建筑物、道路、标志牌、行人,通过无人机航拍后获得数据,根据获取的数据在3dmax中构建的三维模型。环境部分主要包括天气、花草和树木,这些可以在Unity3D中通过调其材质库进行构建,并需要对多边形模型进行优化和裁剪,这样可以降低CPU和内存的使用率,使得图形的渲染更加逼真[12-16]。虚拟汽车试验场的部分三维模型如图3所示。
图3 虚拟测试试验场模型
人机交互技术是指通过计算机的输入、输出设备,以有效的方式实现人与计算机之间的对话的技术,它能将数据及时地显示和反馈给用户。在该系统中,人机交互包括GUI界面的设计和漫游的设计。
用户图形界面是用户体验和操作的部分,因此对其的设计至关重要。在Unity3D中,这种界面被称作GUI,GUI的编写是采用脚本的方式,利用VS调用API函数进行的,编写完成后将代码拖放给摄像机对象。在Unity3D里GUI这个类包含一些高级控件,如Label,Button,ToolBar等。该系统设计的GUI界面为用户选择交通场景和不同类型的车辆提供便利,用户可以点击菜单按钮选择不同的交通场景进行漫游,如点击无人车菜单按钮,弹出一个对话框可以选择红绿灯路口、交叉口、环形道路等交通场景[17-21]。下面以红绿灯位置的菜单设计为例,其主要程序代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class position :MonoBehaviour {
public Transform car;
GameObject car;
public Transform mcube;
public voidm PositionTraffic lights()
{ mcar=GameObject.Find("Carnet(Clone)");
mcar.transform.position=mcube.position;
mcar.transform.rotation=mcube.rotation;
}
}
虚拟汽车试验场GUI设计界面如图4所示。
图4 GUI界面
系统的漫游是用户可以控制驾驶模拟器在不同场景下行驶实现与虚拟测试场景之间进行交互。漫游系统的设计主要分为以下几部分:
(1)采集用户控制驾驶模拟器的驾驶行为数据。编写串口助手软件并利用驾驶模拟器厂家提供的串口通信协议,将驾驶员的操作行为数据(如刹车、油门、方向盘转角、离合)读取出来。
(2)数据处理与网络通信。将读取的数据按照解析协议进行解析,分离出刹车、油门、离合、方向盘转角等数据,使用TCP/IP进行网络通信,将数据实时发送给服务器。
(3)驱动虚拟车辆行驶。服务器将收到的数据,在Unity3D的脚本文件中驱动车辆的行驶。
(4)设置小地图,当用户在控制虚拟车辆以第一人称视角在虚拟场景中漫游时,右下角的小地图中会出现虚拟车辆运动的局部细节。漫游过程中的小地图显示如图5所示。
图5 小地图显示
漫游结果展示:
用户以第一人称视角在虚拟汽车试验场的各个交通场景中的漫游结果(如交叉口和环形高速跑道)如图6所示。
虚拟汽车试验场场景是要在室内进行智能车测试使用的,人机交互对软件的大小和电脑的配置以及对场景的渲染具有较高的要求。因此,可以从软件建模和脚本语言控制两方面对软件进行优化。
图6 交叉口和环形高速跑道
随着虚拟汽车试验场测试场景的增多,渲染时消耗的系统资源随之增多。可以对模型进行优化,尽量减少模型的体积大小,并将用户看不到的隐形的线、面进行删除,场景中花草树木使用图片贴图,对树木不进行三维建模,同时对灯光也做了一定的优化,从而加快渲染的速度。
在脚本的编写中,首先要保证逻辑正确,其次将需要频繁执行且不通过事件触发的方法改为每隔几帧执行一次和避免调用高开销的Unity API。最后如果在Update函数中存在用不到的某些方法,可以将该函数从Update中移除。
文中将虚拟现实技术应用到数字化和网络化的虚拟汽车试验场中,采用多场景建模方法,利用3Dmax构建试验场的三维模型,并借助Unity3D游戏引擎实现了对测试场的三维仿真漫游。用户可以控制驾驶模拟器以第一人称视角在各个交通场景中进行漫游,以体验和检测该仿真系统的真实性。该系统为室内智能车的测试提供一个好的虚拟测试环境,以迎合智能车测试时代的到来,也证明了Unity3D是设计、开发虚拟现实平台的有效工具。