教你如何使用华为云的 DLV 平台搭建无人机飞行轨迹大屏,教科书级别的文章,非常详细

近三年来,公司倒闭了无数个,但是崛起的也有无数个,就拿我们公司来说,那还真的是崛起再崛起,因为什么?因为我们做的是无人机的应用,从智慧城市、电力巡检、风机巡检、智慧警务等都是我们的业务。在我们的技术圈中,物联网就是我们的基石。今天针对本文的主题”物联网可视化“,我就想以平时接触的技术最简单的点来与大家分享一下:无人机的飞行轨迹。
一、我对物联网的看法
因为我是从事物联网行业的,所以我觉得物联网对于我们来说就是一个”宝“,但是客观上来说,物联网真的是改变了我们的生活。
假如没有物联网,智能家居带来的方便你能享受到?智能音响、智能冰箱、智能马桶甚至智能门铃都是空想。
假如没有物联网,电动汽车能那么快占据汽车市场,你能享用到智能电动汽车带来的科技感、舒适感?
假如没有物联网,啥刷脸支付、无人超市你想都别想?
在这个时代,物联网无处不在,我们对之又习以为常,但是讲真的,世界真的是因为物联网而变得富有科技感,而变得便捷。
物联网改变了世界!也改变了人们的生活方式!

二、无人机的飞行轨迹
上面我提到了物联网的部分应用,相信大家都能感受到,毕竟那些都是跟咱们日常生活息息相关的,但是无人机这块,假如你不是这个行业的,还真的不太了解
试想一下,你是无人机的飞手,在飞行过程中,虽然你能通过无人机的云台实时看到飞行的画面,但是无人机的飞行轨迹你不知道,更不用谈轨迹分析、飞行分析这些深层次的事情了。所以说飞行轨迹可视化对于无人机来说非常重要。
在无人机飞行轨迹这块,飞机上报的信息非常多,比如:
经纬度
高度
电池电量
云台角度
等等
那么本文,我就简单点,只用到经纬度和高度。
三、基于华为云搭建飞机飞行轨迹大屏
想要做成飞行轨迹大屏,一般要经历这样的过程:
设备上报数据
存储数据
拉取数据
展示数据
下面我们一步一步基于华为云的产品进行实现。
3.1 华为云 OBS 配置
首先我们就把数据存储的地方选好,这里我们选择的是华为云的 OBS。
华为云的 OBS 是对象存储服务器,基于 S3 协议,一般存储图片、视频、文件等。
访问 OBS 官网:

我们直接点击【立即购买】,根据需要进行资源选择:

点击【去支付】:

点击【确认付款】:


我们在控制台就可以看刚刚购买的资源包:

在对象存储中,数据是放在存储桶中,所以我们需要创建一个桶,用来放无人机产生的数据。
点击【桶列表】,然后点击【创建桶】:

给桶起个名字,这里我们填的是 drone-flight-data,代表无人机飞行数据,其他配置可以默认,然后点击【立即创建】:

桶列表中就看到了我们刚刚创建的桶 drone-flight-data:

至此存储的地方 OBS 配置好了,接下来我们正式要进入无人机建模,造数据,存数据,展示数据了。
3.2 创建无人机产品
访问网址:
进入【设备接入 IoTDA】界面:

点击【管理控制台】,进入【设备接入服务】界面:

点击【产品】页签,进入产品列表:

我们看到已经有两个产品,其中无人机的产品是之前创建的,这里我们重新创建一个无人机的产品用来测试无人机的飞行数据。
点击页面右上角的【创建产品】:

填写产品信息:
产品名称:无人机飞行
协议类型:MQTT
数据格式:JSON
厂商名称:DJI
所属行业:智慧城市
所属子行业:公共服务
设备类型:无人机

点击确定后,我们就能在产品列表中看到我们刚刚创建的无人机飞行了:

3.3 无人机建模
上一步我们已经建好了无人机飞行的产品,下面就是给这个产品建立模型,也就是设置一些属性。
我们点击刚刚创建的无人机飞行,进入到产品配置页面:

在模型定义中,官方给的例子是智能水表,导入的模型中也没有无人机相关的模型:

所以这里我们选择的是【自定义模型】:

在服务列表中看到 flight-001 服务已经建立好:

下面我们添加一下属性,点击【添加属性】:

如上图,首先我们创建了纬度的属性,经度和高度属性的创建和纬度类似,创建好后,在属性列表就能看到:

设备进行上报的时候就类似这样的:

3.4 数据转发
模型建好了,下面就是将这个无人机上报的数据进行转发到我们创建的 OBS 中。
在”设备接入“界面,点击【规则】,点击【数据转发】:

点击【创建规则】:

第一步:设置转发数据:

规则名称:drone_flight_data
规则描述:无人机飞行数据转发
数据来源:设备属性
触发事件:设备属性上报
资源空间:根据情况选择
然后点击【创建规则】,点击【继续设置】:

