活动机器人-视差-使用传感器移动机器人-C编程

活动机器人-视差-使用传感器移动机器人-C编程,c,parallax,robotics,C,Parallax,Robotics,这是我将活动机器人从起点移动到终点的代码。它探测两侧的障碍物,然后转身离开它们 我将移动序列保存在一个数组中,这样我就可以不使用任何传感器而返回起点**(这是“//返回”注释后的代码) #包括“simpletools.h” #包括“abdrive.h” #包括“ping.h” int back[200]; int i=0; int main(){ 整数距离; int irLeft=0,irRight=0; 低(26); 低(27),; 而(1){ 如果(平厘米(8)

这是我将活动机器人从起点移动到终点的代码。它探测两侧的障碍物,然后转身离开它们

我将移动序列保存在一个数组中,这样我就可以不使用任何传感器而返回起点**(这是“//返回”注释后的代码)

#包括“simpletools.h”
#包括“abdrive.h”
#包括“ping.h”
int back[200];
int i=0;
int main(){
整数距离;
int irLeft=0,irRight=0;
低(26);
低(27),;
而(1){
如果(平厘米(8)<5){
打破
}
freqout(11,13800);
irLeft=输入(10);
频率输出(1,13800);
右=输入(2);
if(irLeft==irRight==1){
驱动后藤(10,10);
返回[i]=10;
++一,;
返回[i]=10;
++一,;
}
如果(irLeft==0){
驱动后藤(20,10);
back[i]=20;
++一,;
返回[i]=10;
++一,;
}
如果(irRight==0){
驱动后藤(10,20);
返回[i]=10;
++一,;
back[i]=20;
++一,;
}
}    
驾车去(51,0);//转180度
驱动后藤(51,0);
//返回
而(1){
如果(i==0){
打破
}
开车去(后[i],后[--i]);
--一,;
}  
返回0;
}        

机器人成功地移动到目标,但它不会移回起点。问题可能是什么?

您似乎出现了一个“一个接一个”的错误。向前移动时,在变量
i
中跟踪移动历史数组中下一个可用位置的索引。当您开始返回时,使用当前值
i
,就好像它是上次记录的值的索引一样。在返回的过程中,您需要在每次读取之前递减
i
,镜像在每次写入之后递增的正向路径上的行为。

如果(irLeft==irRight==1)
没有意义。应该是
if(irLeft==1&&irRight==1)
。我不知道问题出在哪里,但对于已知的路线,建议查看第一步返回起点。然后是下一步。也就是说:找到一种自己调试代码的方法。由于格式不好,我甚至不能理解代码。把它也整理好,它将不可避免地改善你的逻辑方法。(John Bollinger改进)非常感谢:)这就是我的代码不起作用的真正原因。哈哈
#include "simpletools.h"
#include "abdrive.h"
#include "ping.h"

int back[200];
int i = 0;

int main() {  
  int distance;

  int irLeft = 0, irRight = 0;

  low(26);
  low(27);

  while (1) {
    if (ping_cm(8) < 5) {
      break;
    }

    freqout(11, 1, 38000);  
    irLeft = input(10); 

    freqout(1, 1, 38000);                     
    irRight = input(2);

    if (irLeft == irRight == 1) {
      drive_goto(10,10);
      back[i] = 10;
      ++i;
      back[i]= 10;
      ++i;
    }

    if (irLeft == 0) {
      drive_goto(20,10);
      back[i] = 20;
      ++i;
      back[i] = 10;
      ++i;
    }

    if (irRight == 0) {
      drive_goto(10,20);
      back[i]= 10;
      ++i;
      back[i]= 20;
      ++i;
    }
  }    
  drive_goto(51, 0);   // Make a 180 degree turn
  drive_goto(51, 0); 

//return
  while (1) {
    if (i == 0) {
      break;
    }
    drive_goto(back[i], back[--i]);
    --i; 
  }  

  return 0;
}