- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
首先 - 我浏览了类似的问题,但它们没有解决我的问题,这不是重复(我希望)。
我正在使用 Arduino Nano 构建和编程一个机器人,该机器人应该可以解决迷宫问题。它被放在迷宫的某个地方,然后必须找到一个项目。下次它应该直接到达该项目(它不一定是最短的路,但不允许有死角)。
没有必要知道整个迷宫,因为只要他有一条通往元素的路就很好。正如我所说,我不需要最短路线。
迷宫是二维的,我只是把黑色胶带放在白色 table 上,机器人应该使用线传感器来跟随线。
没有其他传感器可以定位自己。首先,我想到制作一个二维数组,迷宫的每个区域都在其中。但是因为它只是一个普通的线传感器,所以机器人不知道直线是一个还是两个字段长,所以整个事情都不起作用。
我也尝试过 DFS 或类似的东西,但这里有类似的问题。迷宫是圆形的,机器人怎么知道之前已经找到了节点并且它是相同的?
如果有人有想法,那就太好了!
最佳答案
虽然方向有点模糊,但可以使用决策。一个决定必须是可重复的。它可以用一个类来表示:
public class Decision {
boolean[] directions = new boolean[2]; // 0 = left, 1 = straight, 2 = right
// at least 2 of them should be true or it is no decision
int path; // 0-2 to mark the current path
}
创建一堆决策。
如果一开始只有一个可能的方向(后退不算,后面处理),则继续前进,直到遇到第一个决定。
将包含所有可能方向的决策推送到堆栈。
将路径
设置为第一个可能的方向并朝那个方向移动。
如果您最终做出另一个决定:在 3 点继续。
如果您找到 token :中止,则您找到了一种没有死胡同的可重现方法。
如果是死胡同:回到上一个决策节点(返回的第一个)继续6。
弹出决定并尝试下一个可能的方向(设置新路径并插入决定)并在 5 处继续。
除非你已经尝试了所有方向,然后退回另一个决定并继续6。
如果没有更多的决策(上面提到的特殊情况,我们一开始就走错了方向):继续前进,直到遇到第一个决策,然后从3继续。这意味着你需要另一个 bool 变量来指示是否你应该从头开始倒退。
从左
回来时要小心,然后想尝试直行
,接下来您将不得不向左转,而不是直行。所以这里涉及到一些计算。
如果您从一开始就以错误的方式开始,该算法就会出现循环决策问题。我认为这可以通过设置上限来避免,例如如果您仍然没有找到 token 并遇到 30 个决策节点(继续),那么您可能在原地打转,所以回到开始,现在不要按递增顺序尝试方向,而是按递减顺序尝试。
关于algorithm - 机器人如何规划迷宫?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40959606/
我的对话 fragment 有问题。我想使用 android:onClick 属性,因为在我看来代码更清晰。 在我的布局中,我有以下声明: 现在我的 DialogFragment import an
我正在制作一个使用谷歌地图的应用程序,我的主要 xml 代码 fragment 如下: 我的java代码是: import android.os.Bundle; import com.googl
是否可以在一个应用程序中有两个单独的首选项?我有一个在运行时连接到外部可执行文件(引擎)的应用程序。应用程序有自己的偏好,引擎也有。这两者不能混用,因为下次用户可能会决定加载具有不同偏好的完全不同的引
这是“Google Catalogs”应用程序的快照。我只是想知道我们如何进行这种图像重叠。![enter image description here][1] 最佳答案 您可以使用 FrameLay
我制作了一个 GridView ,其中添加了图像。但我的问题是它显示的 gridview 尺寸非常小,其中只有 3 张图像,就像图片中那样,我想在其中显示 9 张图像。 小号 但我希望 gridvie
我目前正在学习如何在 Android 上创建和使用服务。我查看了 android SDK 以获得进一步的帮助,我发现了 android:enable=[true |假]。 在SDK中是这样说的: Th
在完成我的 Android 游戏时,我希望用户将他/她的分数与高分进行比较。为此,我将当前的最高分存储在 SQLite 数据库中。但我认为我的方法(似乎可行)笨拙且丑陋: //in the final
出于某种原因,谷歌没有为模拟器提供任何通知声音,我找不到任何关于如何加载通知声音的引用。 我遇到过这个线程:How to play ringtone/alarm sound in Android但是除
我的应用有以下样式: true #ffffff true 它在我使用的大多数手机上运行良好。 (LG G5、Nexus 5、Moto G)但是当我在 LeEco Pro
我想确保我的网站阻止 Selenium 和 QTP 等自动化工具。有没有办法做到这一点 ?网站上的哪些设置会导致 Selenium 失败? 最佳答案 适当考虑对原始问题“你到底为什么要这样做?”的评论
我正在处理我的联系表,我希望它尽可能地防止垃圾邮件。我正在使用一些方法作为反击: 使用 JavaScript 正则表达式验证电子邮件的合法性 验证所有字段是否具有足够的值 制作一个不可见的字段来吸引机
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, over
我正在制作一个 android 应用程序,我需要在我的应用程序中显示远程图像我使用以下代码。但图像未显示: for(int i=0;i
我有几个与 Android 操作系统中的 AIML 集成相关的问题。我对 Java 了解不多,但我对 AIML 了解很多。我制作了 AIML 文件,现在我想做的是制作一个可以加载文件并在 GUI 中运
我有一个具有“登录”和“注销”操作的应用程序。用户登录后,在他们注销时堆栈中可能还剩下任意数量的 Activity 。 当用户注销时,我希望重置所有应用程序状态。我清除了我的磁盘缓存和首选项,但在运行
我是 Android 应用程序开发的新手,我正在尝试开发一个可用的应用程序。但是我创建的这个页面自创建以来就出现了问题,我真的希望有人能帮助我解决这个问题。每次我运行这个程序时,应用程序都会关闭。 这
我尝试将 android:imeOptions 设置为 actionSend、actionSearch。但是键盘上没有“发送”或“搜索”按钮,只有普通的“Enter”键。我还尝试设置不同的输入类型。
我想创建一种方法来查看相机坐标的中心是否在某个区域的边界内,如果是,则执行一些操作。 当我尝试这样做时,出现错误:Operator !不能应用于 LatLngBounds。 我也试过 if(temp
我正在尝试将视频录制时长限制为 5 秒。我正在使用默认相机和此代码: intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 5); 现在它在三星 S6 上工
我正在开发一款安卓游戏 https://code.google.com/p/something-soft/我的日志猫说它正试图激发游戏的 Intent ,但随后主线程似乎死了(出现 ActivityN
我是一名优秀的程序员,十分优秀!