gpt4 book ai didi

c# - 迭代平滑位置变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:13 24 4
gpt4 key购买 nike

我有一个实体,它的运动有噪音。该实体正直奔目标实体,我正在尝试估计它需要多长时间才能达到目标。

我试图通过查看实体的位置历史来估计实体的速度。

我有一个 History<Tuple<double,Vector2D>它有最后 N 个职位,我是什么时候得到那个职位的。这些位置通常以 1 秒的间隔非常一致地出现。

我尝试了一些自制的公式,其中 xtk[n] 是 [n] 秒前的分量(x 或 y):

       private double GetFirstOrderVelocity(double xtk, double xtk1, double h)
{
return (xtk - xtk1)/h;
}

private double GetSecondOrderVelocity(double xtk, double xtk2, double h)
{
return (xtk - xtk2) / (h*2);
}

private double GetThirdOrderVelocity(double xtk, double xtk1, double xtk2, double xtk3, double h)
{
return (xtk + xtk1 - xtk2 - xtk3) / (h * 4);
}

private double GetFourthOrderVelocity(double xtk, double xtk1, double xtk3, double xtk4, double h)
{
return (xtk + (2 * xtk1) - (2 * xtk3) - xtk4) / (h * 8);
}

在哪里h始终为 1,因为它们以 1 秒的间隔进入。

四阶有帮助,但我想知道是否有更好、更通用的方法来估计先前位置的速度?迭代的东西,所以如果我需要更强的平滑,我只需要增加一个计数器,这可能会使用更多的历史记录,并会牺牲响应能力来换取平滑度。现在的问题是,如果某物正朝着目标前进,从逻辑上讲,定位时间非常不稳定,有了足够的样本,我们就可以开始相当准确地估计它到达目标需要多长时间。

最佳答案

迭代。保留两个具有不同衰减率的指数衰减平均值,然后通过比较它们来预测。

思路是这样的。如果0 < k < 1然后可以通过以下方式计算衰减平均值:

average = (1-k)*prev_average + k*observation

你应该做你自己的数值实验以确保我没有犯一个愚蠢的错误。但是如果你的路径是线性的,这个平均值会收敛到很像最后一个 1/k 的平均值。观察结果,代表你对它在哪里的最佳猜测 1/(2*k*T)几秒钟前。因此,如果您有其中 2 个,那么您将对它应该在的位置进行 2 个平滑测量。从这些你可以预测平均速度,从任何一个位置你都可以估计到达时间。0

您将不得不尝试使用它来找到适用于您的数据集的两个常量。

关于c# - 迭代平滑位置变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com