智能车制作

标题: 简谈自己对十字的处理 [打印本页]

作者: lemon~cmc    时间: 2012-7-28 13:40
标题: 简谈自己对十字的处理
本帖最后由 lemon~cmc 于 2012-7-28 13:44 编辑

自己的飞思卡尔也告一段落了,不再太去在意结果了,还是很享受这其中的过程。 一直在论坛潜水,也没有贡献些什么,一直在学习,也是忙于调车,所以很少发帖子。技术这东西就应该在大家一起探讨下,才能取得更快得进步。曾经很长一段时间都纠结在十字上的。也不大清楚大家是否有和我遇到同样的情况。这里发表一点自己的想法。希望对大家有一点启发,仅供参考,切入正题吧。
最让人纠心的情况:斜入十字 (说明)如果是时间充裕的话,可以考虑,通过比赛,才发现,其实曾经的担心是多余的,因为比赛的赛道基本进十字有一段直线,可以让车摆正的。当然如果想做到万无一失,精力又充足的情况下,就可以试着想想。 不废话了,看下情况吧。
[attach]30922[/attach]
(图1)斜入十字看到的情况
不做处理的时候,提取中心

[attach]30923[/attach]
(图2)中心提取
当然这也和大家的中心提取算法有关,我是通过寻找两边的黑线来计算中心。
显然在这里有一段中心是错误的,在没有处理的时候,我的车跑到这里,常当小S在跑了,直接跑左边了,进不了十字。
我想到的处理方式:
跳变+拐点
也就是跑道的边线应该是连续的。不应该出现跳变的情况,即使是一边丢线了,那么丢掉的边线出来的地方也应该是从左右极限的位置出来,而不是直接出现在中间或者其它的地方。出现跳变应该就在十字的地方了,当然寻找跳变大家要小心一点,左右边线要找对。其实在比赛的时候,干扰会更少一些,其实是更有利的。
                              
[attach]30924[/attach]
                                          (图3)左右边线提取
在记录下左右边线的位置时,再通过计算如果边线相邻位置相差大于20我就认定为跳变了,我是采了145列(正常情况下,相邻行边线位置差也就1到3左右)。当然为了抗干扰,当发现跳变时,从跳变位置向上跳几行取边线值,向下跳几行取边线值,相减如果依然满足条件,就认定为跳变了,否则认定为杂点干扰。
                                                                     

[attach]30926[/attach]
(图4)提取边线跳变
如果赛道不存在太大干扰的话,基本是可以找准确的,再寻找拐点。拐点依然是根据边线,边线的变化趋势。比如说某点之前的左边趋势是向左的,而该点之后的趋势是向右的,那么就认定为一拐点(我这里用了比较简单的方式,就是用差相乘的方法,比如说该点是左拐点,该点左线位置减上一行左边线位置得到正值(即趋势向右),该拐点后一行左边线位置减该点左线位置得到负值(趋势向左),相乘得到就是负值)。这里同样做一些抗干扰处理,和跳变的处理差不多。
                                                                     
[attach]30927[/attach]
                                                                                 
                                  (图5)提取边线拐点
在跳变和拐点都找到的情况下,就可以认为是十字了,这个时候就只需要把错误的中心给补出来就可以了,车子就能走对了。
                                                                              
[attach]30928[/attach]
                                                                                          (图6)提取后的中心
我们可以看到处理后的中心基本就是正确的了,这里偷了一点懒,其实可以补的更漂亮一些。但是只是为了看到效果,没有浪费算法时间了,直接将跳变行后的中心,直接补下来,一直补到拐点行。因为实际中,我们采集一幅图像,用到的数据只需要一两行而已,只要中心都是对的了,用一两行就可以了。
斜入十字到这里也就能正确进入了。如果想让车跑的更正一些,大家可以再把中心计算的更准确些。

更重要的:可能对大家更有意义的,以上的情况,其实是我们自己为难自己,比赛中基本是不会遇到这么斜入十字的。通常是有一小段直线。看下面更正常的情况.

[attach]30929[/attach]
这是车子进十字的时候还有一点点不正。其实这处理起来应该就比较容易了。有拐点,并且拐点以上存在两边丢线的情况。如果两边丢线行数达到一定数量,就认定为十字。那么就利用拐点以内的中心值来控制舵机,让车子摆正。
(注)一般情况下,存在两边都丢线只有十字的地方,不过是保证在正确赛道以内,不要在赛道以外了,还去做这样的处理。顺便提一下,我保证有效赛道的方法,是首先用三条纵向扫描线纵向扫来确定有效行,其实也就是动态前瞻的意思了。如下图:

