韩旭东
关键词:无人矿卡;Mapbox GL;三维可视化;监控;地图切片
0 引言
露天煤矿的运输往往存在路况差、司机职业病严重、安全事故频发、劳动力短缺、投资成本高等问题[1]。在“少人则安,无人则安”的共识下,矿区无人化运营是实现安全生产、降低人工和整车使用成本、提升运行效率的有效途径[2]。无人驾驶技术的发展为解决上述问题提供了可能,矿区道路相对封闭,行人较少,是无人驾驶技术理想的应用场景。2020年国家能源局、应局部、煤矿安监局等联合发布《关于加快煤矿智能化发展的指导意见》,明确提出“到2025年露天煤矿实现智能连续作业和无人化运输”。因而建设矿区无人运输系统,实现无人化运输对于提高矿企智能化水平,提高安全生产水平,降低投入成本,提高生产效率具有重要意义。
矿卡实时运行监控是矿区无人运输系统中的重要组成部分[3],监控反映了调度的执行情况,根据监控结果,调度人员可进行及时调整和管理,比如油量短缺时,及时安排矿卡补充油料;胎压不足时,及时安排维护保养等。为此本文从WebGIS 角度出发,使用Mapbox技术,在三维地图上展现矿区地形地貌、道路走势、矿卡实时位置和当前运行状态等,实现对矿卡的实时监控。B/S体系结构使得系统便于维护和部署[4],信息共享程度高,在网络畅通的情况下,可随时随地进行访问和监控。三维展现形式使得场景更加形象直观,支持缩放、旋转和漫游等,便于整体把握各矿卡运行情况。
Mapbox 是一款开源的GIS 开发框架,与常用的Leaflet、Cesium和Openlayers并称四大框架。Mapbox 支持3D地形展示、3D模型加载,支持多种坐标系投影,支持全格式地理数据,且简单上手,界面美观,适合于开发交互式地图,支持离线部署,已经广泛应用于Web、移动端、IOT以及AR/VR等领域。本系统使用了Mapbox推出的JavaScript SDK 即Mapbox GL JS[5]进行三维可视化开发,在Web页面渲染矿区、路径和矿卡三维模型。三维形式在信息承载和表达方面具有系统化、一体化的优势,同时管理者还能对各个部分的地形地貌特征、空间布局等有所掌握[6]。
1 系统架构
无人矿卡三维可视化系统部署在Web服务器上,使用前后端分离架构,系统整体架构如图1所示。
系统前端主要与PC客户端进行交互,根据PC客户端浏览器的页面请求,完成页面响应,主要包含用户登录、用户管理、权限管理、矿卡管理、矿卡监控、统计分析等页面。其中矿卡监控页面是系统核心功能页面。
PC客户端通过浏览器访问系统页面,获得响应页面后,进行加载和渲染。页面所需数据根据来源不同,通过不同方式获取。如矿卡管理页面中,矿卡基本数据通过后端数据接口获得;在矿卡监控页面中,矿卡的实时位置和状态数据通过与后端建立的长连接(如WebSocket) 获得;前端地图渲染所需瓦片通过访问地图切片服务器获得等。
系统后端通过数据接口,接收请求并进行处理,访问数据库服务器,保存或获取业务数据,并进行响应。除此之外,后端需要向远端服务器订阅矿卡实时位置和状态信息,获得的信息存储到数据库服务器,并同时通过长连接推送到PC端浏览器页面,更新卡车位置和状态等。
远端服务器监听矿卡上报的矿卡编号(每个矿卡不同)、矿卡位置(经纬度)和运行状态数据,并及时发布给订阅者(系统后端)。这里远端服务器一般要求具有公网IP地址,或者可同时被矿卡和系统后端访问。
矿卡需要有车载终端、GPS模块、各类监测传感器、网络通讯模块等。车载终端通过GPS模块获取地理位置(经纬度),通过各类监测传感器可以获取矿卡运行状态信息(如车速、载重、胎压、油量等),通过网络通讯模块将以上数据以及矿卡编号,持续报送到远端服务器。
数据服务器使用支持地理数据的postgresql数据库,存储矿卡时间、位置和状态信息,同时存储矿卡基本信息。
地图切片服务器提供切片服务。为了减少对在线地图的依赖,加快地图加载速度,搭建本地地图切片服务器。
2 系统实现
本系统使用springboot+vue 前后端分离架构,使用postgresql数据库进行数据存储。功能模块包含系统登录、用户管理、权限管理、矿卡管理、矿卡监控、统计分析等,其中主要业务模块包括矿卡管理和矿卡监控。矿卡管理模块用于管理矿卡基本信息,对矿卡进行添加、删除、修改和查询。矿卡基本信息包含矿卡编号、类型、核载、负责人、检修人等。
以下主要介绍矿卡监控模块。
矿卡监控模块需要完成以下功能:加载矿区底图、加载3D地形、添加三维矿卡模型、更新矿卡位置和状态、显示矿卡状态数据。此外,为了加快地图加载速度,将矿区底图的栅格瓦片和3D地形的高程数据进行本地化,搭建本地切片服务器。
2.1 加载矿区底图
前端页面使用Mapbox GL 提供的API(Mapboxgl.Map) 初始化渲染礦区底图,将Mapbox的卫星影像作为底图,将矿区中心的经纬度坐标作为中心点,然后调整放大级别和视角,最大化显示运输路线全貌。卫星影像地图需要的栅格瓦片通过后文的切片服务器获得。
页面使用的卫星影像是一种栅格地图,经过了瓦片化处理,遵循OGC的瓦片地图服务(TMS:Tile MapService) ,瓦片格式为JPG 或PNG,影像瓦片大小为256×256[7]。
2.2 加载3D 地形
二维底图需要添加地形数据,才有三维效果。前端页面调用Mapbox GL的API函数(setTerrain) 设置高程和拉伸比例,即可进行地形渲染。高程切片数据通过后文的切片服务器获得。
2.3 添加三维矿卡模型
Mapbox GL是基于webgl开发的三维地图渲染引擎,但有些特效需要使用threejs 来实现。前端使用threejs 的三维模型加载和渲染API(THREE. GLT?FLoader.load) ,将GLTF类型的矿卡模型加载到当前场景的指定坐标上,并根据需要调整大小、朝向等。不同类型矿卡使用不同的三维模型,如图5所示。
2.4 更新矿卡位置和状态
矿卡在行进过程中位置是不断变化的,速度、航向、胎压等状态信息也是变化的,这些信息都需要及时采集和显示出来。矿卡终端通过GPS模块获取自身经纬度坐标,通过各类传感器获取运行状态信息,然后通过网络模块源源不断地上报给远端服务器,远端服务器采用kafka(一种高吞吐量的分布式发布订阅消息系统)将消息发布出去。系统后端对该类消息进行订阅,获取到矿卡编号、位置(经纬度坐标)和运行状态信息,保存并通过长连接推送给前端页面,前端页面使用Mapbox的API对矿卡位置进行调整更新,从而实现矿卡移动的效果。前端页面使用WebSocket 与后端建立长连接,后端集成Netty 框架作为Web?Socket的服务端,WebSocket长连接使得后端消息可以随时推送到前端。系统数据流图如图6所示。
由于矿卡相对矿区小很多,需要放大一些才能看到矿卡模型。最终效果如图7所示。
2.5 显示矿卡状态数据
本系统将矿卡运行状态信息展示在一个矩形的信息面板上,信息面板默认不显示,当用户点击卡车(模型)时,在旁边弹出信息面板并跟随卡车移动,如图8所示。
2.6 搭建本地切片服务器
为了减少对在线地图的依赖,提高页面渲染速度,底图所需栅格瓦片和地形高程切片需要进行本地化,搭建本地切片服务器,实现系统离线访问。内网计算机无须上外网,只要能访问web服务器和切片服务器,即可正常使用本系统。
切片可以直接通过软件工具(如水经注、ArcGIS、GlobalMapper等)制作或下载,也可以先下载影像和高程数据后,自己编程实现切片。鉴于地图中必须要看到卡车模型,地图显示级别应至少支持18级,故切片也要支持18级以上。切片的名称和位置必须和前端页面中Mapbox api函数的参数设置的路径规则(如/MapboxSatellite/{z}/{x}/{y}.png) 保持一致。
图9为矿区卫星影像栅格瓦片的部分缩略图,18 表示缩放等级,表示当地图缩放到18级时,目标区域的底图使用文件夹18 下的这些图片进行拼接。216620文件夹与其下面的文件(如104352.png) 对应瓦片编号,瓦片编号(如216620和104352) 与经纬度具有换算关系,Mapbox中展示某处经纬度的底图时,会换算为瓦片编号,下载该瓦片编号对应的图片。
图10为矿区高程数据切片的部分缩略图,18表示缩放等级,表示當地图缩放到18级时,目标区域的高程使用文件夹18下的这些图片进行描述。同样,216620 和104352表示瓦片编号,与经纬度具有换算关系。Mapbox中展示某处经纬度地形(高程)时,会换算为瓦片编号,下载该瓦片编号对应的地形图片。在Mapbox中,高程可使用Terrain-RGB模式表征,Map?box收到高程切片后,各个像素的红色(R) ,绿色(G) 和蓝色(B) 值通过下列公式解码即可得到该像素的高程值[8]。
除此之外,还可以对字体和图标进行本地化,具体过程不再赘述。切片服务器仅需支持访问静态图片,因此只需安装nginx进行转发即可。
3 结束语
本系统使用Mapbox技术对无人矿卡进行监控,B/S体系结构便于用户进行访问,三维可视化展现形式更加直观形象,便于用户快速、准确掌握矿卡位置、环境和运行状态,为矿区安全管理、矿卡调度等提供有力支持。同时卫星影像和地形切片的本地化很好地提高了地图场景的加载速度。本系统技术方案也可应用在物流运输、智能交通、体育比赛、应急救援等领域的监控中,具有广阔的应用前景。目前系统能够满足无人矿卡监控管理的需求,但也存在一定的不足,一方面地图精度还不够高,放大到一定级别会出现模糊现象;另一方面离线切片需要手动更新,如果更新不及时,地图的地形地貌可能会与实际有一定差距。这也是下一步需要改进和优化的方向。