活动机器人-视差-使用传感器移动机器人-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;
}