基于CAD图生成三维模型的室内定位系统及方法与流程

文档序号:16903530发布日期:2019-02-19 18:12阅读:634来源:国知局
基于CAD图生成三维模型的室内定位系统及方法与流程

本发明属于室内定位领域,尤其是一种基于cad图生成三维模型的室内定位系统及方法。



背景技术:

现有的基于图像的建模技术中传统的方法是通过一些建模软件,比如3dsmax、maya等建模软件实现建模,以及使用三维扫描仪扫描物体从而得到三维模型,这种传统的方法虽然建模效果良好,但是可操作性高,复杂度高,自动化性低。同时现在比较流行的三维重建技术,但是其也存在很多缺点,基于图像的三维重建技术需要若干幅基于真实的三维物体或者场景的真实感知的图像,场景中图像都是二维信息,用户很难获取二维图像中获取重要信息。总之现有的基于图像的建模技术或多或少有其一定的缺点。

同时,现在的定位系统一般都是将定位信息显示在二维的地图上,可视性效果并不好,真实感也不足,同时基于卫星的定位技术也不能准确的定位到室内的具体位置。



技术实现要素:

针对上述问题,本发明提供了一种基于cad图生成三维模型的室内定位系统,包括:室内定位模块,定位追踪模块,系统显示模块,2d平面图转3d模块;

室内定位模块:采用rssi定位方法,在室内区域设置采样点,并通过离线训练划分室内区域网格,再通过wifi接收采样点所包含的信息,同时将所得采样点信息进行处理储存;当用户持手机在场景中移动时,通过wifi获取用户实时信息,通过神经网络将用户实时信息与采样点信息进行数据匹配,获取用户的位置信息,并将过的位置信息与用户相应的id上传至服务器;

定位追踪模块:从服务器上获取用户的位置信息与id,将用户的位置信息通过数学建模和三维模型的坐标系统统一起来,将统一后的坐标带入三维模型中,通过实时获取用户位置信息,得到用户在三维模型中的运动轨迹,再对用户的运动轨迹进行平滑处理和储存,通过系统显示模块进行显示;

系统显示模块:对用户轨迹进行实施显示及回放,同时对三维模型进行控制,对三维模型的视角进行切换;

2d平面图转3d模块:解析autocad提供的2d平面图,生成三维模型,并将模型传送给系统显示模块进行显示。

采用一种基于cad图生成三维模型的室内定位系统进行室内定位的方法,包括以下步骤:

步骤1.室内定位模块通过wifi定位技术获取室内人员的位置信息:

采用基于rssi定位方法,通过该系统sdk获取到周围各个ap发送的信号强度rssi以及ap地址。具体实现是通过rssi的指纹算法,在室内区域设置采样点,拖过离线训练划分室内区域网格,再通过wifi接受采样点,该采样点包含了很多具体信息,有位置信息,以及ap地址信息,将采集的数据进行处理,当用户持手机在场景中移动时,获取实时的信息,然后通过神经网络进行数据匹配,从而获取人员的位置信息。可以实时的获取位置坐标,比如间隔0.5s上传一次位置。将位置坐标转换到模型坐标系中,方便后续的三维模型中位置的定位,以及轨迹的绘制。

步骤2.室内定位模块将所得用户位置信息转换成三维坐标并上传:将获取的三维位置坐标和人员相应的id上传至服务器。其中,三维位置信息包括从gps中获取的经度、纬度以及海拔高度。三维位置信息分为两种:一种是gcj-02坐标(例如谷歌地图api,高德地图api,腾讯地图api所提供的坐标);另一种是gcj-02经过偏移算法所得到的坐标(例如百度api,搜狗api所提供的坐标)。人员id可以是系统区分不同人员的key,不同id的人对应其相应的位置信息。通过定义一种数据结构实现包括所有的信息,重点是三维位置信息。

定位追踪模块将用户的位置信息经过数学建模和三维模型的坐标统一:

定义两个坐标系:a坐标系为用户室内位置的三维坐标系,b为室内地图上的坐标系;通过变换矩阵,将a坐标系下的位置坐标转换到b坐标系表示,将转换后的位置坐标实时上传至服务器;

