- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做一个研究项目,使用 raspberry pi 和激光雷达 2D 扫描仪来定位遥控车。基本上,一辆汽车将通过扫描仪穿过该地点以获得该地点的 2D 表示,然后它会返回起点。之后,您将能够选择一个适当的点,它会在其中找到一条路径。由于我几乎是编程的初学者,所以在 1 个月内几乎不可能做到这一点,但我会尽力而为 :) 那么我现在想知道的是我应该使用哪种寻路算法?由于 2D 位置的分辨率约为 5000 x 5000“像素”,以厘米为单位表示位置,我相信我需要一个非常高效的分辨率。是否有任何特定算法可以在树莓派上以足够快的速度几乎立即完成工作?如果有,有没有高效的实现方式?
一些附加信息:我使用的是“像素”二维数组,其中的值表示:
EMPTY_SPACE = 0
FILLED_SPACE = 1
START_POINT = 2
END_POINT = 3
PROCESSING = 4
PROCESSED = 5
VISUAL_ASSISTANCE_POINTS = 6
它们还有第二个可选参数,表示到终点的距离,因为我发现这对于寻路是必要的。
您可能会发现这是一个骗局:Pathfinding in 2D Arrays ,但我并没有真正找到所有问题的解决方案,因为我正在寻找更具体的答案。
编辑:
我找到了 this实现 A* 算法的代码,但我发现它很慢......有什么办法可以加快速度吗?我使用下面相关的图像进行测试,大约需要 80 分钟才能解决。
最佳答案
A* pathfinding是您最好的选择之一。它广泛用于需要在 2D 网格中找到 A 和 B 之间路径的游戏中。它使用启发式方法来识别有利的节点(如果需要,可以将它们称为像素)并因此获得良好的性能(尽管取决于您选择启发式函数的程度)。与任何特定/高度优化的算法相比,实现非常容易。此外,还有各种可用的实现。
至于“几乎瞬间”的速度,我怀疑您能否仅通过算法来实现。当需要这种性能时,将需要应用特定于域的修改。一种解决方案可能是预先计算某些路径。这些路径可能表示单个节点到每个其他节点的完整映射(在您使用 5000x5000 网格的情况下,这是不切实际的)。或者,预先计算的路径可以将网格中的节点 block 视为单个节点,即从 0..10,0..10 中的区域 x,y 到 10..20,0 中的区域 x,y 的任何移动。 .10 使用单一的预计算路径。这可能不会为您提供最佳路径,但肯定会更快。与计算中的几乎所有事物一样,内存和速度之间总是存在权衡。
同样值得澄清的是,您问题中的“像素”是否指汽车的单个运动单位。可能是面积是 5000x5000 但汽车实际上一次占据了 50 个像素。那么您可能会使用单个节点来表示 50 个像素,以加快计算速度并获得更精确的结果。
关于真实二维区域中的Java寻路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34546653/
我正在寻找x86 Assembly中pow(real, real)的实现。我也想了解算法的工作原理。 最佳答案 只需将其计算为2^(y*log2(x))即可。 有一个x86指令FYL2X计算y *
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
风格指南的最后一点 http://www.python.org/dev/peps/pep-0008 读... 不要使用 == 将 bool 值与 True 或 False 进行比较。 为什么? 编辑只
我似乎无法完成这件事。我仍然在我的日志中看到 cloudflare IP。目前,我有一个负载均衡器,它位于 Cloudflare 后面。 目前,这是与 forwardfor 相关的块: opt
此代码行选择任何类名不是“id”和“quantity”的 div 内的所有子输入:: $("div.item > div:not(.id,.quantity) > :input").live("key
我在测试真实产品时遇到错误。当我单击购买按钮时,出现错误“此版本的应用程序未配置为市场计费”。 我用这个例子https://github.com/robotmedia/AndroidBillingLi
到目前为止我能找到的所有答案都建议调用 omp_set_num_threads。虽然在大多数情况下这是一个正确的答案,但它对我不起作用。在内部,调用 omp_set_num_threads 会导致创建
假设我有 3 个显示器。如何仅通过其索引获取第二个句柄? EnumDisplayMonitors() 不会工作,因为它也枚举了伪设备,而 EnumDisplayDevices() 没有给我句柄。 最佳
我一直在尝试制作一个简单的小游戏来测试我的逻辑,这是一个简单的迷宫,它很丑,而且到目前为止很糟糕。 引擎工作得很好,考虑到迷宫已经存在(矩阵),它甚至可以愉快,但我无意绘制一堆 map ,这可能是在
Cloudflare 代理包含一个名为 CF-Connecting-IP 的 header 和用户的真实 IP。我想让 traefik 读取这个 header 并用它的内容创建一个 X-Real-Ip
我想要上下文菜单中的不同菜单项,具体取决于我在 JTable 中单击的行 大多数示例并没有真正显示上下文菜单(应该根据上下文 - 所选行进行填充) 我尝试过这个: popupMenu = ne
我有一个对象 callInst。如何获取函数的真实名称而不是 IR 代码中的名称?如果我在我的通行证中运行此代码(Useless 在另一个问题中发布) StringRef get_function_n
我在 Appium 和 iPad 2 上使用了以下所需的功能 DesiredCapabilities capabilities = new DesiredCapabilities(); capabil
根据documentation 我们可以通过以下方式在模拟器上运行我们的 android 项目: cordova 运行 android 或 cordova emulate android 但是如何在真
在 ASP.NET 中,有没有办法获得真正的原始 URL? 例如,如果用户浏览到“http://example.com/mypage.aspx/%2F”,我希望能够获得“http://example.
我的 NSInputStream 遇到问题。这是我的代码: case NSStreamEventHasBytesAvailable: printf("BYTE AVAILABLE\n"
$(selector).click() 结果没有任何反应。 this answer在浏览器控制台中工作,javascript 上下文设置为 iframe,但不是主页: simulateMouseCli
我在我的 AB Micro820 PLC 中设置了 modbus 映射。我在 40001 中有一个数组用于写入,在 42001 中有一个数组用于读取。两者都是 200 个元素和 REAL 类型(32
我正在寻找有关设计契约(Contract)管理数据模型的建议。因此,合约的一般生命周期是: 契约(Contract)已创建并处于“草稿”状态。它可以在内部查看,并且可以进行更改。 契约(Contrac
我正在尝试让我的 WebView fullscreen 达到标准,我知道如何将它拉伸(stretch)到“全屏”,但我想做的是当您长按 WebView 并选择全屏选项时,创建全屏。有谁知道该怎么做?
我是一名优秀的程序员,十分优秀!