Rob*_*ser 5 puzzle algorithm math artificial-intelligence
我正在开发一款游戏,每次更新游戏循环时都会运行AI.在此更新期间,我有机会转动AI控制的实体和/或使其在其面向的方向上加速.我希望它到达最终位置(在合理范围内)并且在该位置具有特定的速度和方向(同样不需要精确)即,给定当前:
立即选择:
使这些最小化:
可以在游戏循环的每次迭代期间重新计算参数.一张图片说1000字,所以例如当前状态为蓝色花花公子,在尽可能短的时间内达到大约红色花花公子的状态(箭头是速度):
假设Δt为常数α和τ(理想解的Δt→0)并将位置/速度分解为分量,这给出了(我认为,我的数学可能已经关闭):
(编辑:最后一个应该是θ= θ0 +τΔt)
那么,我如何选择立即α和τ(记住这些将在游戏循环的每次迭代中重新计算,通常> 100 fps)?我能想到的最简单,最简单的方式是:
它的潜在快速和简单,然而,这有一些明显的问题:
请注意,尽管算法可以(并且可能应该)在迭代之间保存状态,但是P f,V f和θf可以在每次迭代时改变(即,如果实体试图跟随/将自己定位在另一个附近),那么算法需要能够适应不断变化的条件.
有任何想法吗?有一个简单的解决方案,我错过了吗?
谢谢,罗伯特
听起来你想要一个 PD 控制器。基本上从当前位置到目标绘制一条线。然后以弧度为单位获取直线方向,这就是您的目标弧度。当前的弧度误差是当前航向 - 行航向。就称呼它为呃吧。(航向错误)那么你说当前的转弯速率将为 Kp Eh+d/dt Eh Kd。每一步都用新行执行此操作。
这就是标题
加速度是“加速直到达到最大速度,否则我将无法及时停止”。你提出了一堆积分,所以我相信你会很好地进行计算。
如果您想知道,是的,我以前已经解决过这个问题,PD 控制器可以工作。不要理会 PID,在这种情况下不需要它。matlab 中的原型。我遗漏了一件事,你需要有一个触发器,比如“我现在已经非常接近了”,所以我应该开始转向进入目标。我刚刚读到您关于“仅朝着我们前进的方向加速”的澄清。这会改变一些事情,但不会太大。这意味着需要“从后面”接近目标,这意味着线目标必须位于真实目标的后面,当您接近后面的目标时,请遵循一条新线,它将引导您到达真正的目标。您还需要遵循规则,而不是仅仅选择一个标题并尝试坚持下去。因此,不要每帧更新该线,只需说误差等于距当前目标线的签名距离即可。PD 会给你一个转弯速率,加速度是微不足道的,所以你已经设置好了。你需要手动调整 Kd 和 Kp,这就是为什么我首先说 matlab。(八度也不错)
祝你好运,希望这能为你指明正确的方向;)
双关语。
编辑:我刚刚读到……很多东西,写得很快。这是针对您的问题的行跟踪解决方案,如果您想将此解决方案作为解决问题的基础,只需谷歌行跟踪来配合此答案。