亿加合和智能车制作

标题: 乐师摄像头控制算法分享。 [打印本页]

作者: zzy2099    时间: 2012-5-28 12:55
标题: 乐师摄像头控制算法分享。
本帖最后由 zzy2099 于 2012-5-28 13:05 编辑

虽然在四川省赛中未能顺利完成决赛比赛,但验证了我们的策略让摄像头跑上3M基本应该没问题。
#include "smartcar.h"
void main()
{
       软硬件系统初始化();
       for(;;)
       {
                if(图像采样完成)
               {
                    边沿检测法提取左右黑线();
                    数据滤波消除十字错误数据();
                    十字和反光断线补线();//反光补线非常不稳定
                    根据面积和斜率计算方向和速度控制量();
                    方向控制();
               }
                速度控制();
       }
}
/*
说明:
图像采集采用等距采样,从30~310行跳行采。
前瞻150CM,速度控制周期2毫秒,方向控制周期20毫秒。

请高手不吝赐教,若方便,指出结构问题。
同时也愿车友共同进步,愿智能车技术蒸蒸日上!

*/


作者: 0726silence    时间: 2012-5-28 13:06
顶了,尽管我是摄像头的哈
作者: znfc2    时间: 2012-5-28 13:08
面积和斜率计算方向和速度控制量,这到底是如何计算的呢?
作者: 是人何装神    时间: 2012-5-28 13:23
呵呵,太感谢了
作者: 是人何装神    时间: 2012-5-28 13:26
请问你们怎么确定黑线基准的呢?   我是用的连续搜索到七行,并且这七行的偏差不大
作者: Yoho    时间: 2012-5-28 13:48
看了楼主的名字我觉得很有缘- -我的名字缩写也是ZZY 想请问下面积法是否和我们差不多 计算跑道外面左右两边的面积差来调整舵机 还有斜率控制速度 我们也想过 但是用了广角镜后 在转弯的时候用从中间到右或者从中间到左的方式找线的话会有一条找到很短..我们用那条线的长度来决定速度 试验过后 直线3.5米以上时入一个90度曲率半径为57CM的弯可以过 只有小量漂移 提前减速距离估计在入弯前70CM左右  想请教一下楼主 你们的面积计算是整幅一起计算还是截取图像的一部分计算
作者: agogos    时间: 2012-5-28 13:58
我是觉得这个刷新率慢了,整场采集完算延迟会有点大。。建议采集中间插入处理。。。
作者: xinmengwangran    时间: 2012-5-28 14:07
谢谢分享!
作者: QianDE1991    时间: 2012-5-28 14:35
2MS的速度控制??
作者: zzy2099    时间: 2012-5-28 14:36
agogos 发表于 2012-5-28 13:58
我是觉得这个刷新率慢了,整场采集完算延迟会有点大。。建议采集中间插入处理。。。

20毫秒,按照4M速度算,车子前进了8厘米。。。
我们认为,相对于150厘米的前瞻,这似乎微不足道,,所以没有实时处理。。

作者: agogos    时间: 2012-5-28 15:21
zzy2099 发表于 2012-5-28 14:36
20毫秒,按照4M速度算,车子前进了8厘米。。。
我们认为,相对于150厘米的前瞻,这似乎微不足道,,所以 ...

你们的一行像素点是多少呢?能保证150cm外的绝对可靠????我的1m外就有点漏点了。。。特别是小S
作者: 小心愿    时间: 2012-5-28 15:49
没有光电的?呜呜....
作者: zzy2099    时间: 2012-5-28 16:18
agogos 发表于 2012-5-28 15:21
你们的一行像素点是多少呢?能保证150cm外的绝对可靠????我的1m外就有点漏点了。。。特别是小S


40行160列!
作者: 星斗520    时间: 2012-5-28 17:03
速度控制周期2ms ? 怎么确定是2ms 如果用PIT中断 不怕影响图像采集吗?  楼主是每一场都进行数据处理?难道是双数组? 嘿嘿疑问有点多啊 望楼主赐教啊
作者: zzy2099    时间: 2012-5-28 17:03
znfc2 发表于 2012-5-28 13:08
面积和斜率计算方向和速度控制量,这到底是如何计算的呢?

