本人写了一个小车超声波避障功能的程序,但是在实际行驶的过程中有时候会撞上前面的障碍物,然后在障碍物前方一前一后的不断抖动;有时候还会靠近障碍物然后小车的一边贴着障碍物行驶,求大神指点
void Bi_Zhang() //超声波避障函数
{
analogWrite(PWM1,200);
analogWrite(PWM2,200);
ask_distance(); //测试当前前方障碍物的距离
if(distance<20)
{
back();
}
else if(distance<25)
{
turn_left(); //往左转一下,测试左边的距离
delay(150);
stop_all();
delay(1000);
ask_ldistance(); //测试左边的距离
// delay(1000);
analogWrite(PWM1,200);
analogWrite(PWM2,200);
turn_right(); //往右边转一下,测试右边的距离
delay(300);
stop_all();
delay(1000);
ask_rdistance();
// delay(1000);
analogWrite(PWM1,200);
analogWrite(PWM2,200);
if(rdistance>ldistance) //左右两边的距离相比较,如果右边距离大于左边距离,直走
{
forward();
}
if(rdistance<ldistance)
{
turn_left(); //如果右边距离小于左边距离,往左转转回左边测试距离的位置,然后直走
delay(300);
forward();
}
if(rdistance<20 || ldistance<20) //如果左右两边距离小于20厘米,则倒退
{
back();
}
}
else //如果距离大于25,则直走
{
forward();
}
}
|