智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 71726|回复: 132
打印 上一主题 下一主题

简谈自己对十字的处理

    [复制链接]

7

主题

149

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1404
QQ
威望
656
贡献
612
兑换币
12
注册时间
2011-3-1
在线时间
68 小时
跳转到指定楼层
1#
发表于 2012-7-28 13:40:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lemon~cmc 于 2012-7-28 13:44 编辑

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

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

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

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

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

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

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

2

主题

12

帖子

0

精华

高级会员

Rank: 4

积分
943
威望
453
贡献
188
兑换币
42
注册时间
2012-2-2
在线时间
151 小时
毕业学校
GZHU
推荐
发表于 2012-7-28 17:13:58 | 只看该作者
我用的方法是远方行的最亮的那些点的中心点(数字摄像头)。而遇到斜着入十字的话,我用的是,识别那个直角。(带符号的当前行的横坐标与上下两行的横坐标的差值之和大于某个值。则该行以上采到的边沿数据都舍去)
回复 支持 0 反对 1

使用道具 举报

7

主题

293

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3350
威望
1454
贡献
676
兑换币
140
注册时间
2011-8-12
在线时间
610 小时
推荐
发表于 2012-7-28 20:25:54 | 只看该作者
十字路口,小弟表示毫无压力
回复 支持 0 反对 1

使用道具 举报

6

主题

741

帖子

0

精华

常驻嘉宾

大坏蛋

Rank: 8Rank: 8

积分
3542

优秀会员奖章论坛元老奖章在线王奖章活跃会员奖章

威望
2051
贡献
627
兑换币
193
注册时间
2012-3-11
在线时间
432 小时
推荐
发表于 2012-7-28 20:36:04 | 只看该作者
马克
回复 支持 1 反对 0

使用道具 举报

2

主题

12

帖子

0

精华

高级会员

Rank: 4

积分
943
威望
453
贡献
188
兑换币
42
注册时间
2012-2-2
在线时间
151 小时
毕业学校
GZHU
推荐
发表于 2012-7-28 17:15:29 | 只看该作者
哦,说错了,不是上下两行,而且间隔3行。因为间隔1行的差值并不明显。
回复 支持 1 反对 0

使用道具 举报

3

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
326
威望
176
贡献
110
兑换币
115
注册时间
2013-1-14
在线时间
20 小时
推荐
发表于 2013-5-26 12:06:42 | 只看该作者
回复 支持 1 反对 0

使用道具 举报

42

主题

299

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4405
QQ
威望
2280
贡献
1049
兑换币
767
注册时间
2011-11-29
在线时间
538 小时
2#
发表于 2012-7-28 14:03:49 | 只看该作者
沙发,好好学习
回复 支持 反对

使用道具 举报

31

主题

1084

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5125

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
2630
贡献
1311
兑换币
922
注册时间
2011-5-8
在线时间
592 小时
3#
发表于 2012-7-28 14:20:44 | 只看该作者
如果是边缘提取算法,十字好像不是很严重吧,我的车过十字不是很严重呢
回复 支持 反对

使用道具 举报

1

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2410
威望
1188
贡献
554
兑换币
173
注册时间
2012-1-14
在线时间
335 小时
4#
发表于 2012-7-28 15:10:22 | 只看该作者
标注下
回复 支持 反对

使用道具 举报

4

主题

58

帖子

0

精华

高级会员

Rank: 4

积分
702
威望
355
贡献
211
兑换币
21
注册时间
2012-3-11
在线时间
68 小时
5#
发表于 2012-7-28 15:12:17 | 只看该作者
楼主起跑线怎么识别的呀
回复 支持 反对

使用道具 举报

7

主题

149

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1404
QQ
威望
656
贡献
612
兑换币
12
注册时间
2011-3-1
在线时间
68 小时
6#
 楼主| 发表于 2012-7-28 15:33:30 | 只看该作者
harmony_china 发表于 2012-7-28 15:12
楼主起跑线怎么识别的呀

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 21:49 , Processed in 0.058641 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表