[attach]30930[/attach]
最中间的是图像的中心,也理解成车子的中间值,左右两条线实际是左右轮的位置。因为没有对图像进行梯形校正,所以左右轮扫描线也以失真的方式扫上去,车子如果直跑的话,两轮走过的位置也就是这左右两对红线的位置了。这样可以保证车是一直在赛道内的。

(2)当不存在拐点的情况:

[attach]30931[/attach]
近端左右均丢线,连续丢线行大于某个值,认定为十字,取远端有效的数据。从中心向两边扫描,计算中心,取远端的中心值来控制舵机(具体想取那一行,就看你自己觉得哪 一行更可靠就取哪一行吧)。
其实只要在进十字之前将车子摆正了,那么基正十字就不会有太大问题了。这是本人的一些粗略的想法。仅供大家参考吧。希望大家都好好努力,取得更好的成绩。也快走入社会了,想起曾经日日夜夜奋斗的情景,还是会有莫大的感触的。


作者: tujunjie    时间: 2012-7-28 14:03
沙发,好好学习
作者: 1228463834    时间: 2012-7-28 14:20
如果是边缘提取算法,十字好像不是很严重吧,我的车过十字不是很严重呢
作者: 广陵F3    时间: 2012-7-28 15:10
标注下

作者: harmony_china    时间: 2012-7-28 15:12
楼主起跑线怎么识别的呀

作者: lemon~cmc    时间: 2012-7-28 15:33
harmony_china 发表于 2012-7-28 15:12
楼主起跑线怎么识别的呀

用的红外对管,可惜调试的时候撞掉了,所以起跑线检测悲剧了。

作者: 睿之星    时间: 2012-7-28 17:13
我用的方法是远方行的最亮的那些点的中心点(数字摄像头)。而遇到斜着入十字的话,我用的是,识别那个直角。(带符号的当前行的横坐标与上下两行的横坐标的差值之和大于某个值。则该行以上采到的边沿数据都舍去)
作者: 睿之星    时间: 2012-7-28 17:15
哦,说错了,不是上下两行,而且间隔3行。因为间隔1行的差值并不明显。
作者: 月下听蝉    时间: 2012-7-28 20:25
十字路口,小弟表示毫无压力
作者: 一毛钱~~~~~~    时间: 2012-7-28 20:36
马克
作者: 840149319    时间: 2012-7-28 22:12

作者: 筱明    时间: 2012-7-28 22:33
楼主说的不错的,我是做图像分析的:我提供一种算法思路的,十字的两条线拐点前后实际上是垂直的,但是由于图像失真的缘故,可能采集的到的线不是那么垂直的,至少也是左右变化趋势有的,检测到拐点两边的斜率大于某一个数值的时候就认为是十字 这样能解决部分问题,重要的是采集的图像的视野大小问题,我们摄像头十字时候图片可以完全看到整个十字圆弧的 有时候不好处理的  关于那个起跑线检测  起跑线只是在直道路上,检测到直线的时候才开启起跑线检测 能避免检测错误
作者: Goolloo    时间: 2012-7-28 22:41
觉得可以做边缘的斜率提取和中心线的斜率做比较,理论上应该是一样的
作者: bluered    时间: 2012-7-28 22:54
学习ing~
作者: 陌路樱花泪    时间: 2012-7-28 23:06
楼主强大,确实遇到过这种情况……受教……
作者: Smile_Sun    时间: 2012-7-29 17:42

作者: 丁香花    时间: 2012-7-29 20:29
值得收藏!谢谢分享!

作者: lemon~cmc    时间: 2012-7-30 10:11
筱明 发表于 2012-7-28 22:33
楼主说的不错的,我是做图像分析的:我提供一种算法思路的,十字的两条线拐点前后实际上是垂直的,但是由于 ...

你的起跑线这种方式防误检应该是有一点效果的。前提是车入直线也必须快速摆正。要跑出好成绩也必须做到这一点。

作者: 流星所欲    时间: 2012-8-1 08:42

作者: 蜈蚁蝗    时间: 2012-12-7 22:25

作者: qq363546178    时间: 2012-12-8 23:49
学习了
作者: qual9109    时间: 2012-12-10 00:22
学习了
作者: sangxiaoran    时间: 2012-12-12 15:18

作者: 我不是灰机    时间: 2012-12-27 21:57
顶啊顶- -
作者: liuyuliuyu1216    时间: 2012-12-28 11:20
学习了
作者: suebillt    时间: 2012-12-28 21:35