我们学校的4个摄像头组,各自用不同的方法。。。
所以,自己斟酌为妙!

作者: zzy2099    时间: 2012-5-28 17:06
星斗520 发表于 2012-5-28 17:03
速度控制周期2ms ? 怎么确定是2ms 如果用PIT中断 不怕影响图像采集吗?  楼主是每一场都进行数据处理 ...

中断有优先级的。

况且,行中断也就60多US,就2MS而言,误差不大。

作者: zzy2099    时间: 2012-5-28 17:07
是人何装神 发表于 2012-5-28 13:26
请问你们怎么确定黑线基准的呢?   我是用的连续搜索到七行,并且这七行的偏差不大

黑线基准根据上一幅有效图像确定
作者: 星斗520    时间: 2012-5-28 17:16
zzy2099 发表于 2012-5-28 17:06
中断有优先级的。

况且,行中断也就60多US,就2MS而言,误差不大。

多谢指教 还有一点疑问 每场数据都做处理吗? 不是一场采集 一场处理?
不担心 数据还没处理结束 新数据就来了?

作者: 是人何装神    时间: 2012-5-28 17:24
你们有用贪婪算法的车子吗?
作者: zzy2099    时间: 2012-5-28 17:24
星斗520 发表于 2012-5-28 17:16
多谢指教 还有一点疑问 每场数据都做处理吗? 不是一场采集 一场处理?
不担心 数据还没处理结束 新数据 ...

程序写简单点,就没问题,呵呵!
毕竟20MS里面,真正采图像的也不过20%的时间!

作者: znfc2    时间: 2012-5-28 18:15
zzy2099 发表于 2012-5-28 17:03
我们学校的4个摄像头组,各自用不同的方法。。。
所以,自己斟酌为妙!

那么能不能说下你们前轮是怎样调整的? 主销内倾,主销后倾,外八字???
作者: vgjkl    时间: 2012-5-28 19:04
谢谢分享!
作者: 在彼岸等待    时间: 2012-5-28 19:48
楼主速度控制那块该怎么搞呢
作者: zzy2099    时间: 2012-5-28 22:14
znfc2 发表于 2012-5-28 18:15
那么能不能说下你们前轮是怎样调整的? 主销内倾,主销后倾,外八字???

机械这个东西,感觉真玄
不是那辆车,或许无论你怎么调,都出不了状态的。。
所以,我也迷茫!

作者: kevin2009    时间: 2012-5-28 22:34
zzy2099 发表于 2012-5-28 14:36
20毫秒,按照4M速度算,车子前进了8厘米。。。
我们认为,相对于150厘米的前瞻,这似乎微不足道,,所以 ...

请问你们使用什么摄像头啊,前瞻150cm还能提取出稳定的黑线
作者: 是人何装神    时间: 2012-5-28 22:52
可以给一个转向控制算法的思路吗?你所说的计算面积,是用的某个固定的矩形和黑线围成的面积,还是根据赛道情况,动态的取矩形呢?
作者: gang82921390    时间: 2012-5-28 23:02
求断线处理程序啊
作者: 风云变幻    时间: 2012-5-29 17:56
请问楼主,如何确定面积和斜率算法的切换,或者说如何确定才不采用斜率控制舵机转角,即入弯时机如何把握?
作者: 竹子    时间: 2012-5-29 21:46
看楼主的试车视频,直道进弯道时候你们是用了什么减速策略,能使车子把那么快的速度减下来,想不通。。。反转?只用PID?。。。。。。:Q
作者: cqu_cj    时间: 2012-5-30 00:22
请教大神?怎么实现速度控制周期2ms的啊?我看你的程序结构好像是跟图像采集周期一样的啊?如果用定时中断,会不会影响到图像采集?我们现在图像采集与速度控制周期都是40ms,感觉速度不是很稳定且滞后太严重了,打算将速度控制周期缩短。想了两个方案:一个是定时中断,但中断优先级比行场中断低;二是将PID函数均匀的放到采集行的间隔执行。不知道此2方案行不行?我们现在止步于2.4m/s,就是因为速度控制不好,望楼主赐教!
作者: zzy2099    时间: 2012-5-30 08:03
cqu_cj 发表于 2012-5-30 00:22
请教大神?怎么实现速度控制周期2ms的啊?我看你的程序结构好像是跟图像采集周期一样的啊?如果用定时中断, ...

