判断黑线状态,归一化,差比和算法

该代码段涉及机器人路径跟踪中的黑线检测。首先,`Judge_Black_Line_Status`函数判断黑线是否存在并确定其状态;然后,`Track_Data_Normalization`对数据进行归一化处理;接着,`Difference_Divide_Sum`计算差比和以评估偏差;最后,`Half_Black_Line_Error`计算单边黑线的误差。这些步骤用于优化机器人沿黑线行进的精度。
摘要由CSDN通过智能技术生成
//判断黑线状态
void Judge_Black_Line_Status(void)
{
	u8 i;
	u8 numb=0;
	u8 position[8];
	
	for(i=0;i<8;i++)
	{
		if(track_data[i]>track_data_range*0.3) black_line_status[i]=0; 
		else black_line_status[i]=1;
	}
	
	for(i=0;i<8;i++)
	{
		if(black_line_status[i]) 
		{
			position[numb]=i;
			numb++;
		}
	}
	//黑线数超过三个舍弃
	if(numb>3) 
	{
		black_line_valid=0;
		black_horizontal_line_flag=1;
	}
	else black_horizontal_line_flag=0;
	
	//丢线
	if(numb==0)
	{
		lost_black_line_flag=1;
	}
	else lost_black_line_flag=0;
	//判断黑线位置是否相邻
	if(numb==1 || \
		(numb==2 && position[0]+1==position[1]) || \
			(numb==3 && position[0]+1==position[1] && position[1]+1==position[2]))
	{
		black_line_valid=1;
	}
	else black_line_valid=0;
}

//归一化
void Track_Data_Normalization(void)
{
	u8 i;
	for(i=0;i<8;i++)
	{
		if(adc_data_fliter[i]>track_data_max[i]) track_data[i]=100;
		else if(adc_data_fliter[i]<track_data_min[i]) track_data[i]=0;
		else track_data[i]=(adc_data_fliter[i]-track_data_min[i])*track_data_range/(track_data_max[i]-track_data_min[i]);
	}
}
//差比和
float Difference_Divide_Sum(void)
{
	float difference,sum;
	difference=4*track_data[0]+3*track_data[1]+2*track_data[2]+track_data[3] \
	-track_data[4]-2*track_data[5]-3*track_data[6]-4*track_data[7];
	sum=track_data[0]+track_data[1]+track_data[2]+track_data[3] \
	+track_data[4]+track_data[5]+track_data[6]+track_data[7];
	if(sum) difference=100*difference/sum;
	else difference=0;
	if(difference>100) difference=100;
	else if(difference<-100) difference=-100;
  return (difference);
}
//单边线求偏差
float Half_Black_Line_Error(void)
{
	u8 i;
	for(i=0;i<4;i++)
	{
		if(black_line_status[i]) break;
	}
	return ((4-i)-1)*9;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值