请选择 进入手机版 | 继续访问电脑版

作品展示

原创作品:uestc_ecovacs_c

系统分类: 机器人创想秀 - 技术流

作品版权:uestc_ecovacs_c 版权所有,禁止匿名转载;禁止个人使用。

uestc_ecovacs_c

2015-6-20 17:03:18

初赛得分

总分(45.44)点赞数(12)评委打分(44.8)

评委[创想秀_评委1]: 继续努力,会发现更多的问题;

作品亮点:

我们团队使用了OpenCV技术。在电脑上搭建了基于Visual Studio 2013的OpenCV开发环境。在更加深入的学习了OpenCV之后,我们发现它的确是一个好东西。但是,说实话,我们现在所利用的技术只是OpenCV中的皮毛而已,希望我们以后能有更多的机会学习、使用该技术。我们是利用OpenCV中提供的训练文件,编写了人脸识别的程序,将识别到的人脸坐标与画面中心进行对比从而得到偏移量,用其来控制电机转动,从而使得人脸一直处于摄像头画面中间。 在对于识别出来的人脸坐标,我们使用了一个简单的算法,将其转换为DivDat属于[-85,85]区间,如果检查出来的人脸位于屏幕中间,即DivDat=0。转换公式如下: DivDat = (r->x*scale + r->width*scale / 2 - CenterPoint) * 128 / 320; //DivDat目标x轴偏移参数;r检查到的人脸坐标对象,r->x人脸坐标x, //r->width图像宽度;scale为图像缩放系数;CenterPoint为图像x轴中心点。 对于得到的目标偏移参数,我们再通过StepMotor(int step,int stepy)函数处理后通过连接的com端口送出给单片机,单片机再处理后驱动步进电机,从而实现所需功能。我们将步进电机的正转和反转通过ComSend函数中第一个参数为1或0来确定。从而让单片机在处理数据的时候能够很方便的区分正转、反转。另外,我们在发送数据的时候设置了结束标识符 lpOutBuffer[3] = \'\\r\'; lpOutBuffer[4] = \'\\n\'; 再通过单片机程序RcvBuf[RcvCnt]==\'\\n\' ; RcvBuf[RcvCnt-1]==\'\\r\'来判断,就很容易区分一次命令是否发送完成。

作品说明:

一、 各部分硬件结构
单片机为stc89c52,P1^0--P1^3为步进电机控制信号端口,P2^0为舵机控制端口。单片机T2定时计时器为串口信号接收,T0和T1作为舵机控制。
步进电机搭载舵机,舵机控制摄像头上下运动,步进电机控制舵机左右运动。
一、 软件详解
电脑(上位机)上的软件部分主要是基于OpenCV的软件系统。在对于识别出来的人脸坐标,我们使用了一个简单的算法,将其转换为DivDat属于[-85,85]区间,如果检查出来的人脸位于屏幕中间,即DivDat=0。转换公式如下:
file:///C:\Users\lenovo\AppData\Local\Temp\ksohtml\wpsE566.tmp.png
DivDat = (r->x*scale + r->width*scale / 2 - CenterPoint) * 128 / 320;
//DivDat目标x轴偏移参数;r检查到的人脸坐标对象,r->x人脸坐标x,
//r->width图像宽度;scale为图像缩放系数;CenterPoint为图像x轴中心点。

对于得到的目标偏移参数,对于y轴的偏移参数可以类似得出。我们再通过StepMotor(int step,int stepy)函数处理后通过连接的com端口送出给单片机,单片机再处理后驱动步进电机,从而实现所需功能。我们将步进电机的正转和反转通过ComSend函数中第一个参数为1或0来确定。从而让单片机在处理数据的时候能够很方便的区分正转、反转。另外,我们在发送数据的时候设置了结束标识符
lpOutBuffer[3] = '\r';
        lpOutBuffer[4] = '\n';
再通过单片机程序RcvBuf[RcvCnt]=='\n' ; RcvBuf[RcvCnt-1]=='\r'来判断,就很容易区分一次命令是否发送完成。
在单片机程序上面我们用if语句实现了正转、反转的区分,具体程序如下:
for(;;)
                {
                        if(RcvFlag==0xff)
                        {
                        RcvFlag=0x00;

                                if(RcvBuf[0]==0x00)
                                {
                                        Forward(RcvBuf[1]);
                                        //pwm_value=temph;
                                }
                                else if(RcvBuf[0]==0x01)
                                {
                                        Backward(RcvBuf[1]);
                                        //pwm_value=temph;               
                                }
                        }
                }

二、 创新点
我们主要使用了一个算法,将检测到的人脸偏移坐标转换成方便传输的数据。同时在数据传输方面,我们使用了一个数组来存储一段数据,利用设计的结束标识符来区分一段命令的结束。
第一章 综合调试
一、 硬件调试
硬件调试部分主要是针对每个模块来编写程序进行调试,调试结果比较令人满意
二、 软件调试
软件调试部分是建立在硬件调试部分完成的基础上。但是对于基于OpenCV的软件部分先脱机(不连接单片机)调试,验证了算法的正确性。
三、 综合调试及效果
在硬件和软件调试都完成的情况下,将上位机和下位机连接好,进行了综合调试,得到的结果比较满意,但是舵机部分反应并不是十分流畅。
第二章 成果与结论
一、 课题完成情况总结
总得来说,本课题在我们团队共同努力下还算是比较成功的完成了。虽然在这个过程中我们有过困难,有过阻碍,但是,我们都坚决突破自我永不言弃,最后将这个作品展示给大家。
二、 问题与展望
这绝对是一个令人激动人心的项目,这个想法可以被我们扩展到无限大,只要你有想法,一定可以惊艳!但是我们知道任何事情都得一步一个脚印,我们会完成好这个项目,即使在比赛之后,我们也会不断的追求我们的idea。
同时也希望在以后能够有更多的机会接触我们不大熟悉的技术,这样才能更加突破自我。


其他作品
返回列表