步骤3.2d平面图转3d模块对dxf格式的2d平面图进行解析,一个dxf文件有若干个组构成,每个组占两行。第一行为组的代码,第二行为组值,通过查询cad文档,解析cad图元信息,将解析所得到的数据进行存储;

步骤4.2d平面图转3d模块通过解析2d平面图所得到的数据结合现有的三维图形库生成三维模型;

步骤4.1:采用世界矩阵来完成所构建模型墙的位置,长宽高的缩放,自身的旋转,将模型转换到世界空间;采用观察矩阵将三维模型呈现在观察者视野内,将世界空间内的世界坐标变换到观察空间,从摄像机的角度观察三维模型;在观察空间中,所有坐标落在一个特定的范围内,采用裁剪矩阵,将特定范围外的点裁剪掉;采用投影矩阵将指定的范围的坐标变换为标准化设备坐标的范围(-1.0,1.0);解析顶点的数据主要是通过顶点着器实现的,然后通过光栅化实现顶点属性的插值,然后通过片元着色器实现最后的合并输出。其中还涉及到深度测试,和混合操作(实现透明效果)。

当所有顶点被变换到裁剪空间,执行透视除法:

最终的坐标会被映射到投影空间中,并被变换成片段,全部变换矩阵相乘就得到最终屏幕三维效果:

vclip=mprojection·mview·mmodel·vlocal

步骤4.2:由于三维场景中渲染的围墙,都属于立方体,仅仅是位置,旋转和缩放不同,而一个4×4矩阵可以决定这三个因素,采用实例化方法,把所有不同变换的4×4矩阵存储到一个mat4vector中,然后将vector传入到着色器其中,执行一次渲染操作,完成对三维场景中围墙的渲染;

步骤4.3:楼层边界的获取,cad图中其所有楼层都是绘制在一个x,y坐标系中,根据解析的数据无法直接区分不同楼层,该系统采用深度搜索或者广度搜索遍历所有的边数据,将所有line的x和y坐标排序,初始化分解线为最小的y值,然后遍历所有直线坐标,当发现两点没有联通时,证明该两点之间就是不同楼层的分界线;获取不同楼层分界线,根据楼层的分界线实现不同楼层的叠加;

步骤4.4:场景相机的设置,从不同角度观看三维模型,需要在场景中添加一个相机实现不同角度的切换;场景中摄像机方向如式所示:

cameradirection=camerapos-camerataget

同时需要一个右向量,它代表摄像机空间的x轴方向,可以通过先定义上向量,然后把上向量和方向向量叉乘,从而得到右向量,如式所示:

cameraright=up×cameradirection

最后根据右向量和方向向量来确定上向量,如式所示:

cameraup=cameraright×cameradirection

最后通过设置识别鼠标和键盘操作的上下文来通过鼠标滚轮和键盘上的上下左右键控制的场景相机的移动;

步骤5:将步骤2所得用户位置的三维坐标带入三维模型中:实时更新地图显示信息,将用户位置实时显示在设备地图上;

步骤6:将位置坐标点渲染在三维模型中,通过系统显示模块实现轨迹的显示:

为初始化的建筑模型,贴上相应的纹理,通过顶点着色器、片元着色器实现光照效果,从而进行一些简单的渲染;

步骤6.1:在三维模型中添加一个天空盒,增加视觉效果;天空盒是通过立方体贴图实现的,包含6个2d纹理的立方纹理,立方体的中心位于原点,使用立方体的实际位置向量来对立方体贴图进行采样,然后再设置纹理的过滤方式:线性过滤,环绕方式gl_clamp_to_edge:纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果;

步骤6.2:光照渲染,在场景中添加了平行光源,环境的光照由环境光,漫反射光照和镜面反射光照三部分组成,漫反射光照的实现是通过入射光与法线之间夹角的大小来判断的,如式所示:

i=|lightdirection|*|normal|*cosθ

其中lightdirection和normal都是单位向量,所以强度的大小取决于θ;

镜面反射的大小是由h向量和法向量normal之间夹角的大小而决定的,如式所示:

spec=power(max(0,dot(n,h)),shininess)

