bim+u3d是什么?BIM技术应用:BIM与Unity 3D结合的室内导航系统
引文格式:郭语,郑加柱.BIM与Unity3D结合的室内导航系统[J].导航定位学报,2020,8(5):25-31.(GUOYu,ZHENGJiazhu.IndoornavigationsystemcombiningBIMandUnity3D[J].JournalofNavigationandPositioning,2020,8(5):25-31.)DOI:10.16547/j.cnki.10-1096.20200504.
BIM与Unity3D结合的室内导航系统
郭语,郑加柱
(南京林业大学土木工程学院,南京210037)
摘要:针对现有室内导航技术中,室内3维模型构建方法存在对室内某些特殊位置难以识别、小空间导航格网建立困难等问题,提出采用建筑信息3维模型结合Unity3D平台进行室内3维模型及导航格网构建的方法:基于无线局域网室内定位技术实现室内距离与空间坐标的计算;通过创建网格和楼层线、导入建筑结构图和平面图、创建3维组件,输出文件并转换成可用格式;最后开发室内3维场景导航程序,完成室内定位、路径规划及自动寻路等主要功能。结果证明该方法可以实现室内自动导航。
0引言
经过近十余年的发展,室内导航技术已取得了很大成就,其导航定位精度也能基本满足人们日常出行的需求,目前正逐步走向商业化,不少信息技术公司也已经推出了适用于商场、地下停车场等公共场所的盈利性技术服务支持[1]。但是,1个完备的商业化室内导航系统应该包含室内3维模型构建、室内位置信息的获取以及室内3维场景下路径规划等3部分,不能仅仅是1个2维模型下的导航系统,因此,构建室内3维模型是室内导航的核心技术之一,目前室内3维模型构建主要采用3维点云[2]、建筑信息模型(buildinginformationmodeling,BIM)[3]等方法,这些方法在构建纯粹的3维模型时较为方便,但是不能直接发布模型和建立导航格网,因此,本文提出BIM与3维集成(Unity3D)平台结合构建室内3维模型,实现构建室内3维模型的同时,建立室内导航的导航格网,为快速实现室内3维场景导航提供技术支撑。在室内定位技术方面,基于无线局域网络(wirelesslocalareanetworks,WLAN)的室内定位依然是如今研究的热点,本文也是通过获取WLAN信号源的接收信号强度指示(receivedsignalstrengthindicator,RSSI)值来计算空间距离实现室内定位,最后完成导航系统的定位以及后续的路径规划测试。
Unity3D是美国集成技术(UnityTechnologies)公司开发的一款3维/2维游戏、建筑设计可视化、虚拟现实开发平台,可以为包括微软视窗(Windows)、安卓(Android)、苹果公司的移动操作系统(IOS)等主流操作系统开发软件[4];其基本开发语言为C#,其相比于C++语言、加瓦(Java)语言等具有易上手、操作简单等优点[5]。
1、室内3维BIM模型的构建
BIM模型作为室内导航的底图数据,是以欧特克·雷维特(AutodeskRevit)为平台,根据建筑设计图及各个房间的位置列表、信号源位置等生成BIM模型。使用BIM模型的优点在于可以及时查询、修正、更新相关数据,除此之外,其数据格式是通用、可以相互操作,这为数据的跨平台使用提供了便利,同时BIM模型也包含电梯、楼梯、信号源身份标识号(identity,ID)信息等精细化数据,这样便可以实现精度较高的跨楼层的定位与导航功能[6]。因此,本文选用BIM模型作为室内3维场景构建的基本方法。
1.1原始数据的准备
为研究室内3维场景的导航,首先选择了南京林业大学实验楼作为实验区域。构建精度满足要求的室内3维模型需要实验场地所在建筑的建筑图纸、楼梯节点结构图纸等原始资料。该实验模型共6层,其部分楼梯节点结构设计图、建筑平面图如图1、图2所示。
图1楼梯节点图
图2试验区域建筑平面图
1.2三维BIM模型构建方法与流程
构建用于程序开发的3维BIM模型场景底图,其基本步骤如下:
1)创建网格、楼层线。根据建筑物的设计及建造情况创建基本网格与楼层分层线。网格的作用在于确定各建筑物构件的正确位置,为模型的创建打好基础;楼层线的作用则在于确定各楼层间的高度距离,以便于后期楼板与梁的创建。
2)结构设计图、建筑平面图的导入。在创建网格与楼层线后,将准备好的结构设计图和建筑平面图导入,导入时应与第1步中创建的网格相对应,以免出现位置偏差等错误。
3)创建3维组件。依照结构设计图和建筑平面图依次绘制各种室内3维组件,并将其放置于网格正确位置上。对于不同的组件应该选用不同的材质。
4)文件的保存与输出。将创建好的室内3维模型保存为.rvt文件格式。本实验区域的模型如图3所示。
图3实验区域BIM模型
1.3模型格式转换与在Unity3D中的加载
出于最终界面及程序美观的考虑,对于创建好的BIM模型,将其导入3DSMAX2018中进行简单渲染,渲染后将其输出为Unity3D可以使用的.fbx文件格式,其结果如图4所示。此模型将是后续室内导航程序的基本场景。
图4Unity3D中三维模型
2、室内导航程序开发与发布
2.1开发平台与开发环境
程序开发语言为.NETC#,其版本为VisualStudio2012,此导航程序包含1个主体程序和2个子程序。程序以生成类库并引用的形式实现了最终完整功能,其类型为WindowsForm窗体应用程序。
2.2导航系统开发基本流程
程序开发的基本思想是以Unity3D开发为主体,对于Unity中使用脚本程序难以实现的,利用VisualStudio2012开发平台实现,完成各子程序的开发后,封装为类库文件并在Unity3D中使用脚本程序语言调用,最终实现全部功能。其具体的基本步骤如下:
1)3维模型的导入与设置。将渲染与文件格式转换后的3维模型分别导入到“自动导航”场景、“浏览模式”场景,并做一些参数的调整,如将3维模型设置为不可穿透。
2)场景灯光设置。导入3维模型后,由于模型较大,需要对场景中进行灯光设置与渲染。
3)摄影机的设置。为程序设置1个主摄影机与1个第1人称跟随摄影机。
4)角色碰撞器的设置与第1人称的实现。在场景中设置1个基本角色(使用者视角主体),并为所做角色设置碰撞器(避免自动导航时出现穿墙等情况);为角色设置第1人称视角,使用鼠标控制跟随摄影机的视角变换(可360°变换)。
5)导航网格的生成与实现、关键问题的解决、绘制导航路线。路线的实时绘制使用Unity3D
中LineRenderer组件实现。
6)WLAN信息获取与定位子程序的制作与类库生成、目标房间输入子程序的制作与类库生成与引用。
7)设置界面的实现。设置中有2项参数可以进行设置,分别为速度与重力设置。
8)程序界面UI及窗体设计、程序测试与完善、程序版本与发布设置。
9)程序的测试与完善。
10)开发技术文档及使用说明的撰写。
2.3导航网格生成的关键问题解决
导航网格生成是在Unity3D中实现路径规划及自动导航的第1步,在Unity3D中提供了单独的路网生成及自动导航的组件方法,即“Navigation”,该组件提供了导航网格快速生成、烘焙渲染的方法,也提供了实现自动导航的类库方法“AI”,但生成导航网格操作面板“Bake”选项的各参数(如表1所示)需要选择合适的数值。本文根据所选实验场地的3维模型反复实验,选择的参数数值如表1所示,按此进行参数设置,可以完成导航网格的生成。
因室内3维场景不同于2维平面,在导航网格生成过程中发现:导航网格无法覆盖;楼梯、电梯等处的导航网格无法连接或连接不合理等。因此在参数设置时,需要选择合理的数值,其中AgentRadius与Height的影响最为显著。
1)导航网格无法覆盖。本文在导航网格生成时,首先以实验模型的最小入口宽度0.7m为参照,将AgentRadius设置为最小入口宽度的一半,同时以楼梯垂直高度为参照,将Height设置为1m,此时出现导航网格无法完全覆盖的情况(如图5浅灰色方框处所示)。在程序测试过程中,也发现导航物体(用户第1人称视角的主体)不能跨越此导航网格缺失处,无法实现全实验场地的路径规划与自动寻路。分析发现该问题是因为物体半径参数设置过大造成的,因此以0.1m为步长依次递减该参数。通过实验发现在物体半径参数设置为0.15m时,可以实现模型内导航网格的全部覆盖(如图6所示)。
图5导航网格未覆盖示意
图6调整后导航网格覆盖示意
2)楼梯、电梯连接处无法连接或连接不合理。当实现了导航网格可以覆盖所有房间后,又发现当前设置的参数值(AgentRadius=0.15m、Height=1m)生成的导航网格在程序运行时,在楼梯、电梯连接处极易出现导航网格无法生成或者生成错误的情况(如图7所示),进而导致自动寻路被迫终止或程序的崩溃。
图7楼梯连接处错误示意
由图7中的方框处可看出,在楼梯与地面的连接处,由于导航网格连接不合理而导致了规划路径的跳跃,在这个位置物体(用户第1人称视角的主体)会直接跳跃下部栏杆,与实际情况不符。分析发现引起此问题的主要原因是AgentRadius参数值过低与Height参数值过高;因此,在上述设置的AgentRadius参数值基础上,以0.02m为步长依次提高AgentRadius参数值,同时以0.1m为步长依次降低Height参数值。通过多次实验最终在AgentRadius值为0.21m、Height值为0.5m时,在保证导航网格可以覆盖模型内所有房间的情况下,解决了楼梯处导航格网连接错误的问题(如图8所示)。不过由图8与图7对比还可以发现,在楼梯处导航网格覆盖区域减小,靠近楼梯两侧处没有生成导航网格;但考虑到楼梯的功能是通行,因此,程序开发时设置了自动纠正功能来实现导航,即得到定位坐标后,程序首先会判断此处是否覆盖导航网格以及是否超出场景范围,当定位坐标位于无导航格网处或超出场景范围时,系统会自动求取距此最近的、覆盖导航网格处的坐标,并将此坐标作为最终坐标,实现纠正功能。
图8调整后楼梯连接处示意
本文根据上述试验,总结出参数设置的几条规律与技巧:
1)AgentRadius值越小,导航网格面积越大;如果设置过大,会导致部分入口较小的房间无法完全覆盖,如设置过小易导致像楼梯连接处的错误;设置此参数时应先确定所使用3维模型最小入口的宽度,保证最小入口处可以生成导航网格。
2)AgentHeight值应保证小于3维模型内最矮的楼层及入口高度。
3)MaxSlope值不能超过60?,应该以3维模型内各楼梯最高坡度为准。
4)StepHeight值应保证大于3维模型内最大
的楼梯垂直高度且不能大于AgentHeight值。
2.4基于WLAN室内定位子程序的开发
室内定位主要有基于WLAN的定位技术[8]和基于红外线[9]、超宽带[10]、蓝牙[11]等,而路径规划及自动导航方法常用的为A*算法[12]、导航网格算法[13]等。本文采用基于WLAN的定位技术和导航网格算法,基于.NET开发平台,使用C#开发语言实现了RSSI的自动获取、空间距离的计算以及使用3边测量法计算得到待定点的空间3维坐标,之后作为类库文件在主程序中进行引用,实现了程序实时定位功能。
图9RSSI随距离变化图
程序中定位按钮可以实现对目标当前位置的自动运算,其定位方法为3边测量定位原理[15],所需的接入点(accesspoint,AP)坐标在本实验使用独立坐标系,坐标原点位于实验楼栋一楼大厅中心。由于定位精度变化的影响,可能会出现运算坐标超出场景范围或位于无导航网格处的情况。因此本程序会对定位结果进行判断,如出现上述情况,系统设置的自动纠正功能会按照2.3节所述原理进行纠正,以保证系统顺利运行。单击左侧“刷新当前位置”按钮,会显示计算得到并纠正后的3维坐标,然后跳转到坐标处,如图11所示。
图10定位功能程序效果
图11定位坐标示意
2.5程序UI及窗体设计、发布设置
友好的程序使用界面、人性化程序使用方法是评价1个程序好坏的重要标准,而这离不开用户界面设计及窗体设计。本文主程序的界面设计使用的是Unity3D中的用户界面(userinterface,UI)设计系统,主要设计及制作内容为按钮的设置、小地图的制作、场景的跳转等,主要程序功能及定位导航过程示意图如图12所示。
在完成程序的功能实现、UI及窗体设计以及程序测试完善后,设置发布参数及版本后便可以发布程序。
图12导航系统主要界面及功能
3、结束语
基于位置服务(locationbasedservices,LBS)的技术近些年来发展讯猛,为人们的日常生活提供各项便利服务。目前在室外环境下已经有了成熟的定位导航技术,而在室内环境中,在基于WLAN的定位技术和室内3维模型的构建以及自动导航功能的实现等方面仍存在着许多需要解决的技术难题。本文主要以室内3维模型的构建作为切入点进行研究,并面向室内定位导航技术的完整流程,开发室内3维场景下的导航程序,旨在提供1种可供借鉴的室内定位导航程序设计开发方案。本文选择使用Unity3D作为主程序的开发平台,将BIM与Unity3D结合解决3维模型构建的一些技术难题,配合基于WLAN技术的定位程序和路径规划程序实现3维场景下导航的基本功能。
参考文献(略),原文有删减
作者简介:郭语(1997—),男,山东淄博人,硕士研究生,研究方向为“3S”技术集成与应用。
通信作者:郑加柱(1971—),男,江苏盱眙人,博士,副教授,研究方向为GNSS定位技术与精密工程测量。
Revit中文网作为国内知名BIM软件培训交流平台,几十万Revit软件爱好者和你一起学习Revit,不仅仅为广大用户提供相关BIM软件下载与相关行业资讯,同时也有部分网络培训与在线培训,欢迎广大用户咨询。
网校包含各类BIM课程320余套,各类学习资源270余种,是目前国内BIM类网校中课程最有深度、涵盖性最广、资源最为齐全的网校。网校课程包含Revit、Dynamo、Lumion、Navisworks、Civil 3D等几十种BIM相关软件的教学课程,专业涵盖土建、机电、装饰、市政、后期、开发等多个领域。
需要更多BIM考试教程或BIM视频教程,可以咨询客服获得更多免费Revit教学视频。
BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.wanbim.com),一起共同探讨学习BIM技术,了解BIM应用!
相关培训