简单的停车算法

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

汽车和车库的位置各由3个数字(x,y,theta)定义.其中x和y – 对象的中心和theta – 对象轴和X轴之间的角度.

《简单的停车算法》

汽车运动被简化 – 它是一个点(不需要计算精确的轮胎运动),可以以固定的速度前后驱动或转向跟随半径为R的圆(转弯半径可以是固定的或灵活的 – 无关紧要 – 任何选项对我都没问题)并且它没有惯性或加速度.

车库有3面墙,不应该被汽车接触.可以使用精确的尺寸进行碰撞,但为了简单起见,通过测量汽车和车库之间的角度以及汽车轴和车库中心之间的距离来检查碰撞.当汽车和车库足够接近时(中心之间的距离小于某些常数CloseEnough),由(α,d)检查的碰撞< (maxAlpha,maxDistance) 《简单的停车算法》

通过刻度模拟的世界,我们采用当前的汽车控制 – 向前或向后移动方向和转弯角度并计算汽车下一个位置.

该算法应该产生一系列控制命令,如[向前,向左],[向前,向左],[向后,向前],[向前,向右].

如果它是迭代的并且一次产生一个命令就可以了 – 然后检查下一个刻度上发生了什么并产生另一个命令.它可以要求模拟引擎在给定控制命令的情况下模拟和生成新坐标,或者使用模拟引擎尝试多个选项并选择最佳选项.

也可以通过一系列近似动作来做到这一点,就像它尝试过一次 – 错过,尝试另一次 – 接近,第三次 – 最后停车(但它应该或多或少合理,不要做几十或几个弯曲来回迭代).

最佳答案 可以解决一些问题,例如成功停靠需要多少精度,以及“滴答”允许的精度.你必须要做实验.但这是一个通用的方法:

不失一般性,假设汽车沿直线和最小半径圆移动. (较大的圆圈会给出更短,更温和的骑行,但是稍后会留下.)在实践中,这将意味着交替的圆 – 线 – 圆 – 线…

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

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

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

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

够了吗?

点赞