3

我正在为游戏寻找简单的停车算法。

汽车和车库的位置分别由 3 个数字定义(x, y, theta)。其中xy- 对象的中心和theta- 对象轴和 X 轴之间的角度。

在此处输入图像描述

汽车运动被简化 -它是一个点(无需计算精确的轮胎运动),可以fixed speed前后行驶或按照半径的圆圈R转弯(转弯半径可以是固定的或灵活的 - 没关系 - 任何选项对我来说没问题),它有no inertia or acceleration.

车库有 3 面墙,汽车不应碰触。可以使用精确的碰撞尺寸,但为简单起见,通过测量汽车和车库之间的角度以及汽车轴线和车库中心之间的距离来检查碰撞。当汽车和车库足够近(中心之间的距离小于某个常数CloseEnough)时,由(alpha, d) < (maxAlpha, maxDistance)

在此处输入图像描述

由滴答声模拟的世界,我们采用当前汽车控制 -moving direction前进或后退,turning angle然后计算汽车的下一个位置。

该算法应产生一系列控制命令,例如[forward, left], [forward, left], [backward, straight], [forward, right].

如果它是迭代的并且一次产生一个命令是可以的 - 然后检查下一个滴答时发生了什么并产生另一个。它可以要求仿真引擎在给定控制命令的情况下模拟并产生新的坐标,或者使用仿真引擎尝试多种选项并选择最佳的一种

如果它通过一系列近似的动作来做也可以,比如尝试一次 - 错过,尝试另一次 - 靠近,第三次 - 最终停车(但它应该或多或少合理,不要做几十或几百来回迭代)。

4

2 回答 2

1

有一些问题需要解决,例如成功对接需要多少精度,以及“刻度”允许多少精度。你必须进行实验。但这里有一个通用的方法:

在不失一般性的情况下,假设汽车沿着直线和最小半径圆移动。(更大的圆圈会带来更短和更温和的骑行,但留到以后。)在实践中,这将意味着交替的线-圆圈-线-圆圈-线......

最终目标是直接驶入车库。

在此之前的目标(“倒数第二个”)是进入与该路径相切的圆圈之一,尽可能靠近车库。因此,如果车库位于 (0,0,0),则圆圈以 (0, +/1r) 为中心。通常,如果车库位于 (x, y, θ),则圆的中心位于 (x-/+rsinθ, y+/-rcosθ)。

在此之前的目标(“倒数第二”?)是从汽车已经在的一个圆圈(左硬或右硬)到达与该圆圈和目标圆圈相切的线。

在那之前的目标是绕过车库,如果需要的话,这样汽车就可以执行已经描述的动作而不会撞到它。解决这个问题的一种方法是以车库的每个角落为中心画一个圆圈,然后从一个圆圈转到另一个圆圈。

够了吗?

于 2019-01-17T18:21:39.973 回答
0

Dubins 路径可能会帮助您,如前所述,使用半径基于汽车最窄曲率的圆和连接这些圆的切线,主要目的是找到在地图上放置所需圆的位置,当你拥有它时,你会快完成了,我猜!

于 2021-08-25T06:17:30.713 回答