光照方向向量与视角向量的半向量化得到h向量,如式所示:

h=normalize(lightdirection+viewdirction)。

有益效果:

基于cad图生成三维模型的室内定位系统可以根据cad图一键生成三维模型,同时将人员室内的位置信息和运动轨迹显示到三维模型中。

基于cad图的一键生成三维模型,操作性简单,自动化性高,同时效果也比较真实。基于wifi的室内定位系统,可以精确的获取人员在室内的位置信息,将位置信息展示在三维模型中,可视性效果更好。

附图说明

图1是基于cad图生成三维模型的定位系统的框架图。

图2是cad解析流程图。

图3是坐标空间转换图。

图4是透视投影图。

图5是三维模型渲染原理图。

图6是cad中的机关楼图。

图7是由2d生成的三维模型。

图8是三维模型显示室内运动情况图。

图9是实时(每隔0.5s)坐标数据。

图10是系统界面图。

具体实施方式

如图1所示,一种基于cad图生成三维模型的室内定位系统,包括:室内定位模块,定位追踪模块,系统显示模块,2d平面图转3d模块;

室内定位模块:采用rssi定位方法,在室内区域设置采样点,并通过离线训练划分室内区域网格,再通过wifi接收采样点所包含的信息,同时将所得采样点信息进行处理储存;当用户持手机在场景中移动时,通过wifi获取用户实时信息,通过神经网络将用户实时信息与采样点信息进行数据匹配,获取用户的位置信息,并将过的位置信息与用户相应的id上传至服务器;

定位追踪模块:从服务器上获取用户的位置信息与id,将用户的位置信息通过数学建模和三维模型的坐标系统统一起来,将统一后的坐标带入三维模型中,通过实时获取用户位置信息,得到用户在三维模型中的运动轨迹,再对用户的运动轨迹进行平滑处理和储存,通过系统显示模块进行显示;

系统显示模块:对用户轨迹进行实施显示及回放,同时对三维模型进行控制,对三维模型的视角进行切换;如图10所示;

2d平面图转3d模块:解析autocad提供的2d平面图,生成三维模型,并将模型传送给系统显示模块进行显示。

采用一种基于cad图生成三维模型的室内定位系统进行室内定位的方法,包括以下步骤:

步骤1.室内定位模块通过wifi定位技术获取室内人员的位置信息:

采用基于rssi定位方法,通过该系统sdk获取到周围各个ap发送的信号强度rssi以及ap地址。具体实现是通过rssi的指纹算法,在室内区域设置采样点,拖过离线训练划分室内区域网格,再通过wifi接受采样点,该采样点包含了很多具体信息,有位置信息,以及ap地址信息,将采集的数据进行处理,当用户持手机在场景中移动时,获取实时的信息,然后通过神经网络进行数据匹配,从而获取人员的位置信息。可以实时的获取位置坐标,比如间隔0.5s上传一次位置。将位置坐标转换到模型坐标系中,方便后续的三维模型中位置的定位,以及轨迹的绘制。

步骤2.室内定位模块将所得用户位置信息转换成三维坐标并上传:将获取的三维位置坐标和人员相应的id上传至服务器。其中,三维位置信息包括从gps中获取的经度、纬度以及海拔高度。三维位置信息分为两种:一种是gcj-02坐标(例如谷歌地图api,高德地图api,腾讯地图api所提供的坐标);另一种是gcj-02经过偏移算法所得到的坐标(例如百度api,搜狗api所提供的坐标)。人员id可以是系统区分不同人员的key,不同id的人对应其相应的位置信息。通过定义一种数据结构实现包括所有的信息,重点是三维位置信息,如图9所示。

定位追踪模块将用户的位置信息经过数学建模和三维模型的坐标统一:

定义两个坐标系:a坐标系为用户室内位置的三维坐标系,b为室内地图上的坐标系;通过变换矩阵,将a坐标系下的位置坐标转换到b坐标系表示,将转换后的位置坐标实时上传至服务器;

步骤3.如图2所示,2d平面图转3d模块对dxf格式的2d平面图进行解析,一个dxf文件有若干个组构成,每个组占两行。第一行为组的代码,第二行为组值,通过查询cad文档,解析cad图元信息,将解析所得到的数据进行存储;图6为被解析的2d平面图;