作者: 心静0189    时间: 2013-1-17 10:06
感谢楼主。
作者: ljzzhinengche    时间: 2013-1-20 23:06
顶、、、、、
作者: lingfengfeiyang    时间: 2013-2-2 10:40
情况很是相似啊,感谢楼主!
作者: 奋斗小青年、    时间: 2013-2-2 18:15

作者: 程伟NO.1    时间: 2013-2-2 20:25
好!
作者: 201000171238    时间: 2013-2-4 18:35

作者: 玻璃中的太阳    时间: 2013-2-5 19:10
顶!
作者: 早安,徐威    时间: 2013-3-14 21:56
楼主我想问下检测到十字后怎么控制小车直冲过去,给舵机一个摆正,他会就那一瞬间摆正么?

作者: Dwe    时间: 2013-3-17 09:43
支持下

作者: jiangxu456    时间: 2013-3-19 03:08
嗯,很不过,但是实现起来还是会有问题。。。。
作者: huanyefeng0809    时间: 2013-3-21 10:25
顶了
作者: 夏夜之星    时间: 2013-3-23 21:10

作者: 飞尘    时间: 2013-3-26 18:03
好东西
作者: ttyy2010    时间: 2013-3-27 22:00
顶起
作者: 378110705    时间: 2013-3-28 12:50
还没有写十字呢,来学习学习
作者: 凌乱杂草    时间: 2013-4-11 11:01
不错,留个标记
作者: fsrchxm    时间: 2013-4-12 16:15

作者: cherry1993    时间: 2013-4-12 18:08

作者: 1364387143    时间: 2013-4-15 23:52

作者: fsrchxm    时间: 2013-4-27 17:01
mark


作者: 珊瑚海1990    时间: 2013-4-27 21:51
mark
作者: 龙月    时间: 2013-5-7 13:28
楼主赞一个
作者: 丶Capricorn    时间: 2013-5-12 18:26
留个脚印
作者: 易湘鑫    时间: 2013-5-13 18:59
必须顶
作者: 905185041    时间: 2013-5-20 22:22
1228463834 发表于 2012-7-28 14:20
如果是边缘提取算法,十字好像不是很严重吧,我的车过十字不是很严重呢

什么是边缘提取算法?

作者: fsrchxm    时间: 2013-5-26 12:06
{:soso_e179:}
作者: 客流量    时间: 2013-5-31 16:39
楼主在出十字弯的时候有什么好方法,我是进十字弯很好,就是在出十字弯的时候经常出去。

作者: 卢小胜    时间: 2013-6-1 17:57
学习了,正好遇到这个问题
作者: zy52588    时间: 2013-6-3 12:42
楼主考虑的十分全面啊
作者: 要努力    时间: 2013-6-3 14:00
jiangxu456 发表于 2013-3-19 03:08
嗯,很不过,但是实现起来还是会有问题。。。。

你头像的那个东西叫什么,我上次好像在哪里见过,一直不知道叫什么

作者: 3009    时间: 2013-6-21 10:00
好贴!赞
作者: 笨笨熊    时间: 2013-6-30 09:27
月下听蝉 发表于 2012-7-28 20:25
十字路口,小弟表示毫无压力

求解决方案,我们的车出十字弯的时候总是向左拐,不知道怎么回事

作者: 緊緊相_擁′    时间: 2013-7-1 16:05
前两天正头疼这个斜如十字  跑得慢可以直接过 跑得快就不行   不过省赛真没有斜如十字的情况
作者: Renie_Q    时间: 2013-7-6 15:52
学习了
作者: Mr._Ray    时间: 2013-7-10 19:37
马克
作者: 孟鹏涛    时间: 2013-7-10 23:17
还不错,楼主很认真
作者: 1225781561    时间: 2013-7-14 16:15

作者: 小橙子    时间: 2013-7-14 20:07
{:soso_e179:}
作者: jiangxu456    时间: 2013-12-23 17:09
要努力 发表于 2013-6-3 14:00
你头像的那个东西叫什么,我上次好像在哪里见过,一直不知道叫什么

世界最大辉光管时钟 苏联IN-18

日本动画片,命运石之门里用来表征世界线之间距离的参数的~


作者: 飞奔的小脏羊    时间: 2013-12-24 13:27
厉害MARK
作者: 月夜$听海    时间: 2013-12-26 16:59

作者: litingfeng    时间: 2014-3-6 12:01
楼主强大!!小弟想知道你整个识别算法遍历了几次图像,我想遍历一次节省时间,但是感觉那样程序有点乱,不好处理各种情况
作者: 纸船    时间: 2014-4-8 23:13
lemon~cmc 发表于 2012-7-28 15:33
用的红外对管,可惜调试的时候撞掉了,所以起跑线检测悲剧了。

