机场智能驱鸟系统的上位机设计与实现
2019-04-15陈裕通刘玉芬陈裕芹刘立程
陈裕通 刘玉芬 陈裕芹 刘立程
1(广州民航职业技术学院 广东 广州 510403) 2(中国民航大学电子信息与自动化学院 天津 300300) 3(广东工业大学信息工程学院 广东 广州 510000)
0 引 言
鸟击又称鸟撞,即飞机与鸟儿碰撞后所造成的事故[1]。鸟击的特点是多变性和突发性,其不仅影响航班的正常秩序,还给人类的生命财产安全带来隐患。轻微的鸟撞可导致飞机部件损坏而引起飞行事故,而严重的鸟撞则会造成机毁人亡[2]。由此可见,无论是从鸟击对飞机造成的危害角度,还是从其发展趋势来说,鸟击事件都是不容忽视的,必须寻找有效的办法遏制此类事件的发生,即如何做到“高效驱鸟”,将驱鸟现状从“被动”转变为“主动”。
针对这一问题,并在军民融合的大背景下,本文提出了构建基于物联网的驱鸟系统,并在其基础上引入深度学习技术,赋予系统以“智慧”,解放机场场务人员。
1 系统架构
组建基于物联网的机场驱鸟联动系统网络的主要目的是为了给机场现有驱鸟设备提供网络支持,是搭建可远程控制的机场驱鸟联动系统平台的硬件基础,也是核心的部分。根据机场场务人员提出的需求,结合无线通信技术,设计了如图1所示的系统网络拓扑结构。在拓扑结构中,主要包含了无线短波网络与Zigbee网络,二者混合组网并覆盖整个机场区域,最后将煤气炮、钛雷炮、二踢脚、拦鸟网及语音驱鸟器加入到无线网络中,构成一个完整的鸟情信息查询、联动驱鸟及鸟类分布的智能系统。
图1 系统架构示意图
ZigBee为基于IEEE802.15.4协议标准的[3]通信技术,是当前无线通信领域内的研究热点,其特点是短时延、低功耗、低成本等,这些特点非常符合项目的要求,故选用了ZigBee作为第一层网络的通信方式[4]。
在无线传感器网络WSN(Wiresless Sensor Network)中,网络节点设备通常分为三种类型,即路由节点、网络协调器节点及终端节点。其中网络协调器节点是唯一的,由它来组织该网络的形成,而路由节点则作为数据传输的中转站,可以进行数据的转发和网络的扩展,终端节点则一般用于信号的采集与处理[5]。
在网络拓扑中的手持终端机需装载ZigBee硬件模块,这样当终端进入网络并鉴权后可以和接入到ZigBee网络中的煤气炮、拦鸟网、钛雷炮、二踢脚以及语音驱鸟器等设备进行通信,发送控制命令即可控制设备的启动与关闭,帮助场务人员及时作出驱赶动作。基站则通过无线通信网络和上位机进行通信,将命令信息接收、解析、处理后,经由ZigBee网络下发到相关的驱鸟设备。此外,煤气炮、拦鸟网、钛雷炮、二踢脚以及语音驱鸟器等设备还能经由ZigBee网络传输到基站,上报自身的状态信息。当基站接收到信息后便对其进行解析处理,然后再通过短波网络上传至上位机。上位机根据上报的状态信息,在线反馈场内各设备的状态,若有异常,则会作出警示,提醒场务人员及时维修设备。中继作为信号传输的中间节点,它能避免信息的重复发送所造成的线路堵塞。
2 系统设计
2.1 上位机界面设计
为了使基于物联网的机场驱鸟联动系统更加人性化,有必要创建可视化的机场鸟情监控系统软件。根据场站驱鸟人员的需求,并以观测到的鸟情数据(含鸟类体形特征、图片、生活习性、飞行高度、羽毛特征、危害等级等)作为数据库的数据源建立数据库,并设计、开发该系统。考虑到项目后期还需开发便携式的移动设备软件,故开发工具采用了QT 5.7.0+ACCESS 2010的方案,以便开发出一个界面简单、易用,移植性、扩展性和维护性良好的机场驱鸟联动系统上位机软件。根据用户提出的要求,系统设计界面如图2所示,其代码如下:
MainWindow::MainWindow(QWidget*parent):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
……
//创建串口对象
set_connection=new set_serial(com);
set_connection->close();
//设置窗体模态
set_connection->setWindowModality(Qt::ApplicationModal);
//设置鸟情查询对象
bird_search_pointer=new bird_search(this,db);
bird_search_pointer->close();
//设置设备控制对象
devices_pointer=new devices1(this);
devices_pointer->close();
……
//设置窗口标签
ui->function_tabWidget->setTabText(0,tr(″联动驱鸟″));
ui->function_tabWidget->removeTab(1);
ui->function_tabWidget->addTab(bird_distribution_pointer,
tr(″鸟类分布″));
ui->function_tabWidget->addTab(devices_pointer,tr(″联动驱鸟″));
ui->function_tabWidget->addTab(bird_search_pointer,tr(″鸟类查询″));
//设置窗口标签隐藏
ui->function_tabWidget->setTabEnabled(1,false);
ui->function_tabWidget->setStyleSheet(″QTabBar::tab:disabled{width:0;color:transparent;}″);
}
图2 系统软件设备界面
2.2 鸟情数据库的建立与连接
根据广州民航职业技术学院鸟击防灾应用技术研究中心与中国空军某部的长期合作与调查发现,该机场共计有38种鸟类涉场,其中包括白鹭、牛背鹭、绿翅鸭、鹊鹞、红隼、斑鸠等鸟类,相关鸟类图片如图3所示。
图3 涉场鸟类图片
Qt对数据库的操作主要是通过QtSql模块来进行,故在项目文件(.pro文件)中需要添加一行代码“QT+=sql”,这样才能使用数据库模块。为了能在主窗口中读取数据库里面的数据,可以先创建一个相关的数据库类,然后在主窗口中将其实例化。数据库的类实现代码如下:
data_base::data_base(QObject*parent):QObject(parent)
{
db=&QSqlDatabase::addDatabase(″QODBC″);
//设置数据库驱动
db->setDatabaseName(″connectDatabase″);
//打开数据库
bool ok=db->open();
if(!ok)
……
else
{
……
row=new QSqlRecord();
model=new QSqlTableModel(this,*db);
model->setTable(″BirdInfo″);
model->setSort(0,Qt::AscendingOrder);
//设置模型对应项
model->setHeaderData(1,Qt::Horizontal,tr(″中文名″));
model->setHeaderData(2,Qt::Horizontal,tr(″英文名″));
model->setHeaderData(3,Qt::Horizontal,tr(″危害等级″));
model->setHeaderData(7,Qt::Horizontal,tr(″最低飞行高度″));
model->setHeaderData(8,Qt::Horizontal,tr(″最高飞行高度″));
model->setHeaderData(10,Qt::Horizontal,tr(″备注″));
model->setHeaderData(11,Qt::Horizontal,tr(″集群类型″));
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
……
}
}
2.3 通信接口设计
Qt写的程序作为上位机软件,如果需要通过USB与下位机通信,就得用到Qt中的串口通信。串口是上位机与下位机连接的桥梁,故其设计在一定程度上关系到了项目的成败。为了在主窗口中能与下位机进行通信,可以先创建一个QSerialPort的串口对象,然后对其进行操作。本系统提供给了用户两种连接方式,分别是自动连接和手动连接,其中手动连接代码如下:
bool communication_layer::auto_connect_cood(){
……
//此处为串口自动识别
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
……
serial->setPort(info);
if(serial->open(QIODevice::ReadWrite))
{
//设置波特率
serial->setBaudRate(115200);
//设置数据位
serial->setDataBits(QSerialPort::Data8);
//设置校验位
serial->setParity(QSerialPort::QSerialPort:: OddParity);
//设置流控制
serial->setFlowControl(QSerialPort:: NoFlowControl);
//设置停止位
serial->setStopBits(QSerialPort::OneStop);
……
state=true;
connection_state=true;
//发送连接成功信号
emit zigbee_connected_sig();
……
}
else
……
return state;
}
2.4 消息处理模块设计
上位机与下位机之间所交换的消息即为主机发送的设备开启命令和从机发送的设备状态信息,伴随着场内设备挂载个数的增加,传感器的采集数据也成倍地增加。大量的数据定会带来CPU占用率提高、内存开销大等问题,为了避免项目后期出现瓶颈,从而导致硬件成本的成倍增加,因此在消息处理模块的设计上参考了4G移动通信的编解码方式,即ASN.1编解码。
ASN.1的编码规则包括CER(规范编码规则)、BER(基本编码规则)、PER(压缩编码规则)等。尽管编码规则不同,但通信双方却无需再考虑设备类型、程序设计语言及其在程序中的表示等问题,大大提高了可移植性。ASN.1最大的特点是其编码支持在无线宽带中可扩展且信息快速可靠的传输[6],这一特性非常符合本项目的要求,因此在项目中引入该编解码技术。
其中PER是在BER的基础上所设计的一种ASN.1编码规则,它的优势是可以有效地减少消息的编解码开销。考虑到项目后期的数据量开销逐渐增加,系统采用了PER编码规则。PER编码结构如图4所示,其实质即为“按需嵌套编码”结构,当有需要传送相关信息时再分配资源,这样可以有效减少硬件开销,为后期项目的升级奠定基础。
图4 PER编码结构图
根据ASN.1编解码规则,可设计如表1所示的编码规则,其中数据头和尾使用char类型,命令与数据用了typedef型,并且用“int bits_unused”来指示二进制位串中没有使用到的二进制位数。
表1 ASN.1转换规则
3 实验测试
1) 数据库连接测试。如图5所示,在主界面通过查询功能可以准确地查询本场的涉鸟信息,帮助场务人员更好地做出判断。
图5 鸟类信息查询成功图
2) 通信接口测试。当USB线与下位机连接好后,在主界面通过串口连接功能实现软件上的连接。开启相应的设备后,可在串口打印窗口观察到发送命令数据,这表明串口已正常工作,并且能与下位机通信。当USB与下位机断开连接后,在软件上无法实现软件连接,这符合预期。如图6所示。
图6 通信接口测试图
3) 效果对比测试。系统搭建好后,需对系统作出客观的综合测试评估,以得出使用该系统后驱鸟效果的提高率。为了能更好地观测,观察人员配备了高倍单筒望远镜、测距仪、摄像机、夜视仪等,在机场不同功能区安排对应的工作人员蹲点观察记录,得到如表2所示的观测结果。由表2可知使用了智能化驱鸟系统后对场内常见的涉场鸟类有不错的效果提升。
表2 系统效果评估
4 结 语
本文对机场智能驱鸟系统的上位机进行了设计与实现,并针对其以往在设备量增加后数据量急剧增加的问题上提出了几点改进方法。最后通过测试结果验证了这些方法的有效性,对今后系统挂载更多的驱鸟设备具有重要意义。在下一步工作中,将结合深度学习方法,探寻系统的智慧底线,帮助机场切实做好安全保障工作。