本博客针对个人工程实践项目-基于VSLAM的室内三维地图重建系统,进行软件系统分析和设计,最终形成软件系统概念原型。
目前主流的视觉和激光SLAM系统,在雾霾、粉尘、烟雾以及弱光等环境都无法正常工作。热红外摄像机能够在这些环境下很好的工作,这使得视觉SLAM方法在这些恶劣的环境下有着良好的应用前景。基于SLAM,完成热成像摄像头进行巡游环境采集环境信息和位置估计;PC端接收数据进行数据分析,误差监测及解算位姿完成自主定位。
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,常用的软件架构风格有如下几类:
管道-过滤器
客户-服务器
P2P
发布-订阅
CRUD
层次化
本项目采用客户-服务器模式的架构风格,由相机端与PC端组成,PC端具有将结果可视化的功能。客户-服务模式的架构风格具有典型的模块化特征、降低了系统中客户和服务构件之间的耦合度,提高服务构件的可重用性。
图像增强类:参数,imageBuffer,运行图像预处理线程,进行CLAHE直方图均衡化,获取时间戳
图像超分辨率重建类:参数:imageBuffer,对图像进行超分辨率重建为img格式的图片,获取当前实间,新建文件夹
特征提取类:参数,:mageBuffer,线特征检测,在图像中找到显示的直线,区域比对,直线比对
? 软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整的描述一个逻辑自洽的软件架构模型,一般来说,常见的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
? 依赖视图展现了模块之间的依赖关系,例如软件模块A调用软件模块B,那么可以说软件模块A直接依赖软件模块B,若一个软件模块依赖于另一个软件模块产生的数据,那么至两个软件模块也具有一定的依赖关系。在本项目中,服务端中的软件模块具有较强的依赖性,这也是后续需要改进的地方,例如只有处理完数据才能进行模型训练
? 执行视图展示了系统运行时的时序结构特点,执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系,执行视图可以是流程图、时序图等,这里使用流程图来展示
实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述,但是这些包和类都是在哪些目录的哪些源文件中具体实现的呢?一般我们通过目录和源文件的命名来对应软件架构中的包、类等静态结构单元,这样典型的实现视图就可以由软件项目的源文件目录树来呈现。
? 部署视图是将执行实体和计算机资源建立映射关系。部署视图有助于设计人员分析一个设计的质量属性,比如软件处理网络高并发的能力、软件对处理器的计算需求等。
?
? 工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。
任务 | 成员 | 预计周期 | 开始时间 | 完成时间 |
---|---|---|---|---|
课题调研 | A、B | 1周 | 10月25日 | 11月1日 |
成像模块 | A、B | 1周 | 11月2日 | 11月10日 |
预处理模块 | A、B | 2个月 | 11月10日 | 12月15日 |
特征提取模块 | A | 1个月 | 12月20日 | 预计1月20日完成 |
位姿解算模块 | B | 1个月 | 12月20日 | 预计1月20日完成 |
轨迹显示 | A、B | 2周 | 预计1月20日开始 | 预计2月5日完成 |
设备
序号 | 字段 | 字段类型 | 字段描述 | 备注 |
---|---|---|---|---|
1 | captureID | String | 设备ID | 主键 |
2 | captureStatus | String | 设备状态 |
图像增强
序号 | 字段 | 字段类型 | 字段描述 | 备注 |
---|---|---|---|---|
1 | capture_cv | Capture | 设备 | 主键 |
2 | imageBuffer | NotifyBuffer | 图像缓冲区 |
文件类
序号 | 字段 | 字段类型 | 字段描述 | 备注 |
---|---|---|---|---|
1 | fileID | String | 文件ID | 主键 |
2 | fileFormat | String | 文件格式 | |
3 | subFileNum | int | 子文件数目 |
图片类
序号 | 字段 | 字段类型 | 字段描述 | 备注 |
---|---|---|---|---|
1 | pictureID | String | 图片ID | 主键、自增 |
? Ubuntu16.04
? python 2.7
? ros kinetic
? opencv 3:是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
? pyqt 5
? openni 1
? turtlebot2
? rviz
? 可以从以下两个方面来阐述核心工作机制
? 1、从热成像仪方面:采用热成像相机,环绕周围环境进行照片拍摄,并实时将信息传输到PC端,直到地图构建完全。
? 2、从PC端:收到相机传来的照片数据,对照片做图像预处理,包括图像增强、图像超分辨率重建,然后对处理过后的图像进行特征提取,包括点特征提取和线特征提取,然后对提取出来的特征进行位姿解算,包括点特征的位姿解算和线特征的位姿解算,然后进行位姿比对,若有累计漂移误差,则进行回环检测,重复上述操作,直到图像收敛,得到良好的三维地图模型和位姿估计。
原文:https://www.cnblogs.com/lijing111blog/p/14212445.html