程序结构如1楼,毫无保留!
开了2MS定时中断测速,优先级低于行中断(误差几十微秒而已)。

作者: zzy2099    时间: 2012-5-30 08:03
竹子 发表于 2012-5-29 21:46
看楼主的试车视频,直道进弯道时候你们是用了什么减速策略,能使车子把那么快的速度减下来,想不通。。。反 ...

减速就一个方法:
全桥驱动模式下抱死!

作者: zzy2099    时间: 2012-5-30 08:05
风云变幻 发表于 2012-5-29 17:56
请问楼主,如何确定面积和斜率算法的切换,或者说如何确定才不采用斜率控制舵机转角,即入弯时机如何把握?

不用切换吧,切换必然引起抖动。
二者始终按照一定比值即可。

作者: zzy2099    时间: 2012-5-30 08:06
gang82921390 发表于 2012-5-28 23:02
求断线处理程序啊

断线处理,我们也没做好,基本原理如下:
数据:1 2 4 6 。。。。
补线:1 2 4 6 8 10 12.。。。。。

作者: zzy2099    时间: 2012-5-30 08:08
是人何装神 发表于 2012-5-28 22:52
可以给一个转向控制算法的思路吗?你所说的计算面积,是用的某个固定的矩形和黑线围成的面积,还是根据赛道 ...

我们采用的动态矩形。
其实梯形估计更好,因为图像本身有畸变。

作者: zzy2099    时间: 2012-5-30 08:09
kevin2009 发表于 2012-5-28 22:34
请问你们使用什么摄像头啊,前瞻150cm还能提取出稳定的黑线

普通CCD黑白摄像头。
作者: 414201261    时间: 2012-5-30 10:39
楼主 能不能传点摄像头图像采集的资料啊
作者: kevin2009    时间: 2012-5-30 11:30
zzy2099 发表于 2012-5-30 08:09
普通CCD黑白摄像头。

后悔了,我们用CMOS的,前瞻设60cm还有不稳定的点

作者: gang82921390    时间: 2012-5-30 17:51
zzy2099 发表于 2012-5-30 08:06
断线处理,我们也没做好,基本原理如下:
数据:1 2 4 6 。。。。
补线:1 2 4 6 8 10 12.。。。。。

关键要判断出断线,这个不好做啊,你们怎么判断
作者: ~never.mind    时间: 2012-5-30 19:06
消除在先..
作者: rainmong    时间: 2012-5-30 19:17
你们图像采完后关图像采集中断吗
作者: chenkangmei    时间: 2012-5-30 20:12
谢谢
作者: zzy2099    时间: 2012-5-31 08:17
rainmong 发表于 2012-5-30 19:17
你们图像采完后关图像采集中断吗

行中断要关,场中断就一直开着吧。
作者: zzy2099    时间: 2012-5-31 08:18
gang82921390 发表于 2012-5-30 17:51
关键要判断出断线,这个不好做啊,你们怎么判断

我们做的也不稳定,不敢抛砖。。。
作者: gang82921390    时间: 2012-5-31 09:22
zzy2099 发表于 2012-5-31 08:18
我们做的也不稳定,不敢抛砖。。。

呵呵,理解
作者: 潞箬    时间: 2012-5-31 09:33
本帖最后由 潞箬 于 2012-5-31 09:34 编辑

楼主,我的算法流程基本上和你一样,但是不知道为什么进不了行场中断,所以主函数里的  if(图像采集完成)不行,进而肯定也进不了下面的图像处理了,能指点指点吗?谢谢
作者: fly扬    时间: 2012-5-31 15:48
LZ真给力
作者: 易枫    时间: 2012-5-31 17:01
楼主摄像头架的好高啊
作者: ou421293238    时间: 2012-6-1 16:57
znfc2 发表于 2012-5-28 13:08
面积和斜率计算方向和速度控制量,这到底是如何计算的呢?

