中级会员
- 积分
- 382
- 威望
- 198
- 贡献
- 114
- 兑换币
- 130
- 注册时间
- 2017-10-28
- 在线时间
- 35 小时
|
10贡献
VCAN.camera.c
for (i=CAMERA_LINE-4; i>CAMERA_LINE-8; i--) // 取五行,第五行开始取
{
p_image = p_camera_buffer;
u16 k=0;
left_flag = 0; //必须清零
right_flag = 0;
u8 Dajiao_flag=0;//打角标志位
if (left<1) left = 1; //限幅
if (right > CAMERA_W-2) right = CAMERA_W - 2;
for(j=line_Y[i+1].x; j>left-1; j--) //搜左边 ,这一行的搜线起点是 上一行的中点
{
if ( *(p_image+j)==bbb )
{
if( *(p_image+j-1)==bbb )
{
left_flag = 1;
left = j; //搜到跳变就跳出
break;
}
}
else
{
*(p_image+j) = 8; //不是黑点就打点
}
}
for (j=line_Y[i+1].x; j<right+1; j++) //中间往右
{
if ( *(p_image+j)==bbb )
{
if ( *(p_image+j+1)==bbb )
{
right_flag = 1;
right = j;
break;
}
}
else
{
*(p_image+j) = 8; //不是黑点就打点
}
}
if ( (left_flag+right_flag)==2 ) //两边都有
{
line_Y.x = (left+right)/2; //一个点的确定
line_Y.y = i;
line_Y.lr_flag = 2;
line_Y.m_l = left;
line_Y.m_r = right;
k=k+1;
s[k]=left -right;
}
}
if(s[1]!=s[2]&&s[1]!=s[3]&&s[1]!=s[4]&&s[1]!=s[5])
{
//赛道两边变宽,5行满足特征,即将进入圆环,那肯定要打角,才能进入
dajiao_flag001 ++;
if( dajiao_flag001 ==2)
{
return i; //返回i,算出来了赛道宽度不一样的起始,也
} //就是在进入圆环的边缘,然后跳出来,进入camera_draw_line_error(),提取中线,计算偏差
pid.c
if(dajiao_flag001==2) // 当满足(Dajiao_flag==1)的
{ // 表明即将进入圆环,给个固定打角
ftm_pwm_duty(FTM1, FTM_CH0, 610);
}
return camera_error+2.2*ang_1;//*2.2
}
我想问问大家,今年的圆环处理,我是用前五行来判断,圆环旁边左右宽度不一样,依据这个给一个标志位,给一个固定打角ftm_pwm_duty(FTM1, FTM_CH0, 610),可是把程序导进去后,舵机就不角了,不是应该向右打(舵机中值是540)吗?
不大明白这段程序出问题在什么地方?关于圆环,不知道大家有没有什么好的例程程序e借鉴?有没有大神私聊我,给我点思路,真的感激不尽。
|
|