XXL 发表于 2015-9-15 16:06:24

超声波避障程序故障

本人写了一个小车超声波避障功能的程序,但是在实际行驶的过程中有时候会撞上前面的障碍物,然后在障碍物前方一前一后的不断抖动;有时候还会靠近障碍物然后小车的一边贴着障碍物行驶,求大神指点

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();
   }

}

pumpitup 发表于 2015-9-15 20:54:24

你如果做成向左转如果在规定时间内如果有没有障碍就左转后直走,如果到规定时间就向右转如果在规定时间内没有障碍就右转后直走,否则转回初始位置后退。

但是如果车走到角落就会有问题

XXL 发表于 2015-9-17 10:41:43

pumpitup 发表于 2015-9-15 20:54 static/image/common/back.gif
你如果做成向左转如果在规定时间内如果有没有障碍就左转后直走,如果到规定时间就向右转如果在规定时间内没 ...

谢谢你热心的回答我问题,不过我还是没看明白你说的意思,麻烦你再说一遍,谢谢了

pumpitup 发表于 2015-9-17 21:49:10



比如说遇到这种情况,会不断前进后退的。

XXL 发表于 2015-9-18 17:45:25

pumpitup 发表于 2015-9-17 21:49 static/image/common/back.gif
比如说遇到这种情况,会不断前进后退的。

对呀对呀,遇到这种情况怎么处理?处理不了吗?我想到一种方法可以避免这种问题,就是只往单方向转,然后一直这样检测,不管遇到什么情况都可以走出来,但是感觉这样不够智能。还有就是写的程序里面都是控制只要距离小于20cm就后退,但是有的时候只要前面的障碍物不是正对着就会出现靠近墙然后贴着墙走,实在不明白为啥?

pumpitup 发表于 2015-9-18 19:28:57

要解决的问题比较多。你找一本书《自律型机器人制作入门-基于Arduino》

就你这个,他说是叫峡谷效应。单方向转是一个解决方法,还有一种是添加状态变量,让机器人记忆前一次采取的动作,防止连续进行相反的动作。

其余的要靠你去观察,弄清楚怎么回事,然后想办法解决了。

XXL 发表于 2015-9-18 20:50:21

pumpitup 发表于 2015-9-18 19:28 static/image/common/back.gif
要解决的问题比较多。你找一本书《自律型机器人制作入门-基于Arduino》

就你这个,他说是叫峡谷效应。单 ...

好的万分感谢
页: [1]
查看完整版本: 超声波避障程序故障