一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于unity和物联网的楼宇电梯监控3D可视化方法与流程

2022-12-02 22:54:00 来源:中国专利 TAG:

基于unity和物联网的楼宇电梯监控3d可视化方法
技术领域
1.本发明属于物联网技术领域,具体涉及基于unity和物联网的楼宇电梯监控3d可视化方法。


背景技术:

2.随着中国越来越多的城市迈入现代化,电梯已经走进了普通百姓生活的每一个角落。无论是去商务楼上班、去商场购物、或者回家都离不开电梯。根据市场管理总局发布相关通告,截至2021年年底,全国电梯登记电梯总量879.98万台。电梯带给城市建设更大的空间性和延展性,同时,随着电梯大量出现在我们生活中,致人伤亡的电梯事故也频繁发生。国家质检总局的调查报告中指出:平均每年电梯事故起数在40起、死亡人数在30人左右。在事故受伤害人员中,普通乘客占50%,维护保养人员占13%,安装工人占12%,电梯操作人员占4%。从调查中可以看出,电梯运行的安全性、可靠性及科学化管理,不仅电梯厂家非常关注,政府主管部门、电梯的维保单位、物业单位及电梯使用者都非常关注,电梯的安全运行管理已经成为了一个不容忽视的重要问题。
3.因此,完善的电梯监控系统是不可缺少的,现有的电梯监控只能进行简单的视频监控,不能清晰直观的了解每部电梯的所在楼层。在电梯发生故障时,不能快速有效的对故障电梯进行定位,无法为电梯维修人员提供帮助,所以需要一种3d可视化的电梯监控系统来解决这样的问题。


技术实现要素:

