瓦力视觉控制程序

上位机是采用了AForge.NET Framework-2.2.3和EZ-B SDK Windows v2011.11.09.00的结合。AForge真的很强大,不过没有涉及到控制这块,EZB就有现成的参考,但EZB没有提供核心部分的代码,而它只支持本地摄像头,所以我只能反编译获取需要的代码,移植到AForge的MotionDetectorSample这个例子里面。

 

工程文件

 

http://bbs.igee.cn/job.php?action=download&aid=4280

http://download.csdn.net/detail/channel_z/4074603

大部分代码都是来自网络,欢迎大家使用和修改,有好作品别忘了分享一下哦~

 

 

 

 

源代码解读

MainForm.cs是主窗口代码,上面有一个videoSourcePlayer来播放视频,初始化的时候默认会创建一个MotionDetector(ColorDetector)和一个MotionProcessing(MotionAreaHighlighting),分别是用来检测运动和显示运动区域的。当打开了摄像头之后,MainForm的videoSourcePlayer_NewFrame方法,就会在每一帧画面到来的时候被调用,这个方法会调用AForge.Vision.Motion.MotionDetector的ProcessFrame方法,然后它再调用刚才创建的ColorDetector和MotionAreaHighlighting。其实这个中间过程我们可以忽略,当我们需要新的处理方法的时候,只需要按一定的标准写MotionDetector和MotionProcessing,然后在MainForm调用就可以。

 

MotionDetector也很简单,主要就是Process_Frame方法,用来做运动检测,比如对比2个画面,有哪些像素的改变等等。我移植EZB的3个MotionDetector和原来的Detector有一点点不同。由于需要对运动的区域定位,并控制瓦力头部的转动,我写了一个父类Detector.cs,这里我们在ProcessFrame之前,先用DrawQuad方法画几条线,把画面分成9块。在ProcessFrame之后,我们就会得到一个位置,在画面哪一块发现了颜色(运动),然后调用Controller去控制瓦力头部运动。

 

Controller.cs是控制瓦力运动的,这个文件也要根据你的舵机修改,它会调用Sender去发送指令,这里我们不直接调用SocketSender,因为考虑到我们还有很多方法发送控制指令,比如蓝牙,当我们写了一个新的BluetoothSener后,只需换一个调用就可以了。Controller会在MainForm初始化的时候被创建,但是只有在Sender连接后才会发送指令。

 

logTimer是每秒10次的定时器,定时去Detector把找到运动区域的信息,还有去Sender把发送的指令显示在MainForm。

 

至于ZB的3个MotionDetector的原理,我也只是反编译了然后直接拿来用,没有认真研究,大概的原理,其实也是2个画面的像素比较吧。

 

 

 

使用说明

EZB提供了几个功能,分别是Color Tracking, Motion Tracking和Face Detect,我就全部移植过来了。打开程序,选择摄像头或MJPG流,默认模式是Color Tracking,捕捉的是红色,如果找到红色的块就会在右边的日志显示。然后输入socket的IP和Port,点”Connect”,就会根据捕捉的结果发送指令。特别指出的是,EZB的效率稍低,视频会有一点延迟,Face Detect更加严重,2秒钟才识别一幅图,但我用EZB的程序又没问题,可能是我的分辨率过高(640×480),EZB的分辨率好像只有160×120!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值