基于Android的农机导航管理系统研究与设计
2019-12-22胡鸿彬李彦明唐小涛李志腾刘成良
胡鸿彬,李彦明,唐小涛,李志腾,刘成良,2
(1.上海交通大学 机械与动力工程学院,上海 200240;2.上海世达尔现代农机有限公司,上海 200245)
0 引言
基于高精度GNSS的农机自动导航技术作为精准农业的一个重要方向,被广泛地应用于耕作、收割、播种、施肥等农业生产过程中,可以大大延长作业时间、提高作业精度和效率、减轻劳动者工作强度[1]。农机导航管理系统的作用是实现人机交互控制、实时导航作业监控、路径规划,以及历史作业数据管理和查询等,是农业机械装备信息化和智能化的一个重要载体,是农机自动导航技术的研究重点之一。
国外发达国家(如美国)很早就开展了对农机自动驾驶技术的研究和应用。O’Conner 等人于1995年研发了一套4天线载波相位GPS系统成功应用于John Deere 7800拖拉机的直线行驶自动导航,横向偏差精度控制在2.5cm以内[2]。长期的技术积累使得国外农业机械厂商已经成为全球精准农业的领导者。例如,美国Trimble(天宝)公司为农机自动驾驶提供了从高精度定位接收机、车载控制系统、导航管理终端、农业作业云数据平台服务等一整套解决方案,其最新的导航管理终端TMX-2050基于Android平台进行开发,提供了精致完善的农机自动导航的操作和管理功能。相比之下,国内的研究和应用起步较晚,从事精准农业的厂商的导航管理系统有些是直接引用国外的产品进行组合和二次开发。国内高校关于农机导航控制的研究大多处于实验室阶段,有关导航管理系统的研究较少。张亚娇等人提出了一种基于WinCE的农机导航监控终端系统,并在旱田作业拖拉机上进行了测试,取得了一定的实用效果[3]。笔者在Android移动终端在工业中应用越来越广泛的趋势下[4],结合基于GPS技术的农机导航系统发展现状[5],针对精准农业中的作业管理需求[6],设计了一套基于Android平台的农机导航管理系统,提出了一种实用的路径规划算法,其具有丰富的功能模块和良好的人机交互实践效果。
1 系统整体框架
根据水稻田穴直播机的实际作业需求,导航管理系统的硬件包括拖拉机车载控制器、无线数传电台收发端、串口蓝牙和小米平板,如图1所示。车载控制器用于接入GPS定位数据、角度传感器、陀螺仪倾角数据及精量播种等传感输入信息,并输出控制信号控制转向及油门和档位系统的动作。
KYL-320H高速数传电台和串口蓝牙构成远程无线通信方案;小米平板是基于Android系统的终端设备。本文的重点是软件系统的设计。从图1中可以看到:其架构主要包含农机参数与作业参数管理、水田地理信息管理、农机作业路径规划、导航实时监控和交互界面和历史作业数据管理5个模块。系统的工作流程如图2所示。工作时,安装并初始化GPS接收机,启动车载控制器,然后启动Android终端程序打开蓝牙连接建立通信。导航管理系统先加载包括地块信息、车辆参数和作业行间距等在内的默认参数设置。系统初次运行时需要用户对新添地块进行标定,即沿着田块轮廓行走一圈确定其拓扑边界并保存到地块信息数据库中。配置好地块和车辆后,用户点击进入导航实时监控页面,加载规划路径,启动自动导航,车载控制器开始控制执行机构进行实时路径跟踪作业,作业结束后可以通过历史作业管理模块查询历史作业数据。
图1 系统功能模块划分
图2 系统工作流程
2 基于Android的系统设计与实现
2.1 系统分层设计框架
Android系统已经占据移动端市场的80%以上,工业中也越来越多地使用Android代替传统的嵌入式终端设备的软件平台。本文根据农机导航系统的功能需求和业务逻辑,将系统分为4个层次,在Android Studio集成开发环境下完成了导航软件的设计与开发。系统设计框架分为交互界面层、业务逻辑层、算法工具层,以及数据访问和通信层,如图3所示。这些层之间垂直调用,共同完成系统功能。使用分层结构的好处是便于数据、模型和界面的解耦,实现程序的模块化设计。
图3 分层设计框架
2.2 交互界面层
交互界面层负责用户与车载控制器的交互操作、作业参数和导航轨迹显示等工作。Android系统程序每个界面对应一个Activity文件加一个XML布局文件。本系统中包含有启动界面、设备连接管理界面、车辆参数添加界面、地块添加界面、路径规划界面,以及导航实时监控界面等。另外,此层的工作还包括每个界面中的按钮、控件、弹窗、自定义控件及其适配器和属性动画等编写等。
2.3 业务逻辑层
业务逻辑层负责侦听用户的操作,把用户的输入事件收集起来回调给主线程,交给程序作进一步处理,同时负责从后台接收消息和数据对主界面进行刷新。该层主要包括BroadcastReceiver(广播接收器)、Service(后台服务)、OnClickListener(事件侦听器)及Handler(消息处理器)。广播接收器用于蓝牙设备连接时,系统硬件驱动层进行设备搜索,把结果广播给导航管理控制应用程序;后台服务用于后台开启和保持蓝牙收发数据的通信线程。事件侦听器在程序中大量使用,每个按钮和自定义控件的点击、长按等动作都会触发该类,然后将动作回调给活动进行下一步处理;消息处理器(Handler)用于导航实时监控界面。Android应用是单线程模型,默认只有一个主界面线程,即UI线程,所有组件都是运行在这个线程中,所以这个线程不能进行实时刷新,如果在这个线程进行耗时的操作会阻塞UI线程,导致程序不响应甚至可能报错[7]。导航管理系统的导航实时监控界面,需要不断从车载终端读取数据并刷新界面,这时需要另外开启一个工作线程,该线程负责无线通信数据的收发。此时,子线程收到的数据就需要通过Handler对UI进行实时刷新。此外,需要特别注意的是,在应用中使用消息处理器的活动要配合使用弱引用方法(WeakReference)来避免内存泄漏问题[8]。
2.4 算法工具层
算法工具层负责连接数据和业务逻辑的功能,包括空间地理几何算法类、作业路径生成类、导航交互指令控制逻辑类、文件格式转换工具类及通信数据解析工具类等。地理几何算法类将几个常用计算几何算法封装成了可以供其他类直接调用的方法,包括点线位置判断、两直线夹角、直线平移算法和判断点是否在多边形内部的PNPoly算法等[9]。作业路径类封装了水田自动导航常规作业路径规算法。导航交互指令控制逻辑类用于处理终端和车载控制器的交互控制指令。这些指令包括农机导航的启动、停止、运行档位、油门控制、转向指令、设置AB点、制动,以及悬挂的精量穴直播机的控制等若干指令。为了防止导航终端对车载控制器的控制指令因为网络丢包、延迟等原因而未及时得到响应,指令交互控制的逻辑设计仿照TCP建立连接的“三次握手”的方式,Android终端每一个指令都会持续发送给车载控制器,直到车载控制器返回响应信号,终端才会切换发送指令。地图格式转换工具主要借助第三方开源工具包,将新添加的地块地理信息数据以shape文件格式保存。拥有丰富的开源资源,这也是Android平台应用开发的一大优势。通信数据解析类的作用在于将蓝牙通信建立的Socket流数据解包为一个个独立的消息。
2.5 数据访问和通信层
数据访问和通信层主要包括应用数据的存取和通信数据的收发解决方案。本文的导航管理系统用到了Android系统数据持久化的4个方案中的3种:文件、SQLite数据库和SharedPreferences。
文件用于永久保存一些访问不是很频繁的数据,如拖拉机车辆参数信息、农机挂载农具参数和水田地块数字地图等,同时可以作为这些数据的备份方案。SQLite是一种轻量型数据库,其操作主要包括SQLiteOpenHelper和DatabaseManager类。本文设计的系统中的数据库共建立了4个分表,即田块地理信息表、车辆及农具参数表、作业AB线表即历史作业数据表,且封装好了这些数据表的增删改查操作方法,有效地实现了农机导航过程中各种数据的持久化保存和快速读取。SharedPreferences是Android系统的一种特有的使用“键值对”的方式把数据存储在XML文件中的数据存取方案,用于保存用户默认偏好设置。它在本系统中用于保存如默认车辆、默认地块等的系统默认设置参数,下次程序启动时如果用户不进行修改则直接加载默认配置,节省了用户操作时间。通信层的功能是负责蓝牙连接管理和蓝牙Socket的建立,这里需要用到Android多线程开发技术,需要单独开启一个通信线程负责终端和车载控制器的数据接收和发送。
3 基于地块的作业路径规划算法
基于GPS的农机自动导航的作业方式一般采用AB线方式,农机在田块一侧设定基准A点,驾驶一段距离后设置基准B点,然后沿着AB线方向及其平行线完成整个地块的自动驾驶[10]。这种方式缺点是每次作业都需要人工驾驶拖拉机在地块表面上行走一段,不仅费力费时,且压实了田地不利于播种。本文设计了一种既可以基于AB线方式生成规划路径又可以根据地块轮廓自动生成规划路径的算法,流程如图4所示。其主要过程为选择地块区域、选择预设AB线(可以为空)、地头宽度和作业行间距,先确定地头区域和基准线,然后基于平行扫描和PNPoly几何算法生成所需轨迹。其中,地头区域宽度的确定由拖拉机最小拐弯半径、作业方向等参数决定[11-12],作业行间距由农机具幅宽和结合线宽度决定。图5展示了上面算法在实验地块上没有AB线和有AB线的两种作业路径规划的结果。
图4 路径规划流程图
图5 路径规划结果
4 田间试验
将导航管理系统装载在平板上,与拖拉机车载控制器建立好无线连接,使用平板操作农机自动导航作业,在上海市松江农机推广站的试验田上开展的多次试验。图6是一次导航实验的实时监控界面;图7是农机在水田的实际行走轨迹。在实验过程中,平板系统界面简洁易操作,始终能保持稳定的无线数据传输,几乎没有数据丢失;控制指令能够快速下发给车载控制器并得到其响应,实时导航作业监控界面能够实时显示农机的行走轨迹,快速刷新农机运动参数;地块信息、车辆信息数据库能够稳定工作,历史作业数据可以很方便地查询;导航界面上农机的行走轨迹真实地绘制了农机的实际轨迹。另外,可以看到导航界面上规划的路径几乎完全被实际行走轨迹覆盖,说明设计的农机车载控制器的跟踪精度非常理想,后续开展的导航实验横向偏差数据分析也验证了这一点。田间试验结果表明:导航管理系统能够很好地适应车载导航控制器的人机交互功能,体验性能良好。
图6 田间试验导航实时监控界面
图7 拖拉机实际行走轨迹
5 结论
设计了一种基于Android的水稻田农机自动导航管理系统,该系统包括农机参数管理、田地地理信息管理、路径规划、导航实时监控和历史作业数据管理等几个模块,提出了一种实用的作业路径规划方法,采用分层设计模式完成了系统软件设计,并开展了多次田间试验。试验结果表明:该系统能够实现基于高精度GNSS的农机自动导航管理、监控和交互操作功能,运行稳定可靠,体验性能良好,在农机自动导航中具有现实意义。