gpt4 book ai didi

c - 事件机器人 : Going to the corner on the upper right side in a maze

转载 作者:行者123 更新时间:2023-11-30 19:35:11 26 4
gpt4 key购买 nike

所以我正在创建一个程序来驱动机器人到迷宫的右上角。迷宫的一个例子是:enter image description here

这是我的代码:

#include "simpletools.h"
#include "abdrive.h"
#include "ping.h"


int whichCase = 0;
//int caseArray[] = {0,1,2,3};
int irLeft, irRight;

void turnRight () {
drive_goto(26, -25);
drive_goto(125,125);
whichCase = (whichCase + 1) % 4;
}

void turnLeft () {

whichCase = (whichCase - 1) % 4;
drive_goto(-25,26);
drive_goto(125,125);
}


void forward () {
drive_goto(125,125);
}

void backward(){
drive_goto(26, -25);
drive_goto(26, -25);
whichCase = (whichCase + 2) % 4;
}


void priority(int whichCase) {

switch (whichCase) {

case (0):

/* (1) go right */ if (irRight == 1) { turnRight(); }
/* (2) go forward */ else if (ping_cm(8) > 30) { forward(); }
/* (3) go left */ else if (irLeft == 1) { turnLeft(); }
/* (4) go backward */ else if (irRight == 0 && irLeft == 0 && ping_cm(8) < 30){ backward();}
break;


case (1):
/* (1) go forward */ if (ping_cm(8) > 30) { forward(); }
/* (2) go left */ else if (irLeft == 1) { turnLeft(); }
/* (3) go backward */else if (irRight == 0 && irLeft == 0 && ping_cm(8) < 30){ backward();}
/* (4) go right */ else if (irRight == 1) { turnRight(); }
break;


case (2):
/* (1) go left */ if (irLeft == 1) { turnLeft(); }
/* (2) go backward */ else if (irRight == 0 && irLeft == 0 && ping_cm(8) < 30){ backward();}
/* (3) go right */ else if (irRight == 1) { turnRight(); }
/* (4) go forward */ else if (ping_cm(8) > 30) { forward(); }
break;

case (3):
/* (1) go backward */ if (irRight == 0 && irLeft == 0 && ping_cm(8) < 30){ backward();}
/* (2) go right */ else if (irRight == 1) { turnRight(); }
/* (3) go forward */ else if (ping_cm(8) > 30) { forward(); }
/* (4) go left */ else if (irLeft == 1) { turnLeft(); }
break;


}

}

void main () {
drive_goto(145,145);
low(26); // D/A0 & D/A1 to 0 V
low(27);
drive_setRampStep(12);
freqout(11, 1, 38000); // Check left & right objects
irLeft = input(10);
freqout(1, 1, 38000);
irRight = input(2);

while(1) {
priority(whichCase);
}

}

所以在这段代码中我基本上做了 4 种情况来代表机器人的不同位置:面朝上、面朝右、面朝下和左。根据不同的位置,机器人会以不同的方式使用传感器。代码的思路是这样的:

  1. 如果可以向右走,就向右走
  2. 否则如果可以继续前进
  3. 否则如果可以向左走就向左
  4. 否则如果可以返回就返回

我认为逻辑非常简单并且应该可行。但事实并非如此。

请帮忙:(

最佳答案

正如 B. Wolf 所建议的,您需要在 while 循环中更新 irLeft 和 irRight。此外,你的看起来像一个墙壁跟随器,它只会跟随墙壁(无休止地)。您需要在代码中添加一个结束条件,因为您需要跟踪当前处于迷宫的哪个方 block 。由于迷宫是 4x4,因此您会准确地知道何时停止以这种方式

我会提醒你,在第一阶段你需要访问所有其他 3 个角落,所以仅仅到达对面的角落是行不通的。是的,我是你的同学之一,你最好询问完成作业的同学,除了来自 stack Overflow 的人,他们不知道类(class)的全部内容:)

关于c - 事件机器人 : Going to the corner on the upper right side in a maze,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42965364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com