【问题标题】:Algorithm for RC car遥控车算法
【发布时间】:2010-10-27 18:30:53
【问题描述】:

我正在寻找一种算法,但我不知道从哪里开始!

我试图在笛卡尔图中从 A 点到 B 点。运动仅限于遥控车:后退、前进、左前和右前(恒定转弯半径;汽车要么完全转弯,要么根本不转弯)。

我将如何构造一个采用以下内容的算法:

turningRadius, initialPosition, initialOrientation, finalPosition

并产生一组有序的步骤以到达 finalPosition?

请注意,我不在乎最终的方向是什么。

谢谢!


编辑:请注意,这不是在具有离散节点的图中,而是在连续坐标系中

【问题讨论】:

  • 您需要配置匹配吗? (x, y, heading),还是只是位置 (x,y)?

标签: algorithm coordinate-systems cartesian motion-planning


【解决方案1】:

描述你的问题的方式,算法很简单,只需要两个简单的步骤:1)在转弯(左或右)的同时向前移动,直到汽车直接指向 B,2)向前直行直到你撞到 B . 完成。

唯一相对棘手的部分是第一步。如果 B 在其初始位置位于汽车纵轴的左侧,则自然的方法是从左转开始。这将起作用,除非 B 点位于由左转(半径为turningRadius)产生的圆形轨迹内。在后一种情况下,汽车会绕圈行驶,但永远无法直接瞄准 B。在这种情况下,正确的策略实际上是从 右转 开始并继续转弯,直到你瞄准B站的车。

因此,如果您对轨迹没有任何最优性要求,那么第一步最简单的算法是无条件地“远离”该点:如果 B 撒谎,则转汽车纵轴的left,如果B位于right,则转left。继续转弯,直到汽车直接瞄准 B。这听起来有点不自然,但它总是有效的,即您始终能够最终瞄准汽车。

如果您关心更优(更短)的轨迹,那么您需要分析 B 相对于汽车初始位置/方向的位置(“B 是在转弯圈内还是在转弯圈外?”)并选择相应的第一个转弯的方向。

【讨论】:

  • 但这不考虑地形或道路
  • @Parris:什么地形?有哪些道路?问题陈述中没有提到任何“地形”或“道路”。如前所述,问题是从 A 点到 B 点,由它们在连续和无限平面上的笛卡尔坐标指定。
  • 啊,没错,我认为问题更难。当我阅读遥控车时,我假设了游戏或真正的遥控车。顺便说一句,问题陈述并没有说无限或平面。如果情况确实如此,或者是一个简单的动画,这种方法会很好用。然而,一个系统完全平坦、没有障碍物和无限的频率有多高。
  • 很好的描述 - 非常感谢!目的地是我一直坚持到现在的情况(或者更确切地说,“绕圈子” - har-har)。谢谢!
  • 如果 B 垂直且相对靠近 A(类似于停车操作)怎么办?我认为你的算法会失败。
【解决方案2】:

一般来说,这不是一个容易的问题。它属于“差异约束下的规划”类别。 LaValle 书的最后三章(可在线获取here)处理了这个问题。尤其是第 14.4.2 节,它涉及“杜宾斯汽车”,它与您的遥控车相似,只是它不会后退。

同时搜索“杜宾斯汽车路径规划”。你会发现很多论文。

【讨论】:

  • 重要的是,LaValle 的书解释了此类路径是此类问题的最佳解决方案。然而,因为 OP 声明汽车也可以向后行驶,所以这实际上应该是 Reeds-Shepp 曲线(第 15.3.2 节),而不是 Dubins 曲线(第 15.3.1 节)。
【解决方案3】:

你试过a*(a-star)吗?提供地形图也很好。您可以为地形的不同部分分配权重,这将导致不同的路径。我相信默认情况下该算法不提供对角线方向,但您可以很容易地添加它。

默认情况下它不处理“转向”,但 a-star 会给出完整路径。您可以做的是根据 2 个点计算转弯半径。当前位置和下一个计算的位置,或最后一个位置和当前位置。然后,您可以随着角度的变化增加或减少朝向。您可能需要对此进行一些调整。

【讨论】:

  • 对不起,我说的是网格,这意味着我正在谈论一个带有离散节点的图。这是在一个连续的坐标系中。谢谢!
  • 它们并没有什么不同。没有网格是没有办法的。您的网格可能包含极小的“点”,因此看起来不像网格。想想屏幕上的像素。考虑到在 3d 游戏中,位置是使用浮点值定义的;然而,一个网格被覆盖来计算路径,八叉树,etccc
  • Parris:我知道我可以将网格量化为一个带有节点的巨型图(因此使我能够使用 A*),但我认为这样做的程度我需要的精度会使其在我的平台上的计算量过高。不过谢谢!
【解决方案4】:

听起来是一个有趣而有趣的项目!要获得特定的算法推荐,您可能应该提供更多详细信息……就像您希望在连接到 RC 汽车的某种嵌入式控制器上运行它一样?或者是在工作站上运行并远程控制汽车的算法? (或者这纯粹是一个抽象的练习,没有车……哇。)

我的一般建议是Building Problem Solvers,这是对“AI”问题解决技术世界的一个很好的介绍。这些天可能有点过时了……但是等等,我在说什么!可能不是。 :-)

[好吧,我应该解释一下最后一条评论:我在实践中看到的大多数“现代”人工智能技术实际上都可以追溯到多年前的想法......现在它们刚刚变得实用,这要归功于摩尔定律的不断进步。因此,就我个人所见,1993 年写的一本书仍在讨论相当先进的技术。我很想被指出一个反例!]

【讨论】:

  • 是的,我真的将嵌入式系统附加到遥控车上。那一定会很好玩!谢谢推荐书。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多