定位推断系统软件设计方案

0 前言

  以工程实践项目——定位推断系统为基础,本文将给出该项目的完整设计方案,并总结设计方案中所蕴含的软件结构特点;同时采用不同的视图来描述项目的软件系统概念原型,给出项目的数据库设计、源代码的目录文件结构,最后说明系统概念原型的核心工作机制。项目概述:目前传统的移动终端定位方式主要是通过四颗已知位置的卫星来确定GPS接收器的位置,而现在考虑通过设备所接收的多个蓝牙信号通过机器学习、深度学习来推断当前设备所处的位置。我们在某个区域部署固定基站来广播蓝牙信号,设备接收到信号后,将接收到的蓝牙信号强度等信息上传至服务器,使用构建好的网络模型,经过训练和测试后,推断出设备的行动轨迹。

1 系统架构风格

  该项目采用客户-服务模式的架构风格,由手机终端、pc端、服务器端和多个蓝牙节点组成,在手机终端个服务器全采用C/S架构,具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据等优点,而pc端与服务器端采用B/S架构,pc端将推理结果可视化,所以使用B/S架构开发简单,共享性强。客户-服务模式的架构风格具有典型的模块化特征、降低了系统中客户和服务构件之间的耦合度,提高服务构件的可重用性。

2 设计模式

  设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。在实际开发过程中,假如没有按照设计模型的理念进行开发,当需求发生变化时,修改一个地方的代码往往会给另一个地方带来破坏,所以通过使用常见的设计魔术,例如单例模式、原型模式、代理模式、适配器模式等,使用模块化封装的方法,按照模块化追求的高内聚低耦合目标,借助抽象思维对模块内部信息的隐藏并使用封装接口对外只暴露必要的可见信息,利用多态、闭包、lamda函数、回调函数等特殊的机制方法,将变化的部分与不变的地方进行适当的隔离,来应对总是变化的需求和软件本质上的模型不稳定特质。

在该项目中,由于要使用多种算法,所以使用策略模式,对服务端中各个网络结构模型封装起来,使其相互替换或融合,且算法内部的改变不会影响外部的使用,例如:

  客户端和服务端需要不断的进行交互,在客户端和服务端之间增加中间层,即创建代理类来控制对象的访问;在推断和效果展示阶段,使用命令模式,将客户端请求封装为一个对象,使发出请求的责任与执行请求的责任分离,以方便将命令对象进行存储、传递和管理。

3 前后端接口API

  前后端进行数据传输时,遵循相应的接口格式,前端发送给后端的数据格式为:

{
    url:” ”, 
    type:” ”, 
    parmas:{}
}
其中,url 为请求的后端的方法接口;type 为请求方式;parmas 为请求参数,也是一个 json 格式的数据。
服务端返回给前端的的数据格式如下:
{
    code:” ”, 
    msg:” ”, 
    data:{}
}
code 为状态码,通过代码表示每次请求的不同状态;msg 表示不同状态下附带的信息,便于前端理解服务器或者该次请求的详细情况,使用弹窗提示用户相应的信息;data 则表示后后端传输给前端的数据。

  例如,增加蓝牙设备:

增加定位蓝牙设备
url: root + /addDevice
type:post
params:{ 
    mac: (String)
    longitude:(double)
    latitude: (double)
}

4 项目视图

  软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整的描述一个逻辑自洽的软件架构模型,一般来说,常见的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。

  4.1 分解视图

  对于一个系统,往往包含多个子系统,子系统又由各种包组成;包中又包含各种类。常见的分解方法有,面向功能的分解方法、面向特征的分解方法、面向并发的分解方法、面向事件的分解方法、面向对象的分解方法,用例建模即是一种面向功能的分解方法,这里使用面向功能的分解方法:

4.2 依赖视图

  依赖视图展现了模块之间的依赖关系,例如软件模块A调用软件模块B,那么可以说软件模块A直接依赖软件模块B,若一个软件模块依赖于另一个软件模块产生的数据,那么至两个软件模块也具有一定的依赖关系。在本项目中,服务端中的软件模块具有较强的依赖性,这也是后续需要改进的地方,例如只有处理完数据才能进行模型训练。

  4.3 执行视图

  执行视图展示了系统运行时的时序结构特点,执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系,执行视图可以是流程图、时序图等,这里使用时序图来展示系统运行的时序关系。

  4.4 工作分配视图

  工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。

  

  4.5 实现视图  

   实现视图是描述软件架构与源文件之间的映射关系,典型的实现视图可以由软件项目的源文件目录树来呈现,实现视图有助于开发者在源代码中找到具体的某个软件单元的实现。服务端采用Spring Boot框架,src/main/java中存放后端代码,包含Application.java启动类、controller控制器类、对数据库操作接口以及相应的工具类(只做了数据收集、处理和保存部分),src/main/resources中存放资源文件和配置文件;src/test/java为测试程序。展示部分比较简单,只需将请求的数据展示出来即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 数据库设计

  users表,用来存放用户/管理员:

字段 类型 含义 备注
id string 用户唯一标识 主键
root string 权限 普通用户/管理员

  user_data关联表:

字段 类型 含义 备注
userid string 用户id 主键
dataid string 数据id 主键

  datas表,用来存放用户上传的数据信息:

字段 类型 含义 备注
dataid string 数据id 主键
mac string 蓝牙mac  
rssi double 信号强度  
rssi_1m double 1m处的信号强度  
longitude_gps long 精度  
latitude_gps long 维度  
timestamp long 时间戳  

  models表,用来存放训练好的模型权重及相关信息:

字段 类型 含义 备注
modelid string 模型标识 主键
model / 模型文件  
accuracy double 模型准确度  

6 系统运行环境和技术选型说明

  后端使用Spring Boot框架,可以快速构建项目,对主流开发框架的无配置集成,封装了各种经常使用的套件,比如mybatis、hibernate、redis、mongodb等,极大地提高了开发、部署效率。手机app使用Android Studio开发、前端展示界面使用VS Code编写;后端采用java和python语言,使用java搭建后端整体框架、python进行数据处理以及模型训练,进行混合开发;由于小组之间分工不同,负责的功能模块不同,所以更加强调面向接口编程,只需要事先约定好接口规范,便大大提高了开发效率。

7 核心工作机制

  在数据获取和处理阶段,用户在移动过程中通过手机获取到部署在任意场景下的多个蓝牙信号广播装置所发出的蓝牙信号,通过对多个蓝牙信号的整合后,将当前获取到的蓝牙信号和当前GPS上传至服务器,管理员制定过滤和整合标准,再对数据进行一次过滤和整合,得到一条可能有用的数据。训练以及改进阶段,待数据收集完毕,由管理员对整合的数据进行可视化分析和相关性研究后,选择衡量成功的标准并确定评估方法和损失函数、准备数据,该过程主要包括:数据集的划分以及对数据进行清洗和特征选择,最后选择可用的模型并训练。推断阶段,通过用户在移动过程中蓝牙信号的变化,模型推测出用户的位置,并使用可视化显示出用户轨迹。

参考:https://gitee.com/mengning997/se

posted @ 2020-12-29 16:50  Dem0_zhu  阅读(194)  评论(0)    收藏  举报