ROBOGAME参赛期望

Report
2014RoboGame
上位机程序设计
• 张海滨
• 电话:15805519140
• 邮箱:[email protected]
Outline
开发环境
基本控件和
串口通信
Dll调用
上位机程序
编写Note
• VS(VB,C++,C#)
• Matlab
• Labviw
• 基本控件介绍
• 基于VS的串口通信
• Matlab的Dll文件生成
• VS的调用
• 程序控制流程图(程序框架)
• 程序调试技巧
• 异常处理、防假死、数据库、多线程
• Robogame参赛期望
寄语
开发环境介绍( Visual Studio2010 )
√
VS2010的前世今生
VS2010工程解析
VS2010环境配置
VS2010代码调试
代码运行与bug发现
VS2010的前世今生
新特性:
C++标准方面:
新标准C++0x的
全面支持。
IDE方面:
MS Build
IntelliSense
MFC方面:
增加了新的UI控件
类:实现了对
Windows 7界面
风格的全面支持
VS2010的前世今生
√
VS2010工程解析
VS2010环境配置
VS2010代码调试
代码运行与bug发现
VS2010的前世今生
VS2010工程解析
√
VS2010环境配置
VS2010代码调试
下一阶段工作分析
VS2010的前世今生
VS2010工程解析
VS2010环境配置
√
VS2010代码调试
代码运行与bug发现
VS2010代码调试-调试信息查看
VS2010代码调试-步进调试
VS2010代码调试-调试工具
Outline
开发环境
基本控件和
串口通信
Dll调用
上位机程序
编写Note
• VS(VB,C++,C#)
• Matlab
• Labviw
• 基本控件介绍
• 基于VS的串口通信
• Matlab的Dll文件生成
• VS的调用
• 程序控制流程图(程序框架)
• 程序调试技巧
• 异常处理、防假死、数据库、多线程
• Robogame参赛期望
寄语
串行接口简称串口,
也称串行通信接口(通常
指COM接口),是采用串
行通信方式的扩展接口。
串行接口 (Serial
Interface) 是指数据一位一
位地顺序传送,其特点是
通信线路简单,只要一对
传输线就可以实现双向通
信(可以直接利用电话线
作为传输线),从而大大
降低了成本。
通信协议
View Detail
开发环境
基本控件和
串口通信
Dll调用
上位机程序
编写Note
• VS(VB,C++,C#)
• Matlab
• Labviw
• 基本控件介绍
• 基于VS的串口通信
• Matlab的Dll文件生成
• VS的调用
• 程序控制流程图(程序框架)
• 程序调试技巧
• 异常处理、防假死、数据库、多线程
• Robogame参赛期望
寄语
开发环境
基本控件和
串口通信
Dll调用
上位机程序
编写Note
• VS(VB,C++,C#)
• Matlab
• Labviw
• 基本控件介绍
• 基于VS的串口通信
• Matlab的Dll文件生成
• VS的调用
• 程序控制流程图(程序框架)
• 程序调试技巧
• 异常处理、防假死、数据库、多线程
• Robogame参赛期望
寄语
良好的编程习惯
良好的习惯对于人的成长是非常重要的,良好的编程习惯对于我们编程能
力的提高也是非常重要的。我们编程时要有良好的风格,源代码的逻辑简
明清晰,易读易懂是好程序的重要标准。
规则:
(1) 标识符应含有含义鲜明的单词
• 尽量不要直接用一个字母的变量,除了约定的几个变量如i、j、k、n等,一般使用一些单词
的缩写,或直接用汉语拼音的缩写。
(2) 适当的把一个大程序分割成若干个子程序
• 适当的写若干个子程序,会减轻很多的调试负担。在调试程序过程中,首先调试每个子程
序,子程序相对来说规模较小,调试比较方便。然后再去调试主程序。这样调试的思路会比
较清晰。
(3) 程序中添加适当的注释
• 对于一些语句比较多的程序,在某块实现某个功能的语句前添加简短的注释,有助于自己更
清楚的认识自己的程序。
(4) 程序的结构要清晰
• 一般来说每条语句要比它的上层语句退2格,属于同一层的语句要对齐。Begin和end要对齐,
有助于检查它们的配对。
模
块
化
顺序
执行
/
条件
执行
通信
/
传感
器
/
判断
程序调试
断点的设置
监视窗口的设置
单步调试
添加中间输出
断点设置
• F9/鼠标单击/右键快速断点设置
变量监视(变量窗口/鼠标悬停)
逐过程调试
• 在断点处,如果希望继续执行程序,则可
按F5键,程序会运行到下一个断点的代码
行处。
• 如果要一步步查看程序的执行情况,以及
变量、属性值等,则可按F10键(逐过程调
试的快捷键)。
逐语句调试
• 在调用函数的情况下,逐过程调试将执行
函数,然后跳过函数体。
• F11逐语句调试
能够看到函数体内的代码逐句执行的情况。
加入WriteLine输出语句。
查找所有引用、转到定义
调试重心在于修正语法错误
和逻辑错误的过程,重点在
于定位问题。
SQL(Structured Query Language) Server
数字图像处理相关内容
• 图像处理基础
• 数字识别方法及步骤
图像处理
什么是图像
• 图像:二维函数f(x,y)。
– x, y为空间坐标,f(x,y)为图像信息(灰度、亮
度、颜色)。
• 数字图像:离散,矩阵
– 采样,量化,存储
– 数字图像元素:像素
• 成像方式
– 所有波段的电磁波
– 声波、震动等
数字图像表示
• 数字矩阵
 f ( 0 ,0 )

f (1,0 )
f ( x, y )  



 f ( N  1,0 )
f ( 0 ,1)

f (1,1)



f ( N  1,1) 
f ( 0 , M  1) 

f (1, M  1)




f ( N  1, M  1) 
 空间分辨率:M×N。
 灰度分辨率:离散灰度级数G
G  2k
 存储一幅数字图像所需位数
2
b M N k  N k
图像存储
• 数据结构
– 单通道:灰度图,二值图
– 多通道:RGB,HSV,YUV/YCbCr/YPbPr,RGBA……
– 索引图像:调色板,存储索引值
• 文件格式
– BMP格式(BitMap):位图,文件头+数据,未经压
缩,可以直接二进制读取操作
– JPEG:静止灰度或彩色,压缩率大,常用需要特定的
算法读取其中信息。
– GIF:8位文件格式,256色,压缩,动画
– PNG,TIF……
算术运算
• 图像运算
– 算术运算(加减乘除)
– 逻辑运算(与或非、异或)
图像增强
• 目的:提高清晰度,去噪声,前处理
• 用途:去噪声、边缘增强、提高对比度、改
变亮度、改善细节
– 空域法:像素直接操作
• 灰度变换、直方图修正、空域滤波
– 变换域法:变换后再处理,逆变换得到处理后图
像
• 频域滤波、小波分析等
空域法——灰度变换
• g(m,n) = T[ f(m,n) ]
– 功能:改变动态范围,灰度区域截取,感
兴趣区域
空域法——直方图修正
• 定义:灰度级出现频数(频率)分布
,反应图像清晰性,直方图均匀分布
时,图像最清晰。
• 均衡化:调节对比度,增强图像对比
度。
空域法——空域滤波器
空域滤波器
• 线性滤波器——模板与图像卷积
– 低通滤波器,高通滤波器,带通滤波器
• 非线性滤波器——取决与邻近像素值
– 中值滤波 R = mid{Zk}
– 最大值滤波 R = max{Zk}
– 最小值滤波 R = min{Zk}
W1
W2
W3
Z1
Z2
Z3
W4
W5
W6
Z4
Z5
Z6
W7
W8
W9
Z7
Z8
Z9
模板
像素邻域
空域滤波器——平滑滤波
• 平滑滤波器
– 用途:去除无用小细节,连接中断线段与
曲线,去噪音,平滑图像
– 方法:低通滤波,中值滤波
空域滤波器——锐化滤波
• 锐化滤波器
– 用途:改善细节,边缘提取,目标定位与
识别
– 方法:高通滤波器,微分滤波器
• 微分滤波器:Roberts交叉梯度算子,Prewitt
梯度算子,Sobel梯度算子,Laplacian二阶微
分算子
Roberts
Prewitt
Sobel
Laplacian
其它图像增强方法
• 频域
– 离散傅立叶变换
– 离散余弦变换
• 时频分析
– 盖伯变换
– 小波变换
图像分割
• 目的:提取感兴趣区域
• 用途:区域分割,目标定位,目标识
别与分类,规划与决策
– 边缘检测法:点、线、边
– Hough变换法
– 阈值分割法
– 数学形态学方法
图像分割——边缘检测
• 点的检测——空域高通滤波
• 线的检测——模板操作
• 边的检测——微分算子
– Roberts交叉梯度算子,Prewitt梯度算子,
Sobel梯度算子,Laplacian二阶微分算子
图像分割——阈值分割
• 通过灰度门限对图像像素进行分类
图像分割——数学形态学方法
• 腐蚀——使二值图像减小一圈
• 膨胀——使二值图像扩大一圈
原图
腐蚀后
膨胀后
图像分割——数学形态学方法
• 开-闭运算
– 开运算——先腐蚀,再膨胀
• 消除细小对象,分离细小粘连,不改变形状
平滑边缘
– 闭运算——先膨胀,再腐蚀
• 填充细小空洞,连接邻近对象,不改变面积
平滑边缘
原图
开运算
闭运算
数字识别方法及步骤
• 结构法识别(多个结合)
– 简单描绘子,如周长,面积,紧凑度,灰度等
– 形状数,边界矩
– 欧拉数
• 决策论法识别
– 分类器,最小距离,相关匹配
– 神经网络,支持向量机(SVM)
步骤
原始图像
预处理
灰度图
彩色空间
变换,阈
值分割
结构化识别
相关匹配识别
数字
信息
神经网络, SVM
网络训练
……
图像增强
滤波,去
除背景
包含数字区域
的二值图像
图像
分割
分割数字
区域
数字区域二值
图像
图像
细分
分割单个
数字
若干单数字二
值图像
预处理
1. 灰度化与二值化
– 方法,灰度阈值法,自适应阈值法……
2. 其它:滤波,形态学操作(开闭,腐
蚀/膨胀)
I0 = imread(file);
I0 = imresize(I0,[480,640]);
I = rgb2gray(I0);
imshow(I),title(‘Original Image');
I1 = im2bw(I,0.65);
分割
• 目标:提取数字区域,并分割单个数
字
[x,y] = find(I1);
x1 = min(x); x2 = max(x);
y1 = min(y); y2 = max(y);
I2 = I1(x1:x2, y1:y2);
表示与描述
• 数字特征
– 连通域
• 两个连通域:8
• 一个连通域:0,4,6,9
• 零个连通域:1,2,3,5,7
– 周长,曲率,端点个数……
60°
100°
120°
识别
• 字形确定,模板匹配方法:相关系数
,差,异或
匹配
结果
解释与结果
• 根据模板相关运算结果,识别数值。
待识别
模板运算
结果
6
1
优点:简单,运算量少;缺点:针对特定形状,通用性差
工具软件
• Matlab,图像处理,常用接口通信
• Visual Studio + 第三方库
– VC ,图像处理OpenCv,串口CSerialPort……
– C#,图形处理EmguCv, AForge.net……
• QT,C++库通用
• 其它,python,VB也有丰富的库供使用
• 不建议自己从底层做起,能直接使用稳定的
第三方库尽量使用,省时稳定
一些建议
• 学会使用Google,英文关键字可以得到更多信息
• 多关注诸如VS等软件的论坛
• 有时间多逛逛pudn,CSDN,CodeProject, Google
Project, source forge, github等代码托管社区,会有
很多源代码。
• 耐心
ROBOGAME参赛期望
Passion
Practice
Perseverance
Cooperation
Leadership
Enjoyment
Safety
Thank You!

similar documents