saturneric.github.io/source/_posts/NaoVision-General-Introduction.md
2019-10-25 14:17:51 +08:00

78 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: NaoVision
date: 2019-10-09 23:22:44
tags:
---
# NAOVision 帮助文档
## 项目概要
### 简介
NaoVision是实物NAO组的有关于NAO机器人在RoboCup比赛中的专用视觉方法解决方案。NaoVision使用C++编写旨在解决NAO机器人在Bhuman系统在原始的固定阈值方案下对于场地的颜色判别容易由光线等因素干扰导致在实际的比赛过程NAO机器人中对于场地内的物体特别是足球的识别不够快速、准确的问题。
在对于足球场地的判断上相对应的NaoVision采取OTSU算法实现对于图像处理阈值的自动调整能够不受光线阴影的影响在大多数情况下正确地识别并标记出场地像素。
在场地颜色判别的基础上NaoVision通过在图片中建立扫描线。通过对扫描线所在的像素进行采样与扫描确定场地与非场地的分界点。而后通过在分界点之间进行连线将图片划分为场地部分与非场地部分。
一般而言为了降低计算开销NaoVision只对于属于场地部分的图片像素进行计算。在确定计算范围之后NaoVison将在计算范围内建立间隔更小的扫描线针对计算范围内部的物体进行更加细致的扫描与探测。
而后NaoVision有限对于场地内的圆形物体进行探测。程序将在扫描线上进行均匀的跳跃扫描在探测到计算范围内不属于场地的像素后在该像素周围随机选取三个不共线的点。以这三个点为基点分别朝向八个方向进行扫描知道探测到场地像素后返回。而后判断这24个有效点是否在一个圆上并同时计算出圆的圆心坐标及其半径。将该圆加入候选队列后程序将继续对计算区域剩下的部分进行扫描。
(未完待续)
### 主要组成部分
在NaoVision的解决方案下采用 Visual Studio 2019开发
- **NAOFastTools** 核心工具组工程
- **NFTCommandLineTools** 通用命令行工具
- **NFTDeamon** 守护进程
- **NFTGUI** 调试界面工程
- **NFTTest** Opencv对接工具组工程
- **UnitTest** 单元测试工程
### 简要流程简介
问题说明由于将NFT与BHuman的直接嵌入方案遇到了种种问题本项目拟采用独立进程伴随BHuman的方式。
在实际的比赛过程中**NAOFastTools框架**被**NFTDeamon守护进程**驱动与Naoqi、BHuman并行运行在NAO机器人的系统中。**NFTDeamon守护进程**通过共享内存的方式与BHuman通信从BHuman获取摄像头数据经过计算后向BHuman传递视觉的修正信息。在平时的调试过程中可以使用**NFTCommandLineTools通用命令行工具**或者**NFTGUI调试界面**与**NFTDeamon守护进程**建立连接来监视与调整**NAOFastTools框架**或者**BHuman**的运行状态与相关参数。
(未完待续)
#### 组成部分简介
##### 1. NAOFastTools核心工具组工程
NAOFastTools核心工具组以下简称NFT中存放着该解决方案的进行图像处理与储存的核心框架以及对应的图形处理模块是该解决方案的核心工程。该工程遵循C++14标准少部分代码含有C++14的特性安装有BHuman2018的系统含有支持C++14的libstdc++.so。NFT最终生成在Windows与Linux下是对应的静态链接库NAOFastTools.lib与NAOFastTools.a。NFT通过与其他程序链接来发挥作用。除了在VS环境下进行编译NFT框架还可以在Linux环境下进行编译前提是正确安装clang、make、cmake工具。下面是NFT中几个特别重要的常用类与函数包括不限于下列的极其简单的介绍实际使用需要看代码理解
OperaMatrix是代理类是对于Eigen线性代数库的Matrix类的一层代理访问。除了提供代理访问服务之外它还提供智能指针服务能够根据引用计数自动创建与释放Matrix对象。一个或者多个OperaMatrix对应一个Matrix对象。OperaMatrix对象提供多种构造函数满足用户在大多数情况下的需要。OperaMatrix中的元素在内存中按照列优先的方式储存用户可以通过getData()接口直接获得指向矩阵首元素的指针。OperaMatrix对应的矩阵的行数与列数能够使用getRows()与getCols()获取。
Image类是图像的储存载体它含有一个或者多个OpreaMatrix对象对应图像的多个通道。一个OperaMatrix储存相应的一个通道的像素数据。正常情况下像素数据的类型PIXEL_TYPE定义在NFT.h中。图像的通道数量能够使用getColumns()方法获取,某个通道的引用可以直接使用[]运算符获得。图像的高与宽则使用getHeight()与getWidth()方法获取。
ImageYUV422类继承自Image类它提供压缩颜色空间YUV422的储存。需要注明它有且只有一个通道。在具体的内存实现上它将三个通道的像素数据压缩到一个通道进行储存。如果需要获取某个像素的Y、Cr、Cb值则可以调用getY(int, int)、getCr(int ,int)、getCb(int, int)进行访问。进一步如果需要修改图片中的某个像素的Y、Cr、Cb值则调用相应的setter并提供像素的坐标参数即可。
ImageColored类继承自ImageYUV422类也有且只有一个通道。它主要提供单通道图像的储存功能是场地颜色判别模块的输出结果的储存载体。它也是其他很多视觉模块的输入数据的储存载体。它禁用了ImageYUV422父类的所有的有关于YUV颜色空间的操作的特性。
ImageSaver类是Image类的储存服务类能够将Image对象中的数据正确储存在Windows或者Linux系统中的文件中.nftd后缀。它也能够通过读取.nftd格式的文件来构建相应的Image对象。
(未完待续)
##### 2. NFTGUI调试界面工程
NFTGUI调试界面基于Qt5是有关于NAOFastTools的可视化调试界面能输出进行各个图形处理模块的处理的中间结果及内部相关参数。
(未完待续)
##### 3.NFTTest Opencv对接工具组工程
NFTTest Opencv对接工具组是NaoVision框架与OpenCV框架对接的桥梁它提供了两个框架之间的主要数据结构之间的转换函数此外该工程也用于开发过程中的最基础的调试信息输出。
(未完待续)
##### 4.UnitTest单元测试工具
基于Google Test测试框架存放NAOFastTools中的核心框架的单元测试代码这些代码将保证核心框架能够高效、准确地运行也方便及时发现框架中的漏洞。
(未完待续)