- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
7年前关闭。
Improve this question
在我的项目中,我只是想制作一个机器人,它可以尽可能多地探索网格,而不用两次走相同的路径。此外,它还有一个传感器,可以查看是否有物体挡道(该物体只能在走廊中)。但是我很难让机器人避免走同样的路。
我尝试通过创建一个二维数组来为网格中的每个正方形存储一个整数值来解决这个问题。值为 0 表示机器人尚未在网格中的该方格上,值为 1 表示方格在方格中被阻挡,值为 2 表示机器人之前曾在该方格上。如果机器人看到其当前航向前方的方格值为 2,则它会继续旋转以找到值为 0 的方格,但如果机器人周围不存在值为 0 的方格,则开始回溯。
这个例子可以更清楚地解释我的问题:
三角形代表机器人及其起始位置,左下角假定为我网格中的位置 (0,0)。绿色圆圈代表阻挡其路径的元素。红色方 block 是机器人的目标。机器人只能移动到网格中的白色方 block 上。
当我启动我的程序时,机器人向前移动(向东,因为那是它的当前方向)直到它到达绿色圆圈之前的交叉点。它向前看并检测到挡路的物体,因此它逆时针旋转 90 度并检查是否有另一个阻塞,因此再次发生阻塞,因此它再次逆时针旋转。所以现在机器人在位置 (0,2) 向西移动。它只能向西移动以避免离开网格或撞到物体,因此它会回到初始位置但仍向西移动。它现在将继续顺时针旋转 90 度,直到它找到一个将它保持在网格上的方向,即直到它再次面向东方。所以网格现在看起来像:
但是现在我想通过忽略该方向并再次逆时针旋转 90 度以面向北方来忽略继续前进并走上同一条路径,这样我的机器人就可以向北移动到一条新路径中。我可以简单地忽略方向并继续旋转以找到新路径,但是如果我被之前的路径包围并且我希望我的机器人回溯到它的最后一个路口怎么办。我怎样才能有效地做到这一点。另外,如何有效地检测何时需要回溯。
谢谢
最佳答案
解决图 2 中的困境可以像检查其他 white
一样简单。在你采取行动之前,在机器人周围的方 block 。在图 2 中,机器人会看到他所面对的方格是“灰色的”,并决定检查所有其他方向,最终发现在他的北边有一个空的白色方格。
编辑:没有意识到这是一个真正的机器人。
由于了解单元格中内容的唯一方法是转向该单元格并使用传感器,因此无论您做什么,机器人都必须进行一定量的转动。当它遇到墙壁或绿色物体时,它必须转身,直到找到新的行进路径。您可以通过忽略外壳的墙壁来优化它。例如,当机器人回到起始位置朝西时,你已经知道南边有一堵墙,因为它的坐标位置是(0,-1),这是无效的。这使您可以确定打开的图 block 在北边,因为您已经访问了东边的图 block ,只需要转一圈。
此外,当机器人最终一直向北移动时,由于其位置,您知道在北面和西面都有一堵墙 (0,6)。然后,您可以明智地猜测开放槽必须在东方,因为西方瓷砖 (-1,6) 无效并且 (0,7) 也无效。
无需更改传感器以查看 2 个 block 或在机器人上安装更多传感器(即每侧一个),由于信息的可用性有限,无法进行更多优化。
关于java - 对机器人进行编程以探索网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28534527/
接上篇 通过一个示例形象地理解C# async await 非并行异步、并行异步、并行异步的并发量控制 前些天写了两篇关于C# async await异步的博客, 第一篇博客看的人多,点
前言 在 SwiftUI 中,我们可以通过添加不同的交互来使我们的应用程序更具交互性,这些交互可以响应我们的点击,点击和滑动。 今天,我们将回顾SwiftUI基本手势:
今年我一直在想,2022年我想做些什么,做哪方面的改变,这周末在家终于想到了! 2021 轻描淡写 年底就一直想对2021年写一篇总结的,起码不得写个千八百字,可是思来想去不知道怎么写,直到最后都没想
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
在 Eclipse 中使用 Java 进行开发时,它非常方便:您可以像自己一样附加源代码并探索核心 Java 代码。在 Visual Studio 中,我知道只有在调试时才能查看 .net 源代码(我
我正在尝试创建自己的字符串数据类型,谁能告诉我 typedef 和初始化做错了什么。 #include #include typedef char string[10]; int main(){
我期待开发一些东西来分析在服务器上运行的应用程序的 JVM 线程,要求如下: 访问在单独应用程序中运行的所有线程 打印线程栈 了解事件的详细信息 - 记录执行时间和方法详细信息(在特定线程中执行) 我
是否可以探索 Android 内部存储?我需要这个用于调试目的,以帮助我的开发工作。 最佳答案 您可以在模拟器上,或在 Root设备上。只是 adb shell 连接设备,然后从那里导航。 关于and
我有一个使用大量外键的 innoDB 表,但我们只想从中查找一些基本信息。 我做了一些研究,但还是迷路了。 如何判断我的主机是否有 Sphinx已经安装了吗?我没看到作为表格存储的选项方法(即 inn
我有一个创建列表的 GWT 代码(作为结果的网格),我将样式设置为 CSS 类,如 .test tr { height: 26px; } 现在...如果在渲染未完成或网格没有元素时我需要从代码
我需要使用 Javascript 和 HTML 为 Rally 敏捷工具开发一个 View 。我没有处理过在我作为开发人员的新职业中经常使用的网络语言。 我只是在探索他们的 API,但不知道如何探索他
我想了解 Hadoop 而不是一个黑盒子。我想探索 Hadoop 代码本身。我怎样才能不从主干下载 bundle ,我应该从哪里开始?任何帮助都会很有帮助谢谢舒佳特 最佳答案 Hadoop 代码在 S
想象一下这样的情况。您获得了一些遗留代码或获得了一些新框架。您需要尽快调查并了解如何使用此代码。没有机会向以前的开发人员寻求帮助。什么是最佳实践/方法/方式/步骤/工具(首选 .NET Framewo
我注意到我的 git 存储库中的某些 makefile 缺少变量定义的问题,我想搜索所有提交历史以查找我的变量 TESTDIR 在变更集中出现的位置 我该怎么做? 干杯 最佳答案 你可以使用 git
有什么方法可以探索 GO 包吗? 在 java 中,我使用“javap java.lang.String”命令来查看类内部的方法。像这样,有没有命令是他们用 GO 语言写的? 我在谷歌中搜索了相同的内
我注意到 docker 我需要了解容器内发生了什么或其中存在哪些文件。一个示例是从 docker 索引下载图像 - 您不知道图像包含什么,因此无法启动应用程序。 理想的情况是能够通过 ss
近日,华为 分析服务 6.9.0版本发布,正式上线 探索能力 。开发者可自由定义与配置分析模型,支持报告实时预览,数据洞察体验更加灵活与便捷. 新上线的探索能力中,有漏斗分析、事件归因、会话路径分析
我有一个 4 列的 excel 2010 电子表格。 A 列:我销售的产品的 UPC 代码列表。大约300行。 B 列:公式(稍后会详细介绍) C 列:另一个 UPC 代码列表。这些 UPC 代码大约
我有 3 个表格如下: CREATE TABLE USER_STATUS ("UID" varchar2(7), "STAT_ID" varchar2(11)) ; INSERT ALL IN
有什么方法可以探索 java 脚本对象(如 telerik 菜单或任何其他第 3 方对象)的属性和/或功能?我可以通过调试和破坏然后在 watch 中添加对象或在 VS 中使用智能感知来实现。 我使用
我是一名优秀的程序员,十分优秀!