步骤4.2d平面图转3d模块通过解析2d平面图所得到的数据结合现有的三维图形库生成三维模型;

步骤4.1:如图3所示,采用世界矩阵来完成所构建模型墙的位置,长宽高的缩放,自身的旋转,将模型转换到世界空间;采用观察矩阵将三维模型呈现在观察者视野内,将世界空间内的世界坐标变换到观察空间,从摄像机的角度观察三维模型;在观察空间中,所有坐标落在一个特定的范围内,采用裁剪矩阵,将特定范围外的点裁剪掉;如图4所示,采用投影矩阵将指定的范围的坐标变换为标准化设备坐标的范围(-1.0,1.0);解析顶点的数据主要是通过顶点着器实现的,然后通过光栅化实现顶点属性的插值,然后通过片元着色器实现最后的合并输出。其中还涉及到深度测试,和混合操作(实现透明效果)。

当所有顶点被变换到裁剪空间,执行透视除法:

最终的坐标会被映射到投影空间中,并被变换成片段,全部变换矩阵相乘就得到最终屏幕三维效果:

vclip=mprojection·mview·mmodel·vlocal

如图7所示;

步骤4.2:由于三维场景中渲染的围墙,都属于立方体,仅仅是位置,旋转和缩放不同,而一个4×4矩阵可以决定这三个因素,采用实例化方法,把所有不同变换的4×4矩阵存储到一个mat4vector中,然后将vector传入到着色器其中,执行一次渲染操作,完成对三维场景中围墙的渲染;

步骤4.3:楼层边界的获取,cad图中其所有楼层都是绘制在一个x,y坐标系中,根据解析的数据无法直接区分不同楼层,该系统采用深度搜索或者广度搜索遍历所有的边数据,将所有line的x和y坐标排序,初始化分解线为最小的y值,然后遍历所有直线坐标,当发现两点没有联通时,证明该两点之间就是不同楼层的分界线;获取不同楼层分界线,根据楼层的分界线实现不同楼层的叠加;

步骤4.4:场景相机的设置,从不同角度观看三维模型,需要在场景中添加一个相机实现不同角度的切换;场景中摄像机方向如式所示:

cameradirection=camerapos-camerataget

同时需要一个右向量,它代表摄像机空间的x轴方向,可以通过先定义上向量,然后把上向量和方向向量叉乘,从而得到右向量,如式所示:

cameraright=up×cameradirection

最后根据右向量和方向向量来确定上向量,如式所示:

cameraup=cameraright×cameradirection

最后通过设置识别鼠标和键盘操作的上下文来通过鼠标滚轮和键盘上的上下左右键控制的场景相机的移动;

步骤5:将步骤2所得用户位置的三维坐标带入三维模型中:实时更新地图显示信息,将用户位置实时显示在设备地图上;

步骤6:如图5所示,将位置坐标点渲染在三维模型中,通过系统显示模块实现轨迹的显示:如图8所示;

为初始化的建筑模型,贴上相应的纹理,通过顶点着色器、片元着色器实现光照效果,从而进行一些简单的渲染;

步骤6.1:在三维模型中添加一个天空盒,增加视觉效果;天空盒是通过立方体贴图实现的,包含6个2d纹理的立方纹理,立方体的中心位于原点,使用立方体的实际位置向量来对立方体贴图进行采样,然后再设置纹理的过滤方式:线性过滤,环绕方式gl_clamp_to_edge:纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果;

步骤6.2:光照渲染,在场景中添加了平行光源,环境的光照由环境光,漫反射光照和镜面反射光照三部分组成,漫反射光照的实现是通过入射光与法线之间夹角的大小来判断的,如式所示:

i=|lightdirection|*|normal|*cosθ

其中lightdirection和normal都是单位向量,所以强度的大小取决于θ;

镜面反射的大小是由h向量和法向量normal之间夹角的大小而决定的,如式所示:

spec=power(max(0,dot(n,h)),shininess)

光照方向向量与视角向量的半向量化得到h向量,如式所示:

h=normalize(lightdirection+viewdirction)。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1