用几个光电对管?你们准备光电对管只用来检查起跑线吗?

作者: lemon~cmc    时间: 2014-4-10 11:12
纸船 发表于 2014-4-8 23:13
用几个光电对管?你们准备光电对管只用来检查起跑线吗?

好久没回来了,对的,当初我的红外对管只用来检测起跑线。其始在调试阶段也有防撞的功能。也就是只要车跑出跑道就会停下来,不会乱跑。
作者: lemon~cmc    时间: 2014-4-10 11:15
litingfeng 发表于 2014-3-6 12:01
楼主强大!!小弟想知道你整个识别算法遍历了几次图像,我想遍历一次节省时间,但是感觉那样程序有点乱,不 ...

那就好好调整你的程序吧,只需要遍历一次。像数据处理,是边采集边处理。(像二值化,去燥等)这个,看你的处理速度,需要你自己小心的定。不要影响到图像采集就OK。

作者: 纸船    时间: 2014-4-10 12:04
lemon~cmc 发表于 2014-4-10 11:12
好久没回来了,对的,当初我的红外对管只用来检测起跑线。其始在调试阶段也有防撞的功能。也就是只要车跑 ...

那你们用几个光电对管?

作者: joywu    时间: 2014-4-29 10:37
mark,学习下
作者: 直立摄像头    时间: 2014-4-29 11:21
睿之星 发表于 2012-7-28 17:15
哦,说错了,不是上下两行,而且间隔3行。因为间隔1行的差值并不明显。

用了你这方法,感觉还不错,谢了

作者: 直立摄像头    时间: 2014-4-29 11:22
睿之星 发表于 2012-7-28 17:13
我用的方法是远方行的最亮的那些点的中心点(数字摄像头)。而遇到斜着入十字的话,我用的是,识别那个直角 ...

但好像大S也会满足这个条件

作者: jianpeng    时间: 2014-5-27 02:20
:lol:lol:lol顶顶顶 顶!!!
作者: 暮苍幽怨_埋不住    时间: 2014-7-12 08:18
好帖子  顶
作者: 云之飞踢    时间: 2014-7-13 18:56
学习了,mark
作者: wgw5820974944    时间: 2014-8-6 22:38

作者: 新手一只    时间: 2014-11-2 21:05
赞一个
作者: 时光轴    时间: 2014-11-2 22:12


作者: lihuanhuan    时间: 2014-11-3 00:17


作者: 0818    时间: 2015-1-24 17:20
学到了
作者: bzd_111    时间: 2015-1-30 09:33
:):)
作者: 面包(り很忙    时间: 2015-3-6 01:08
mark,顶
作者: 小小梦想    时间: 2015-3-11 14:27
学习中。。。
作者: Tom是条狗    时间: 2015-3-11 16:56
码嘛嘛

作者: ahaha    时间: 2015-3-16 20:26
月下听蝉 发表于 2012-7-28 20:25
十字路口,小弟表示毫无压力{:soso_e113:}

求教如何十字补线
作者: 沙漏、、、    时间: 2015-3-20 20:42
赞                              
作者: 曾天    时间: 2015-4-20 15:05
:):):):):):):):):):):)
作者: xsbdkxj    时间: 2015-4-21 21:15
貌似可行。我试试

作者: 1234567多劳多得    时间: 2015-6-17 00:44
不知道楼主还有上不?就是想问下 如果判断拐点是处理完每一行的数据都进行拐点判断吗?还是当丢线时,再已经处理的扫描行判断拐点?(比如我第40行丢线,是从40行往已经扫描的那些判断是否存在拐点吗?)
作者: Insane    时间: 2015-6-17 06:47
这样做对其它赛道部分有干扰啊。。。
作者: 善护念    时间: 2015-6-27 20:40
用三条纵向扫的线,怎么实现动态前瞻?

作者: 一个人的浮屠    时间: 2015-10-2 14:46
mark

作者: g847279681    时间: 2015-10-19 20:59
这个图片是怎么做出来的?matlab?
作者: strong161    时间: 2015-10-22 17:23
学习了!谢谢楼主分享
作者: 五叶枫林    时间: 2015-12-10 09:14
感谢各位的积极讨论🌹,新手刚进,受教了😊
作者: 9802344    时间: 2015-12-11 16:33
这种斜十字怎么破
作者: 林旺练    时间: 2016-1-2 10:00
不明觉厉         




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2