APP下载

BIM 与Unity 3D 结合的室内导航系统

2020-10-22郑加柱

导航定位学报 2020年5期
关键词:楼梯网格程序

郭 语,郑加柱

(南京林业大学 土木工程学院,南京 210037)

0 引言

经过近十余年的发展,室内导航技术已取得了很大成就,其导航定位精度也能基本满足人们日常出行的需求,目前正逐步走向商业化,不少信息技术公司也已经推出了适用于商场、地下停车场等公共场所的盈利性技术服务支持[1]。但是,1 个完备的商业化室内导航系统应该包含室内3 维模型构建、室内位置信息的获取以及室内3 维场景下路径规划等3 部分,不能仅仅是1 个2 维模型下的导航系统,因此,构建室内3 维模型是室内导航的核心技术之一,目前室内3 维模型构建主要采用3 维点云[2]、建筑信息模型(building information modeling, BIM)[3]等方法,这些方法在构建纯粹的3 维模型时较为方便,但是不能直接发布模型和建立导航格网,因此,本文提出BIM 与3 维集成(Unity 3D)平台结合构建室内3 维模型,实现构建室内3 维模型的同时,建立室内导航的导航格网,为快速实现室内3 维场景导航提供技术支撑。在室内定位技术方面,基于无线局域网络(wireless local area networks, WLAN)的室内定位依然是如今研究的热点,本文也是通过获取WLAN 信号源的接收信号强度指示(received signal strength indicator, RSSI)值来计算空间距离实现室内定位,最后完成导航系统的定位以及后续的路径规划测试。

Unity 3D 是美国集成技术(Unity Technologies)公司开发的一款3 维/2 维游戏、建筑设计可视化、虚拟现实开发平台,可以为包括微软视窗(Windows)、安卓(Android)、苹果公司的移动操作系统(IOS)等主流操作系统开发软件[4];其基本开发语言为C#,其相比于C++语言、加瓦(Java)语言等具有易上手、操作简单等优点[5]。

1 室内3 维BIM 模型的构建

BIM 模型作为室内导航的底图数据,是以 欧特克·雷维特(Autodesk Revit)为平台,根据建筑设计图及各个房间的位置列表、信号源位置等生成BIM 模型。使用BIM 模型的优点在于可以及时查询、修正、更新相关数据,除此之外,其数据格式是通用、可以相互操作,这为数据的跨平台使用提供了便利,同时BIM 模型也包含电梯、楼梯、信号源身份标识号(identity, ID)信息等精细化数据,这样便可以实现精度较高的跨楼层的定位与导航功能[6]。因此,本文选用BIM 模型作为室内3 维场景构建的基本方法。

1.1 原始数据的准备

为研究室内3 维场景的导航,首先选择了南京林业大学实验楼作为实验区域。构建精度满足要求的室内3 维模型需要实验场地所在建筑的建筑图纸、楼梯节点结构图纸等原始资料。该实验模型共6 层,其部分楼梯节点结构设计图、建筑平面图如图1、图2 所示。

图1 楼梯节点图

1.2 三维BIM 模型构建方法与流程

构建用于程序开发的3 维BIM 模型场景底图,其基本步骤如下[7]:

1)创建网格、楼层线。根据建筑物的设计及建造情况创建基本网格与楼层分层线。网格的作用在于确定各建筑物构件的正确位置,为模型的 创建打好基础;楼层线的作用则在于确定各楼层间的高度距离,以便于后期楼板与梁的创建。

图2 试验区域建筑平面图

2)结构设计图、建筑平面图的导入。在创建网格与楼层线后,将准备好的结构设计图和建筑平面图导入,导入时应与第1 步中创建的网格相对应,以免出现位置偏差等错误。

3)创建3 维组件。依照结构设计图和建筑平面图依次绘制各种室内3 维组件,并将其放置于网格正确位置上。对于不同的组件应该选用不同的材质。

4)文件的保存与输出。将创建好的室内3 维模型保存为.rvt 文件格式。本实验区域的模型如图3 所示。

图3 实验区域BIM 模型

1.3 模型格式转换与在Unity 3D 中的加载

出于最终界面及程序美观的考虑,对于创建好的BIM 模型,将其导入3DS MAX 2018 中进行简单渲染,渲染后将其输出为 Unity 3D 可以使用的.fbx 文件格式,其结果如图4 所示。此模型将是后续室内导航程序的基本场景。

图4 Unity 3D 中3 维模型

2 室内导航程序开发与发布

2.1 开发平台与开发环境

程序开发语言为.NET C#,其版本为 Visual Studio 2012, 此导航程序包含1 个主体程序和2 个子程序。程序以生成类库并引用的形式实现了最终完整功能,其类型为 Windows Form 窗体应用程序。