同问。。。

作者: hisrg    时间: 2012-6-2 12:17
1、什么是十字错误啊?
作者: 天才大空翼    时间: 2012-6-2 14:59
楼主用的稀疏矩阵处理数据的吗?速度会加快很多。
作者: 我的未来不是梦    时间: 2012-6-2 15:07
很棒!
作者: 我的未来不是梦    时间: 2012-6-2 15:07
但是就是不知道你的 十字和反光断线补线();//反光补线非常不稳定
是什么意思!
作者: For高冉    时间: 2012-6-2 16:08
好东西啊
作者: moonlight831    时间: 2012-6-2 21:39
老师能问下白痴的问题么?K60怎么改变中断优先级,默认的是行中断就优先于PIT么?
作者: Yoho    时间: 2012-6-3 00:31
请问下你的编码器是多少线的,测速精度怎么解决的 我们的PID测速周期4ms 500线 但是测出来的脉冲即使是3米也只有120个 这个精度有点蛋疼啊 有点干扰都不怎么准
作者: dongyunlong    时间: 2012-6-3 09:25
我们的单双线找不到合适的切换标志,请问你们是根据什么判断的呢?
作者: zhuzhuyanrong    时间: 2012-6-3 10:21
面积法控制舵机 的话 还需要根据速度改变使用的行吗?

作者: zzy2099    时间: 2012-6-3 18:05
天才大空翼 发表于 2012-6-2 14:59
楼主用的稀疏矩阵处理数据的吗?速度会加快很多。

我们根本没有二值化,何谈稀疏矩阵?
作者: zzy2099    时间: 2012-6-3 18:05
zhuzhuyanrong 发表于 2012-6-3 10:21
面积法控制舵机 的话 还需要根据速度改变使用的行吗?

理论分析是这么回事
作者: zzy2099    时间: 2012-6-3 18:06
dongyunlong 发表于 2012-6-3 09:25
我们的单双线找不到合适的切换标志,请问你们是根据什么判断的呢?

切换控制变量,依我个人理解,此乃大忌!

作者: zzy2099    时间: 2012-6-3 18:07
moonlight831 发表于 2012-6-2 21:39
老师能问下白痴的问题么?K60怎么改变中断优先级,默认的是行中断就优先于PIT么?

datasheet,中找答辩吧,我也不喜欢一大堆寄存器
作者: zzy2099    时间: 2012-6-3 18:08
Yoho 发表于 2012-6-3 00:31
请问下你的编码器是多少线的,测速精度怎么解决的 我们的PID测速周期4ms 500线 但是测出来的脉冲即使是3米也 ...

200线,感觉足够了。、
500线基本没多大意义

作者: zzy2099    时间: 2012-6-3 18:09
hisrg 发表于 2012-6-2 12:17
1、什么是十字错误啊?

十字路口搜线是很容易跑飞的,,
作者: dongyunlong    时间: 2012-6-3 19:26
zzy2099 发表于 2012-6-3 18:06
切换控制变量,依我个人理解,此乃大忌!

可是在入弯的时候不寻单线的话,不就没法拐弯了吗?


作者: hisrg    时间: 2012-6-3 21:55
我觉得要处理好这些问题,得好好准备才行!另外,根据您的经验,16位单片机运行性能如何?是否存在运算上的瓶颈?
作者: zzy2099    时间: 2012-6-3 22:12
hisrg 发表于 2012-6-3 21:55
我觉得要处理好这些问题,得好好准备才行!另外,根据您的经验,16位单片机运行性能如何?是否存在运算上的 ...

16位单片机运算速度尚可,系统瓶颈在于摄像头采样周期太长
作者: 赵仁煊    时间: 2012-6-4 10:14
你们斜率计算的是中心线的斜率吗?收到请回复,谢谢!!!
作者: zzy2099    时间: 2012-6-4 13:10
赵仁煊 发表于 2012-6-4 10:14
你们斜率计算的是中心线的斜率吗?收到请回复,谢谢!!!