第二步:设置转发目标:
点击【添加】,填写相关配置:

转发目标:对象存储服务(OBS)
区域:cn-north-4
因为我们创建的桶的区域就是【华北-北京四】:

这个时候,服务还需要授权,我们点击【访问授权】超链接:

点击【同意授权】:

添加转发目标 tab 页面需要填写一下:

转发目标:对象存储服务(OBS)
区域:cn-north-4
存储桶:drone-flight-data
自定义目录:drone_flight
文件名称:drone_flight_data
文件类型:CSV
转发字段:notify_data.body.services[0].properties.latitude,目标存储字段:latitude
转发字段:notify_data.body.services[0].properties.longitude,目标存储字段:longitude
转发字段:notify_data.body.services[0].properties.altitude,目标存储字段:altitude
点击【确定】,点击【设置完成】:

此时规则还未启用,点击【启用规则】:

规则启用后:

3.5 数据上报
规则建好好,意味着上报的数据可以存到 minio 中了,我们来测试一下。
进入【设备接入】页面,点击【在线调试】,点击【新增调试设备】:

选择【虚拟设备】,然后点击【确定】:

这就是我们创建的虚拟设备:

点击设备名称进去后,选择设备模拟器(也就是无人机),属性上报这块填写一下要上报的属性值,然后点击【发送】:

发送后,我们清晰的看到无人机上报的信息,以及应用模拟器接收到的信息:

这个时候我们应该做啥?
当然是看下上报的这条消息有没有存储到 OBS 上。
打开 OBS 控制台,进入到我们创建的桶中,点击【对象】:

我们看到我们上报消息已经形成一个对象,存储在目录【drone_flight】中,点进去,看到了上报的消息已经存为【drone_flight_data.csv】:

下载后,我们看到数据已经成功存入 csv 文件里了:

我们多发一些数据,属性上报这里选择自动发送,周期为 1 秒:

然后我们就能数据就是这样:

至此,从设备上报到数据存储已经打通,下一步就是将上报的数据进行大屏展示。
3.6 创建数据可视化服务(DLV)
访问数据可视化 DLV 网址:
点击【体验试用】:

点击【立即开通】:

点击【进入控制台】:

选择【我的数据】,点击【新建数据连接】:

选择【CSV】:

这里的 Access Key 和 Secret Access Key 需要我们创建一下,访问网址:
点击【新增访问密钥】:

给密钥增加一下说明:

点击【立即下载】:

看到了我们创建的密钥:

然后填写在【数据连接】的表单中,OBS 中选择我们创建的桶:

选择【drone_flight_data.csv】:

点击确定后,看到了刚刚创建的数据:

点击【新建大屏】:

场景中没有我们想要的无人机相关的大屏模板:

所以我们直接创建空白的模板,起个名字:无人机飞行轨迹大屏,点击【创建大屏】:

等待一会:

选择【地图】中的【基础平面图】:

点击【地图】,选择【数据】,选择【CSV 文件】,选择我们创建的数据:

点击【更新查询】后,地图无反应:

我仔细看了一下华为云没有提供地理信息级别的大屏解决方案,这里的地图是跟地区绑定的,能够展示出地区的数据差异性,所以,我们这里将数据以表格的形式展示出来。在我们的系统中,轨迹图是通过前端的技术绘制出来的,难度比较大,华为云没有提供这种模板也理解。
我们选择【键值表格】:

更新完数据后:

虽然很丑,但是能够展示出来就可以了,因为毕竟前端这块不是专门定制化的。
点击【预览】:

表格就显而易见了:

我们还可以点击【发布】:

我们复制一下创建的链接,在手机上进行访问:

至此从设备数据上报到数据转发、存储、再到最后的可视化数据展示,整个流程全部打通!
四、总结
花了 2 天时间体验了华为的设备接入平台、OBS 和可视化服务 DLV,原本想将我工作时候的无人机飞行轨迹数据展示出来,但是由于行业的小众加上技术的难度,华为云暂时没有我想要的模板,不过最终我把数据展示出来了,有数据展示就相当于成功了,轨迹图无非就是通过代码的形式将数据绘制出来。如果你的需求场景是态势感知、数据可视化展示等,我觉得你可以试用一下这个智慧大屏,操作比较简单,生成后访问速度也还可以。本文展示的教程真的是教科书级别的,非常详细,每做一步都有截图,如果你在使用的过程中遇到问题,可以参考本文。如果本文对你真的有所帮助,请收藏或者帮忙转发一下,有任何问题,欢迎在下方评论区与我讨论。
版权声明: 本文为 InfoQ 作者【wljslmz】的原创文章。
原文链接:【http://xie.infoq.cn/article/4d3804b96cc8b7e857e6f3092】。未经作者许可,禁止转载。
评论