本帖最后由 小豹 于 2012-3-1 17:47 编辑
专业智能车上位机调试软件
一、如果有这样的一个功能,它可以让你看到你所采集的图像长什么样,并且还可以看到经过你各种滤波算法处理过后图像的模样,然后你就可以通过它轻易看出你的算法是否合理,或者分析怎么样进一步优化你的算法了。你难道不兴奋,不垂涎吗?对,要实现这个功能就要通过上位机了。也许你可能会说那不简单嘛,网上串口调试软件一大堆,随便拿一个来接收数据观察保存数据,然后在处理不就完了嘛。其实这种想法是可以的,也是50%以上的朋友调车时所采用的方法,但是这种调试方式实现起来真是的履步维艰啊,可能你已经体会到调试过程中的艰辛了。一大堆的数据,这么混乱不清,虽然看到这些数据自己已经激动得不得了,但是真的要从这些数据中挖掘对我们调试有利的信息其实是比较很繁琐的,多半都是在做一些无用功尔,况且你下载的串口调试软件中如果做得不是很好的话,发送速度一加块,数据的实时显示功能就不行了,有甚卡死直接未响应了。 二、到这里可能就会有些高手笑着说:“串口?速度这么慢,问题这么多,这么低端,我们不用它,我们用SD卡,SD卡高端!”。嗯,没错,做上位机分析数据的另一种方式就是把采集到的图像数据信息存储到SD卡当中,每过一段时间取出SD卡然后放到电脑中用软件读取出图像数据来再进行分析处理等。这种方式很大程度上保证所采集数据的完整性。但有一个问题就是,你是不是得让跑一段距离后,再拿出SD卡,然后再处理,当你看到采集回来的图像这么完整漂亮,说不出的喜悦之情在所难免的,但是车子方向和摄像头角度的精确位置你真的很难凭图像逆推出来了,而且,玩一小段路程下来,你真的是费了不少的劲了,弄不好有的朋友真的可能已经把好好的车子给调试坏了,真是折腾不起啊,伤不起啊。虽然说折腾无极限,折腾本身就是一种精神,没有折腾地去实践,车子不会跑起来的,也不可能会跑得比原来快一点点的,所以许许多多的智能车爱好者就奋不顾身地把有限的时间投入到了无限调试当中了,就是为了爱车能跑再快一点、再快一点,就这样费劲心思、废寝忘食、没日没夜地进行调试,不断的修改算法、修改参数,总感到不太完美,又无法取得突破,真是到了瓶颈阶段了,到了最后就看运气了,看老天爷了,但是结局怎样其实已经明显了,但这不能怪你思维不好,算法不优秀,只能怪调试方式有问题,调试工具不够精良。 三、所以,影响车子的最终速度在于调试阶段。这款专用调试软件就是在这种复杂的需求下应运而生了,它给专注于调试硬件电路、调试图像处理算法、控制算法的朋友们提供一个操作方便,功能强大的上位机调试环境。通过它,你只要简单把采集到的图像数据发到串口,每张图像数据开始发送时先发送个标志位如0x01,告诉上位机一幅图像开始了。然后设置上位机的图像的宽度和高度跟下位机采集的一样就行了,通过上位机就可以实时的显示图像信息了。然后你只要简单的把图像处理的那部分算法源码加到我们提供的一个VC6.0的模板工程里头的一个函数里面,编译会生成一个后缀名为dll的文件,你在软件中加载这个dll算法库,就生成一个算法插件了。以后通过点击这个插件按钮就可以看到处理后的效果啦,边上下浏览变处理,岂不快哉!
下面介绍这个调试软件拥有的功能和使用方法。
1、实时性好,能够非常流畅地显示摄像头采集的实时图像。 2、串口数据丢失少,几乎不存在数据丢失的情况。即便波特率设定为25000连续不断的发送,也是没有任何问题的, 因为经过 测试,每秒发100kb的数据,软件接收和显示均良好。(说明:在高速接收串口数据时请不要来回拖动点击软件 窗口,因为测试发现频繁地放大缩小或者频繁点击软件窗口会导致接收数据的不完整) 3、强大的历史图像浏览功能,可以通过点击上位机的上一张、下一张按钮浏览全部的历史图像以及图像数据信息。软件内 部默认开辟50张的图像内存大小,当软件接收到超过50张时,则以50张图片的内存大小递增,软件能够临时存储的图片 数由计算机内存决定。由于下位机采集的图像一般像素比较低,所以临时保存几十万张图像是没有任何问题的。 4、图像灰度值数据列表,对任何图像都可以选择查看,它就是下位机上传上来的实际数据了。 5、可以选择保存当前正在浏览的图像,也可以一下子保存全部接收到的图像。看哪张PP顺眼就保存哪张这个功能就 比较人性化了。 6、友好的界面设计,可以任意调节软件窗口大小,图像显示区域会自动适应窗口的大小,图像与数据显示区域内部也可 以通过拖动十字线进行拉伸或者缩小,使用时非常方便。 7、实用、丰富的界面信息显示,动态显示串口接收到的图像数、当前图像已接收的字节数、总接收字节数、总丢失字节数 (这里需要解释一下总丢失字节数,我们发送数据时为了标志一帧图像的开始,我们需要发一个专用字节来进行标志, 当上位机接收到两个标志位并且两个标志位之间的数目正好是一幅图像的数据就表明一帧图像接收完成,假如收到 两个标志位之间的字节数小于一帧图像的字节数,就说明数据丢失了。所以我们的标志位应该设置一些极端值,也就是 一些摄像头几乎永远不可能采集到的灰度值,比如0或者255等一些特殊值)。通过这些参数信息可以轻易看出下位机 采集数据以及往串口发送数据时的工作情况。 8、图像灰度值抓取功能,当启动灰度图抓取功能后用鼠标指向图片中任何部位,即可显示当前点的灰度值。对图像每个 具体细节的灰度值观察变得简单快捷。 9、图像直方图显示功能,通过它你可以轻易看到每个灰度值在一幅图像中出现的频率了。 10、极富魅力、震撼力的算法插件功能,该功能真的让你从此告别盲调了。并且算法插件由你自己编写,会提供一个vc6.0 的工程模板,在里面给出一个提供有图像数据信息的函数下写算法代码就可以了,实现非常简单,把下位机的算法 代码拷贝到里头基本不用修改什么就可以编译通过,而且想添加多少个算法插件都无所谓,想怎么添加就怎么添加。 这样你就拥有了无限的算法库了,并且可以直观看到每种算法的实际效果了。
开发环境:Windows7 32位 + VC6.0 。 关键技术:1、本软件使用MFC类库做界面开发。 2、串口通信技术,本软件使用微软提供的MSCOMM32.OCX控件进行串口操作。 3、多线程技术,本软件使用三条线程进行处理,一条线程负责接收数据,一条负责数据处理操作 最后一条线程进行界面更新操作。使得在高速接收串口数据的情况下,软件运行顺畅。 4、缓冲区机制,本软件使用三级缓冲区的机制,每个缓冲区采用双向循环链表实现。 减少数据丢失的情况,而且非常灵活实现对这些数据进行操作处理。 5、DLL动态链接库技术,实现算法库的动态添加,动态算法库使用C语言编写, 编译生成DLL文件,加载到软件形成算法插件,直接点击插件按钮使用,就可以看到处理后的效果, 真正意义上实现了模拟单片机程序的执行情况。 6、VC对位图的基本操作技术。 好了,每种技术背后所实现的具体细节就不多说了,因为涉及技术面广,况且每种技术都是比较繁杂的, 也就不可能仅靠一 两篇文章就能说得清的。截图上来吧,要不然又要说什么无图无真相了,下面是软件截图:
由于软件尚未进行封包处理,还一直在不断测试,不断添加新功能中。 所以现在软件还不能进行发布,但会考虑近期内发布,望谅解!
2012/3/1 小豹 世界上没有永远的陌生人, 只有还未认识的朋友!
补充内容 (2012-3-1 18:13):
http://wenku.baidu.com/view/3a7054130b4e767f5acfce46.html
见文库说明。
补充内容 (2012-3-15 18:23):
体验版已发布,请转向:
http://www.znczz.com/thread-89062-1-1.html
http://item.taobao.com/item.htm?id=16067720881 |