左右分别算的,,

作者: lujiongjian    时间: 2012-6-4 13:24
楼主不用二值化,那楼主能说下边沿检测提取黑线的具体方法不?
作者: 赵仁煊    时间: 2012-6-4 14:19
zzy2099 发表于 2012-6-4 13:10
左右分别算的,,

??那么遇弯道时只算一条了,还有你说的左右分别算,能说细些吗?谢谢老师的回答!!!

作者: zzy2099    时间: 2012-6-4 19:01
赵仁煊 发表于 2012-6-4 14:19
??那么遇弯道时只算一条了,还有你说的左右分别算,能说细些吗?谢谢老师的回答!!!

如果只有1条黑线,舵机基本打死了,还算什么啊?
作者: zzy2099    时间: 2012-6-4 19:04
lujiongjian 发表于 2012-6-4 13:24
楼主不用二值化,那楼主能说下边沿检测提取黑线的具体方法不?


a[100]={81 80 83 100 200 200 200.......}
边界是a[3]=100.
边界怎么检测还要具体方法?
我有点无语了.
一条if语句搞定的问题!

作者: 赵仁煊    时间: 2012-6-4 20:56
zzy2099 发表于 2012-6-4 19:01
如果只有1条黑线,舵机基本打死了,还算什么啊?

你们摄像头的视野在转弯时可以看到两边的黑线吗?不太可能吧?你们的图像有没有做失真还原?没做会影响舵机控制吧!谢谢!
作者: wukaijie    时间: 2012-6-4 21:12
隔行采样,是简单对行中断分频吗?还是远处和近处隔的行数不一样?
作者: 51coming    时间: 2012-6-5 00:15
有疑问,速度控制周期2ms?怎么弄的?一场控制多次?
作者: zzy2099    时间: 2012-6-5 08:08
赵仁煊 发表于 2012-6-4 20:56
你们摄像头的视野在转弯时可以看到两边的黑线吗?不太可能吧?你们的图像有没有做失真还原?没做会影响舵 ...

我总觉得 “失真还原”,是简单问题复杂化了。

入弯前2条黑线,直到丢失内弯的那条黑线,这个时候舵机是打死的。

作者: zzy2099    时间: 2012-6-5 08:09
51coming 发表于 2012-6-5 00:15
有疑问,速度控制周期2ms?怎么弄的?一场控制多次?

你可以每隔30行控制一次,也可开定时中断,这个也有实现难度?
作者: 赵仁煊    时间: 2012-6-5 08:25
zzy2099 发表于 2012-6-5 08:08
我总觉得 “失真还原”,是简单问题复杂化了。

入弯前2条黑线,直到丢失内弯的那条黑线,这个时候舵机 ...

这样速度减的快了吧!

作者: 赵仁煊    时间: 2012-6-5 08:32
zzy2099 发表于 2012-6-4 13:10
左右分别算的,,

左右分别算后怎么用呢?是取平均值吗,还是?
作者: lujiongjian    时间: 2012-6-5 12:57
zzy2099 发表于 2012-6-4 19:04
a[100]={81 80 83 100 200 200 200.......}
边界是a[3]=100.
边界怎么检测还要具体方法?

但由于光线等因素会影响AD的值,那该怎么办呢?
作者: gzhcontent    时间: 2012-6-5 16:01
看您的意思是入弯道的时候舵机一直打死 ,也就是说入弯之前先判断是左弯还是右弯 然后舵机一直打死 等到出了湾再用两条线判断?这样应该不会出现在弯道很厉害的时候左右线误判的情况了  是吗? 看到请回复一下  我入弯的时候弯道很大就会判断左右线错误 从而冲出去了
作者: zzy2099    时间: 2012-6-5 18:05
lujiongjian 发表于 2012-6-5 12:57
但由于光线等因素会影响AD的值,那该怎么办呢?

100行C代码估计可彻底解决反光问题,
遗憾的是,我们至今没有可靠的方法!