2.2 导航系统开发基本流程

程序开发的基本思想是以Unity 3D 开发为主体,对于Unity 中使用脚本程序难以实现的,利用Visual Studio 2012 开发平台实现,完成各子程序的开发后,封装为类库文件并在Unity 3D 中使用脚本程序语言调用,最终实现全部功能。其具体的基本步骤如下:

1)3 维模型的导入与设置。将渲染与文件格式转换后的3 维模型分别导入到“自动导航”场景、“浏览模式”场景,并做一些参数的调整,如将3 维模型设置为不可穿透。

2)场景灯光设置。导入3 维模型后,由于模型较大,需要对场景中进行灯光设置与渲染。

3)摄影机的设置。为程序设置1 个主摄影机与1 个第1 人称跟随摄影机。

4)角色碰撞器的设置与第1 人称的实现。在场景中设置1 个基本角色(使用者视角主体),并为所做角色设置碰撞器(避免自动导航时出现穿墙等情况);为角色设置第1 人称视角,使用鼠标控制跟随摄影机的视角变换(可360°变换)。

5)导航网格的生成与实现、关键问题的解决、绘制导航路线。路线的实时绘制使用Unity 3D 中Line Renderer 组件实现。

6)WLAN 信息获取与定位子程序的制作与类库生成、目标房间输入子程序的制作与类库生成与引用。

7)设置界面的实现。设置中有2 项参数可以进行设置,分别为速度与重力设置。

8)程序界面UI 及窗体设计、程序测试与完善、程序版本与发布设置。

9)程序的测试与完善。

10)开发技术文档及使用说明的撰写。

2.3 导航网格生成的关键问题解决

导航网格生成是在Unity 3D 中实现路径规划及自动导航的第1 步,在Unity 3D 中提供了单独的路网生成及自动导航的组件方法, 即“Navigation”,该组件提供了导航网格快速生成、烘焙渲染的方法,也提供了实现自动导航的类库方法“AI”,但生成导航网格操作面板“Bake”选项的各参数(如表1 所示)需要选择合适的数值。本文根据所选实验场地的3 维模型反复实验,选择的参数数值如表1 所示,按此进行参数设置,可以完成导航网格的生成。

表1 “Bake”各输入参数说明

因室内3 维场景不同于2 维平面,在导航网格生成过程中发现:导航网格无法覆盖;楼梯、电梯等处的导航网格无法连接或连接不合理等。因此在参数设置时,需要选择合理的数值,其中Agent Radius 与Drop Height 的影响最为显著。

1)导航网格无法覆盖。本文在导航网格生成时,首先以实验模型的最小入口宽度0.7 m 为参照,将Agent Radius 设置为最小入口宽度的一半,同时以楼梯垂直高度为参照,将Drop Height 设置为1 m,此时出现导航网格无法完全覆盖的情况(如图5 浅灰色方框处所示)。在程序测试过程中,也发现导航物体(用户第1 人称视角的主体)不能跨越此导航网格缺失处,无法实现全实验场地的路径规 划与自动寻路。分析发现该问题是因为物体半径参数设置过大造成的,因此以0.1 m 为步长依次递减该参数。通过实验发现在物体半径参数设置为0.15 m 时,可以实现模型内导航网格的全部覆盖(如图6 所示)。

图5 导航网格未覆盖示意

图6 调整后导航网格覆盖示意

2)楼梯、电梯连接处无法连接或连接不合理。当实现了导航网格可以覆盖所有房间后,又发现当前设置的参数值(Agent Radius=0.15 m、Drop Height=1 m)生成的导航网格在程序运行时,在楼梯、电梯连接处极易出现导航网格无法生成或者生成错误的情况(如图7 所示),进而导致自动寻路被迫终止或程序的崩溃。

图7 楼梯连接处错误示意

由图7 中的方框处可看出,在楼梯与地面的连接处,由于导航网格连接不合理而导致了规划路径的跳跃,在这个位置物体(用户第1 人称视角的主体)会直接跳跃下部栏杆,与实际情况不符。分析发现引起此问题的主要原因是Agent Radius 参数值过低与Drop Height 参数值过高;因此,在上述设置的Agent Radius 参数值基础上,以0.02 m 为步长依次提高Agent Radius 参数值,同时以0.1 m 为步长依次降低Drop Height 参数值。通过多次实验最终在Agent Radius 值为0.21 m、Drop Height 值为0.5 m 时,在保证导航网格可以覆盖模型内所有房间的情况下,解决了楼梯处导航格网连接错误的问题(如图8 所示)。不过由图8 与图7 对比还可以发现,在楼梯处导航网格覆盖区域减小,靠近楼梯两侧处没有生成导航网格;但考虑到楼梯的功能是通行,因此,程序开发时设置了自动纠正功能来实现导航,即得到定位坐标后,程序首先会判断此处是否覆盖导航网格以及是否超出场景范围,当定位坐标位于无导航格网处或超出场景范围时,系统会自动求取距此最近的、覆盖导航网格处的坐标,并将此坐标作为最终坐标,实现纠正功能。

