Skip to content

系统架构风格

【概要】

    2022年2月,本人所在的公司为集团下属某遥测公司开发了一套无人机管理系统。该系统主要负责规划无人机飞行航线、采集遥测信息,根据无人机回传的图片以及视频识别车辆违停、垃圾违规倾倒、无证驾驶等违法行为,以达到智能空中巡查的目的。我在项目中主要担任架构师角色,主要负责系统架构相关的工作。本文将以该系统为例,论述架构风格在项目中的具体应用。首先,通过面向对象的架构风格,抽象出许多对象及行为如无人机、驾驶员、航线、飞行任务、无人机绑定与解绑、飞行任务执行和终止、无人机抓拍、无人机视频回传、地图三维视图等。其次,采用事件驱动,保证了无人机状态变更的同时也能及时的通知到相关用户;最后,采用了管道-过滤器架构,基于无人机遥测信息,在三维地图中实时绘制无人机位置、倾斜度以及飞行方向等信息,让用户所见即所得。项目最终顺利上线,获得了公司领导层和用户的一致好评。

【正文】

    随着无人机技术的发展,一方面政策法规逐步完善,对民用无人机飞行的管理也更加严格。另一方面,无人机可以利用高空优势弥补传统地面监督的缺点,在更广更高的角度太通过视频和抓拍图片留证上报违法行为。而民用无人机驾驶员需要具有民用无人机驾驶证,在起飞前需要向空军报备航线,只有通过审批后才可以起飞。本系统主要目的简化飞行操作和起飞申请流程,降低操作门槛,并且通过无人机抓拍上报事件给相关管理部门。项目的开发、测试、产品经理等角色在内20余人,耗时10个月。我在项目中主要担任架构师角色,负责项目的架构设计相关工作。

    在做软件架构设计时,为了提高系统的复用性和开发效率,通常会采用一些架构风格。比如:数据流体系架构、虚拟机架构、以数据为中心的架构、调用返回架构、独立构件架构。数据流体系架构包括管道过滤器和流处理,上一流程的结果是下一流程的输入。其中管道过滤器通过经数据处理逻辑放在过滤器中,过滤器之间由管道连接,按照管道顺序实时对数据处理。而批处理强调数据的整体性,必须在上一流程完全结束才能进行下一流程的处理。虚拟机架构包括解释器和规则,根据外界环境的变化做出相应的调整。其中解释器风格通过自定义解释引擎,允许输入不同规范的数据,经由解释器引擎处理后输出统一规范的数据。规则系统是在解释器的基础上又定增加了经验规则。以数据为中心的架构包括黑板系统和仓库系统。其中黑板系统是适用与解空间大、没有确定回答的系统,通过其他子过程的解输出最优的解。调用返回架构包括层次架构、面向对象架构以及主程序-子程序等,将系统拆分成多个子系统,处理问题时将一个大问题拆分成多个子问题交给各个子系统处理,后返回子系统的处理结果。最后,独立构件架构包括事件系统,支持异步的、可复用的、独立部署的,使系统的组成更加松耦合。

    第一,面向对象架构风格。该风格要求我们在前期需要尽可能的识别出系统中的对象和相关行为信息。所以在需求分析阶段,我们根据项目的两个首要参与方:无人机和驾驶员,进而分析两个参与方相关的对象,例如:航线、飞行任务、地图、禁飞区、飞行场景、机场、飞行计划、标注库、媒体库等。另外还抽象出了对象的行为,例如:无人机的绑定、驾驶员与无人机关联、航线的创建、航线的编辑、飞行任务创建、飞行计划的申请、自定义时间飞行、飞行中的地图标注、飞行日志记录等。然后,交互通过对象之间的调用实现。如自定义时间飞行指定无人机时需要获取无人机信息则通过调用无人机对象获取,飞行航线创建支持可视化时需要调用地图对象三维化航点信息,飞行计划申请时需要调用机场对象中的天气预告以及实时天气信息判断是否允许飞行。

    第二,事件驱动风格。无人机飞行过程中的状态变更信息、飞行计划的执行情况等需要及时的通知相关用户,同时不会阻断系统后续执行,这刚好符合事件驱动架构风格的特点。在系统中,当无人机发生信号连接失败时需要及时通知驾驶员处理,抓拍到无证驾驶等违法行为时需要及时通知公安部门介入处理等等。为了保证消息的及时传递,引入了短信通知和手机推送。在无人机飞行过程中丢失信号时,并且重新尝试3次连接之后仍无法正常通信,则向消息中间件发送无人机状态变化信息,同时通过通知推送处理模块给订阅用户推送APP消息。当无人机捕获非法捕鱼、倾倒垃圾等违法信息后将自动生成上报事件,我们除了将这些记录写到数据库之外,还会发送至消息中间件,城管部门通过订阅消息中心获取事件信息后去现场执法,而无人机仍会继续执行飞行任务。

    第三,管道-过滤器架构风格。由于无人机的位置需要在地图中实时展示,处理传输过来的数据又需要经历分析、单位统一换算、不同坐标系下的坐标转换等一系列操作,而且传输格式是固定、下一过程输入的结果依赖上一过程的输入。而管道-过滤器风格刚好符合我们的要求,该风格的优点是将数据按过滤器顺序依次处理,而且没有整体性限制。首先,我们将整体计算任务拆分成多个子任务放在不同的过滤器中,后将无人机实时传输回来的地理信息传递到过滤器中,将处理后的数据写入到管道中并传输到下一过滤器中。接下来在绘制过程中,将数据计算过程中转换为WGS84规范的实时经纬度、ASL、AGL等航点信息再经过视图转换、矩阵变换等转换逻辑得出三维地图下的坐标,最后绘制到三维地图中。这提高了遥测信息处理的灵活性和拓展性。

    该系统因为使用了以上三种架构风格,所以在开发阶段都很顺利。同时也让系统的可扩展性、可修改性、松耦合行、重用性达到了设计要求。系统在2022年12月正式上线,系统上线之后,陆续接入了遥测公司中许多无人机。到目前为止的一年时间中,接入的无人机已经达到100余台,每天设备上报的遥测数据也达到了10万条。另外,系统运行也相对稳定,并未出现过重大故障,还受到了公司领导和用户的一致好评。

    虽然,使用架构风格的实践效果显著,但是还存在一些问题,例如:过滤器中解析和计算无人机回传的遥感信息逻辑复杂而且时间复杂度高,导致地图上渲染无人机实时位置时存在性能问题。所以该系统还存在需要优化空间,我们后续也会对系统持续演化,让系统变得更好,力争在遥测领域能开辟出属于自己的新天地。