作者: zzy2099    时间: 2012-6-5 18:08
gzhcontent 发表于 2012-6-5 16:01
看您的意思是入弯道的时候舵机一直打死 ,也就是说入弯之前先判断是左弯还是右弯 然后舵机一直打死 等到出了 ...

急弯是这样!
不过,问题也不是你想得那么简单。。

我们这里基本只交流讨论宏观的东西,细节上自己把握哦!

作者: zzy2099    时间: 2012-6-5 18:12
赵仁煊 发表于 2012-6-5 08:32
左右分别算后怎么用呢?是取平均值吗,还是?

两个斜率k1,k2 正负关系组合多种,视不同情况而定效果好些。
我不敢妄下结论,所以怎么好用自己探索吧。

作者: Yoho    时间: 2012-6-5 19:03
zzy2099 发表于 2012-6-3 18:08
200线,感觉足够了。、
500线基本没多大意义

后来发现了不是编码器误读的问题 现在我们遇到了就是十字路口拟合线的程序太长了 造成了整条程序时序变化 PID的测速周期从5ms跳变到25ms.....跳过了一幅图像 明明1米多速度被测到了8米.... 现在没办法了 只好在十字路口那段时间开环掉 改时序优化程序还是达不到要求 哎

作者: lujiongjian    时间: 2012-6-5 21:35
zzy2099 发表于 2012-6-5 18:05
100行C代码估计可彻底解决反光问题,
遗憾的是,我们至今没有可靠的方法!

听说偏振片有滤光作用,不知是真是假?
作者: 993809188    时间: 2012-6-7 20:26
请问怎么数据滤波,消除十字错误数据,还有怎么十字补线
作者: 993809188    时间: 2012-6-7 20:58
dongyunlong 发表于 2012-6-3 19:26
可是在入弯的时候不寻单线的话,不就没法拐弯了吗?

哥们,你好我也是单线切换控制,不知道现在有什么好的方法了吗?望交流QQ993809188
作者: 993809188    时间: 2012-6-7 21:11
gzhcontent 发表于 2012-6-5 16:01
看您的意思是入弯道的时候舵机一直打死 ,也就是说入弯之前先判断是左弯还是右弯 然后舵机一直打死 等到出了 ...

您是不是也遇到了这样的问题,假设地板颜色为白色,黑线提取从中间往两边扫描,当车在急弯上并靠近外侧时,按理只能取到外侧黑线,内侧黑线取不到,但由于外侧地板颜色为白色,在实际过程中外侧黑线被提取了两遍,这个问题怎么解决


作者: 赵仁煊    时间: 2012-6-13 16:21
你们十字怎么解决的啊?可以提示下吗?谢谢啊!!!
作者: zzy2099    时间: 2012-6-13 18:52
赵仁煊 发表于 2012-6-13 16:21
你们十字怎么解决的啊?可以提示下吗?谢谢啊!!!

十字补线啊,,,根据斜率补完
作者: conglei721    时间: 2012-6-13 19:29
顶啦
作者: zbl9212    时间: 2012-6-13 22:07
和我当初做的摄像头车思路相似   都是滤掉十字不做特殊处理
作者: qual9109    时间: 2012-6-13 22:23
抛“砖”引玉
作者: 赵仁煊    时间: 2012-6-14 08:53
zbl9212 发表于 2012-6-13 22:07
和我当初做的摄像头车思路相似   都是滤掉十字不做特殊处理

可以详细谈谈吗?
作者: 赵仁煊    时间: 2012-6-14 08:54
zzy2099 发表于 2012-6-13 18:52
十字补线啊,,,根据斜率补完


十字那没边沿了啊!怎么有斜率?
作者: 竹子    时间: 2012-6-17 15:07
楼主可以分享一下你们直道采集的图片么???
作者: scottdw    时间: 2012-6-18 12:12
kevin2009 发表于 2012-5-30 11:30
后悔了,我们用CMOS的,前瞻设60cm还有不稳定的点

那是你没有好好的调摄像头的高度,角度,以及你的采点程序吧

作者: 此间的少年    时间: 2012-6-22 13:29





欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2