4.本发明的目的是为了解决现有技术中存在的缺点,而提出的基于unity和物联网的楼宇电梯监控3d可视化方法。
5.为了实现上述目的,本发明采用了如下技术方案:设计基于unity和物联网的楼宇电梯监控3d可视化方法,包括以下步骤:s1、绘制需要的楼宇模型以及电梯模型,然后导出模型文件;s2、创建unity场景,并将导出的模型文件导入到unity项目场景中;s3、基于unity项目场景,为电梯模型编写运动脚本,使电梯模型可以按照服务端提供的电梯实时数据进行移动;s4、分别获取电梯位置数据和电梯运行数据;s5、并将电梯的位置数据传到电梯模型绑定的运动脚本中,通过运动脚本控制电梯模型的运动动画。
6.进一步的,在步骤s3中,为电梯模型编写运动脚本之后,还包括将电梯模型起始位置即当前位置保存到矢量变量curpos中,将获取到的电梯位置数据即电梯需要移动到的位置保存到矢量变量targetpos 中,通过线性插值算法使电梯模型可以平滑地运动到指定位置。
7.进一步的,在步骤s3之后,还包括:为电梯模型和楼宇模型添加线框着色器并调整
颜色。
8.进一步的,在步骤s4中,为了显示电梯的运行数据,需要在unity中创建ui canvas,并将ui组件添加到ui canvas中;绘制出ui素材后,导入到unity项目的资源目录中,将图片的texture type属性设置为sprite,然后为ui组件设置对应的图片。
9.进一步的,在步骤s2之后,还包括:在unity场景中添加一个子相机,将相机视角对准楼宇模型,并调整到预设的相机角度以及视场角大小。
10.进一步的,创建一个render texture,将所述子相机的target texture设置为当前创建的render texture,创建一个raw image组件,将其添加到ui canvas中,将raw image组件的texture也设置为当前创建的render texture,再设置主相机的culling mask只勾选ui层,电梯运行数据信息与楼宇和电梯模型便同时在ui canvas中进行渲染。
11.进一步的,还包括在运动脚本的update方法内调用线性插值方法并将得到的坐标值赋给电梯模型。
12.进一步的,还包括步骤s6:创建一个空物体,修改名称为mainmanager,将数据处理脚本绑定到mainmanager上,用于获取服务端的电梯数据并解析。
13.进一步的,在步骤s1中,使用blender绘制需要的楼宇模型以及电梯模型,然后导出为fbx格式的模型文件。
14.进一步的,先将ui素材导出为png格式,然后导入到unity项目的资源目录中。
15.本发明提出的基于unity和物联网的楼宇电梯监控3d可视化方法,有益效果在于:(1)、本发明可以根据获取到电梯的实时运行数据,将接收到的数据转化为可视化程序需要的信息显示出来,电梯的运行动画将根据接收到的电梯数据进行实时处理,可以达到与真实电梯同步的效果。
16.(2)、本发明可实现在电梯发生故障时能够用以3d可视化的方式准确显示出故障电梯的具体位置和楼层,使电梯维修人员能够在接到报警后迅速抵达故障电梯的准确位置,从而加快救援人员抵达现场的速度。
附图说明
17.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:图1为本发明实施例中的线性插值算法公式图;图2为本发明实施例中的线性插值算法的直角坐标系图;图3为本发明实施例中的线框着色器的渲染管线图。
具体实施方式
18.下面结合具体实施例,进一步阐述本发明。这些实施例仅用于说明本发明而不用于限制本发明的范围。在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“设有”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
19.现结合说明书附图,详细说明本发明的结构特点。
20.基于unity和物联网的楼宇电梯监控3d可视化方法,包括以下步骤:使用blender绘制需要的楼宇模型以及电梯模型,然后导出为fbx格式的模型文件。
21.创建unity场景,并将导出的模型文件导入到unity项目场景中。
22.在unity场景中添加一个子相机,将相机视角对准楼宇模型,并调整到合适的相机角度以及视场角大小。
23.为电梯模型编写运动脚本,用来使电梯模型可以按照服务端提供的电梯实时数据进行移动。
24.运动脚本的主要逻辑如下:将电梯模型起始位置即当前位置保存到矢量变量curpos中,将获取到的电梯位置数据即电梯需要移动到的位置保存到矢量变量targetpos 中,通过线性插值算法使电梯模型可以平滑地运动到指定位置。
25.线性插值公式及其直角坐标系如图1、图2所示,y表示经过线性插值计算后的y坐标(电梯运动中的y坐标),y0表示矢量变量curpos的y坐标(电梯模型的起始坐标),y1表示矢量变量targetpos的y坐标(电梯模型需要移动的目标坐标),x0表示电梯模型在当前位置的时间,x1表示电梯模型移动到目标位置后的时间,x表示在x0和x1之间的任意一个时间点,通过线性插值公式计算我们可以得出在x0到x1这段时间内y坐标的变化。(注:矢量变量均使用vector3类型)在运动脚本的update方法内调用线性插值方法并将得到的坐标值赋给电梯模型,这样电梯模型便可以平滑的从起始坐标位置移动至目标坐标位置。
26.为电梯模型和楼宇模型添加线框着色器并调整颜色,可以使画面变得更具科技感。线框着色器可以使模型只绘制出线框部分,可以大幅减少画面中的多边形数量,从而减轻了显卡的渲染负担。
27.线框着色器的渲染管线图如图3所示,其主要逻辑如下:在shader的纹理属性properties中定义主纹理变量_maintex ("maintex",2d)和主色变量_color ("base color")。
28.在与properties同级的位置定义一个用于编写线框效果的子着色器subshader,在subshader的tags中设置着色器类型为不透明着色器,在subshader的渲染通道中使用cg语法编写线框效果的主要逻辑。声明cg代码的起始标识cgprogram,声明顶点着色器入口函数vert、声明片元着色器入口函数frag和声明几何着色器入口函数geom。引用外接库unitycg.cginc,里面封装了一些常用函数。
29.定义贴图参数变量sampler2d _maintex、贴图缩放和偏移变量float4 _maintex_st、主色变量float4 _color、线框宽度变量float _wirethickness、线框平滑度变量float _wiresmoothness、线框颜色变量float4 _wirecolor、基本色变量float4 _basecolor、最长三角边大小变量float4 _maxtrisize。
30.定义结构体appdata,用于物体的属性传入顶点着色器。定义结构体v2g,用于将数据从顶点着色器传入几何着色器。定义结构体g2f,用于将数据从几何着色器传入片元着色器。
31.下面将实现顶点着色器入口函数v2g vert,函数的入参为appdata v,下面调用方法unity_setup_instance(v),它将从顶点数据中提取索引并将其存储在其它实例化宏所依赖的全局静态变量中,定义结构体变量v2g o。然后,调用方法unity_initialize_vertex_output_stereo,入参为变量o,该方法用来初始化顶点渲染器的输出数据。设置变量o的投影空间顶点为unityobjecttoclippos(v.vertex)。因为传递进来的顶点坐标是模型坐标系中的坐标值,需要经过矩阵转换车成屏幕坐标,所以通过mul(unity_objecttoworld, v.vertex)方法获取到的相应屏幕坐标然后赋值给o.worldspaceposition。设置变量o的uv贴图为transform_tex(v.texcoord0, _maintex),最后函数返回变量o。
32.下面将实现几何着色器入口函数void geom,在函数的properties块中加上[maxvertexcount(3)],用来指定几何着色器每次输出的顶点的最大数量为3,函数的入参为triangle v2g i[3](三角形网格的顶点数据)和inout trianglestream trianglestream(三角形图源输出流)。
[0033]
为了计算到对边的距离,采用三角形面积的计算公式面积 = 底边/2
×
高,然后求解高 = (面积
×
2)/底边,这样我们可以用外积除以2得到三角形的面积。根据三边的坐标调用abs(edge1.x * edge2.y
ꢀ‑ꢀ
edge1.y * edge2.x)方法得到三角形面积area。
[0034]
定义结构体变量g2f o,设置变量o的面积初始值为float4(0,0,0,0)。
[0035]
接下来需要处理并输出三角边,每条边的处理方式有些许差别。首先,开始处理第一条边,设置变量o的uv贴图为当前函数的参数i[0]的uv贴图,设置变量o的世界坐标设为当前函数的参数i[0]的世界坐标,将变量o的投影空间顶点设为当前函数的参数i[0]的投影空间顶点,将变量o的纹理坐标dist.xyz设为float3( (area / length(edge0)), 0.0, 0.0) * o.projectionspacevertex.w * wirethickness,将变量o的纹理坐标dist.w设为1.0 / o.projectionspacevertex.w。调用方unity_transfer_vertex_output_stereo来传输顶点渲染器的输出数据,入参为当前函数的参数i[o]以及变量o,然后调用当前函数的参数trianglestream的append方法,入参为变量o,通过此方法将变量o附加到三角形图源输出流中。开始处理第二条边,设置变量o的uv贴图为当前函数的参数i[1]的uv贴图,设置变量o的世界坐标设为参数i[0]的世界坐标,将变量o的投影空间顶点设为当前函数的参数i[0]的投影空间顶点,将变量o的纹理坐标dist.xyz设为float3(0.0, (area / length(edge1)), 0.0) * o.projectionspacevertex.w * wirethickness,将变量o的纹理坐标dist.w设为1.0 / o.projectionspacevertex.w。调用方法unity_transfer_vertex_output_stereo来传输顶点渲染器的输出数据,入参为当前函数的参数i[1]以及变量o,然后调用参数trianglestream的append方法,入参为变量o。开始处理第三条边,设置变量o的uv贴图为当前函数的参数i[2]的uv贴图,设置变量o的世界坐标设为当前函数的参数i[0]的世界坐标,将变量o的投影空间顶点设为当前函数的参数i[0]的投影空间顶点,将变量o的纹理坐标dist.xyz设为float3(0.0, 0.0, (area / length(edge2))) * o.projectionspacevertex.w * wirethickness,将变量o的纹理坐标dist.w设为1.0 / o.projectionspacevertex.w。调用方法unity_transfer_vertex_output_stereo来传输顶点渲染器的输出数据,入参为当前函数的参数i[2]以及变量o,然后调用当前函数的参数trianglestream的append方法,入参为变量o。到这一步,几何着色器入口函数void geom的
实现就完成了。
[0036]
接下来需要渲染出线框颜色,下面将实现片元着色器的入口函数fixed4 frag,入参为结构体变量g2f i,函数的输出语义设为sv_target(dx10以上用于片元着色器函数颜色输出的语义)。通过min(i.dist[0], min(i.dist[1], i.dist[2])) * i.dist[3]计算得出顶点到三边的最短距离mindistancetoedge,取三角形三边中最短的高,若顶点距离边缘的距离小于阈值,则绘制线框。通过调用exp2(_wiresmoothness *
ꢀ‑
1.0 * mindistancetoedge * mindistancetoedge)方法得到线框透明度t。然后调用线性插值方法lerp(basecolor, _wirecolor, t)得到平滑过渡的线框颜色finalcolor,再将finalcolor返回。最后,在函数下一行写上endcg表示cg语法段结束,线框着色器编写完成。
[0037]
为了显示电梯的运行数据,需要在unity中创建ui canvas,并将ui组件添加到ui canvas中。通过photoshop软件绘制出ui素材后,将其导出为png格式,再导入到unity项目的资源目录中,将图片的texture type属性设置为sprite(2d and ui),然后就可以为ui组件设置对应的图片。
[0038]
创建一个render texture,把步骤3中的子相机的target texture设置为当前创建的render texture,创建一个raw image组件,将其添加到ui canvas中,将raw image组件的texture也设置为当前创建的render texture,再设置主相机的culling mask只勾选ui层,这样电梯运行数据信息与楼宇和电梯模型便可以同时在ui canvas中进行渲染,无需渲染整个场景。
[0039]
最后创建一个空物体,修改名称为mainmanager,将数据处理脚本绑定到mainmanager上,用于获取服务端的电梯数据并解析。mainmanager脚本通过socket的方式与服务器进行连接,实时接收电梯的运行数据,例如:电梯停留时长、电梯所在楼层、电梯运行时长、电梯上次检修时间等。mainmanger脚本将会把这些数据显示到ui canvas中的text组件上,并将电梯的位置数据转换为unity中的坐标数据传到电梯模型绑定的运动脚本中,通过运动脚本控制电梯模型的运动动画,使其与现实中的电梯位置实现同步,这样物业人员可以直观的查看电梯的实时位置,也能够看到电梯的具体运行数据。
[0040]
综上所述,本发明提供了一种电梯监控系统的3d可视化方法,在电梯发生故障时能够用以3d可视化的方式准确显示出故障电梯的具体位置和楼层,使电梯维修人员能够在接到报警后迅速抵达故障电梯的准确位置,从而加快救援人员抵达现场的速度。
[0041]
考虑到大多数监控室的电脑设备不具备高性能显卡,所以展示效果将采用渲染模型线框的方式,通过渲染出模型的三角边来呈现出线框效果,大幅降低了3d程序对显卡的性能要求。监控程序通过socket方式连接服务器来获取到电梯的实时运行数据,将接收到的数据转化为可视化程序需要的信息显示出来,电梯的运行动画将根据接收到的电梯数据进行实时处理,可以达到与真实电梯同步的效果。
[0042]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献