本文根据上述试验,总结出参数设置的几条规律与技巧:

1)Agent Radius 值越小,导航网格面积越大;如果设置过大,会导致部分入口较小的房间无法完全覆盖,如设置过小易导致像楼梯连接处的错误;设置此参数时应先确定所使用3 维模型最小入口的宽度,保证最小入口处可以生成导航网格。

2)Agent Height 值应保证小于3 维模型内最矮的楼层及入口高度。

3)Max Slope 值不能超过60º,应该以3 维模型内各楼梯最高坡度为准。

4)Step Height 值应保证大于3 维模型内最大 的楼梯垂直高度且不能大于Agent Height 值。

2.4 基于WLAN 室内定位子程序的开发

室内定位主要有基于WLAN 的定位技术[8]和基于红外线[9]、超宽带[10]、蓝牙[11]等,而路径规划及自动导航方法常用的为A*算法[12]、导航网格算法[13]等。本文采用基于WLAN 的定位技术和导航网格算法,基于.NET 开发平台,使用C#开发语言实现了RSSI 的自动获取、空间距离的计算以及使用3 边测量法计算得到待定点的空间3 维坐标,之后作为类库文件在主程序中进行引用,实现了程序实时定位功能。

对于距离的计算,本文使用式(1)的衰减因子模型[14]计算原理,即

式中:D 为所需的空间距离,RSSI 为获取的信号强度值,A 为发射端和接收端相隔1 m 时的信号强度,n 为环境衰减因子。为确定本系统此2 项参数的设置,在试验场景中通过设置不同的4 个信号源并采集它们在不同距离接收的信号强度(如图9所示);然后在最小二乘条件约束下分别进行拟合并取均值。在实验场景下,取A=-44 dB·m,n=4.0,最终在程序中实现,效果如图10 所示。

图9 RSSI 随距离变化图

程序中定位按钮可以实现对目标当前位置的自动运算,其定位方法为3 边测量定位原理[15],所需的接入点(access point, AP)坐标在本实验使用独立坐标系,坐标原点位于实验楼栋一楼大厅中心。由于定位精度变化的影响,可能会出现运算坐标超出场景范围或位于无导航网格处的情况。因此本程序会对定位结果进行判断,如出现上述情况,系统设置的自动纠正功能会按照2.3 节 所述原理进行纠正,以保证系统顺利运行。单击左侧“刷新当前位置”按钮,会显示计算得到并纠正后的3 维坐标,然后跳转到坐标处,如图11所示。

图10 定位功能程序效果

图11 定位坐标示意

2.5 程序UI 及窗体设计、发布设置

友好的程序使用界面、人性化程序使用方法是评价1 个程序好坏的重要标准,而这离不开用户界面设计及窗体设计。本文主程序的界面设计使用的是Unity 3D 中的用户界面(user interface, UI)设计系统,主要设计及制作内容为按钮的设置、小地图的制作、场景的跳转等,主要程序功能及定位导航过程示意图如图12 所示。

在完成程序的功能实现、UI 及窗体设计以及程序测试完善后,设置发布参数及版本后便可以发布程序。

3 结束语

基于位置服务(location based services, LBS)的技术近些年来发展讯猛,为人们的日常生活提供各项便利服务。目前在室外环境下已经有了成熟的定位导航技术,而在室内环境中,在基于WLAN 的定位技术和室内3 维模型的构建以及自动导航功能的实现等方面仍存在着许多需要解决的技术难题。本文主要以室内3 维模型的构建作为切入点进行研究,并面向室内定位导航技术的完整流程,开发室内3 维场景下的导航程序,旨在提供1 种可供借鉴的室内定位导航程序设计开发方案。本文选择使用Unity 3D 作为主程序的开发平台,将BIM 与Unity 3D 结合解决3 维模型构建的一些技术难题,配合基于WLAN 技术的定位程序和路径规划程序实现3 维场景下导航的基本功能。

猜你喜欢

楼梯网格程序
网格架起连心桥 海外侨胞感温馨
给Windows添加程序快速切换栏
追逐
试论我国未决羁押程序的立法完善
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
上下楼梯时要注意什么 ?
原来楼梯还可以是这样的
楼梯是长还是短