问题标签 [dead-reckoning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
10230 浏览

networking - 处理网络游戏中的延迟

我正在考虑制作一款网络游戏。我对此有点陌生,并且已经遇到了很多问题,试图为航位推算和网络延迟制定一个好的计划,所以我很想看到一些关于这个主题的优秀文献。我将描述我考虑过的方法。

最初,我只是将玩家的输入发送到服务器,在那里进行模拟,然后将游戏状态的变化广播给所有玩家。这使得作弊变得困难,但在高延迟情况下,事情有点难以控制,因为你不会立即看到自己行为的结果。

这篇 GamaSutra 文章有一个解决方案,可以通过在客户端上进行模拟来节省带宽并使本地输入看起来很流畅,但它似乎将防作弊功能扔到了窗外。此外,当玩家开始操纵环境、推动岩石等时,我不确定该怎么做。这些以前中立的对象将暂时成为客户端需要发送 PDU 的对象,或者可能是多个玩家同时发送的对象。谁的 PDU 会赢?每个玩家何时会停止对对象进行双重跟踪(与航位推算的版本进行比较)?天堂禁止两个玩家进行相扑比赛(例如开始互相推搡)。

这个 gamedev.net 位显示 gamasutra 解决方案不足,但描述了一种不同的方法,它并不能真正解决我的协作巨石推动示例。我发现的大多数其他东西都是针对射手的。我很想看到一些更适合像 SNES Zelda 这样玩的游戏,但涉及更多的物理/动力。

  • 注意:我不是在这里询问物理模拟——其他库已经涵盖了。尽管网络延迟,但只是使游戏流畅和反应灵敏的策略。
0 投票
4 回答
834 浏览

great-circle - 如果我在这里并朝着那里前进并且我已经覆盖了这么多领域,那么我在哪里?

我需要帮助编写以下方法:

所有位置都在哪里(纬度,经度)

我意识到地球有不同的模型(WGS-84,GRS-80,...),考虑到地球是椭球体这一事实。就我的目的而言,假设一个完美的球体足够好,这种精度水平是不必要的。

更新

考虑到一些回应,我正在微调我的问题。

benjismith认为我的问题无法回答,因为地球上的点之间有不止一条最短路径。他以选票的形式得到了很多支持,所以我想我有些不明白,因为我不同意。

球体上任意两个位置的中点是圆弧。

我承认当两点完全相反时这是真的。我的意思是这两个点虽然都留在球体的表面上,但彼此之间的距离不能再远了。在这种情况下,有无限数量的等距路径连接两个点。然而,这是一个极端情况,而不是规则。在所有其他情况下,绝大多数情况下,只有一条最短路径。

举例说明:如果你握住一根穿过两点的绳子,并把它拉紧,绳子会不会只有一个可能的路径(除了已经讨论过的边缘情况)?

现在,在问这个问题之前,获得两点和航向之间的距离不是问题。

我想我应该问的是以下是否有效:

如果我沿着这条路走,我会沿着大圆、恒向线……还是完全偏离?(我现在知道这些术语是因为 Drew Hall 的回答。)

0 投票
2 回答
1412 浏览

language-agnostic - 涉及转弯时如何进行航位推算?

航位推算是根据先前确定的位置估计一个人的当前位置并根据经过时间和航向的已知或估计速度推进该位置的过程。” (维基百科

我目前正在实现一个简单的服务器,该服务器利用航位推算优化,通过对客户端和服务器进行逻辑假设来最小化所需的更新。

用户控制的物体可以说是在转动,也可以说是不转动。这提出了航位推算的问题(我的看法。)

例如,假设您有由 [位置、速度、转向:左/右/否] 定义的时间点A。现在你想要在t时间后点B。不转动时,新位置很容易推断。由此产生的方向也很容易推断。但是当这两个因素结合在一起时呢?当物体翻转t时间时,速度的方向将沿曲线变化。

我是否应该采用另一种解决方案(例如让客户端为每个新方向发送更新,而不仅仅是告诉服务器“我现在向左转”)?

顺便说一下,为了简单起见,这是在 2D 空间中。

0 投票
1 回答
3371 浏览

java - GeoTools - 如何使用 GeoTools 类进行航位推算和课程计算

我目前正在使用 GeoTools 工具包对船舶数据进行计算,例如计算两个 lon/lat 点之间的大圆距离。我还有两个需要满足的要求,但我不确定在 GeoTools 中的哪里可以找到进行此类计算的类。

要求 #1: 计算移动船舶的航位推算位置。

输入值:

  • 当前经度
  • 当前纬度
  • 当前速度(可以很容易地转换为距离,给定时间'T')
  • 当前课程

预期输出:

  • 经过时间“T”后估计的经度/纬度位置

要求 #2: 计算从位置“A”到位置“B”的路线。

输入值:

  • 经度'A'
  • 纬度“A”
  • 经度'B'
  • 纬度“B”

预期输出:

  • 直接从“A”指向“B”的课程

问题

任何人都可以指导我参加 GeoTools 中能够执行这些计算的课程吗?GeoTools 中的课程数量之多让我不知所措,而且我似乎找不到我需要做的事情。

0 投票
1 回答
1224 浏览

multiplayer - 在多人游戏中同步 AI NPC

我已经开始开发一个小型多人赛车游戏,显然我们正在使用半条命、雷神之锤和虚幻引擎使用的所有玩家预测、航位推算和延迟补偿技术——但是我们计划在游戏中也有几十辆人工智能汽车.

最初我们决定简单地向所有客户端发送一个随机种子,他们将计算 AI 位置等 - 但是,我们遇到了以下问题:

  1. 所有客户都会收到运行人工智能汽车的种子
  2. 客户端只会收到他们视线内玩家的动作更新
  3. 玩家 A 撞上 NPC 汽车
  4. 玩家 B 进入玩家 A 的框架

现在由于玩家 B 没有收到玩家 A 的移动,他会假设 AI 车仍在正常移动,并且不会计算玩家 A 撞到其中一辆汽车的事实……

长话短说 - 你如何同步受玩家影响的 AI 单位?

0 投票
1 回答
2387 浏览

android - 将陀螺仪读数转换为度数

我正在尝试使用 Android 设备上的陀螺仪在汽车转弯时找到汽车的旋转角度。因此,想象一辆汽车以 168 角的方位行驶并在道路上右转。现在我需要使用陀螺仪计算新的航向或方位角。但是我收到的值是以弧度/秒为单位的。我尝试在时间段 dT 内整合这些值。但这些值甚至不接近实际角度。我认为旋转是参考设备,我试图将值转换为真实的世界坐标。但我没有得到一个好的算法。

有人可以帮助我或指出正确的资源来解决这个问题吗?

编辑:我忘了在问题中提到,我试图在没有 GPS 的情况下这样做,(在 GPS 失败的情况下。)我试图避免传感器融合,因为我打算只使用陀螺仪,因为我正在寻找一个甚至可以在 Android 平台之外运行的解决方案。我什至正在与 OBD 交谈以获取车辆的实际速度。所以我只是想从任何客户端收集陀螺仪数据并在后端处理它并确定车辆的转向

0 投票
1 回答
508 浏览

opengl - 如何推断旋转矩阵值?

我正在使用 chai3d api,它使用 3x3 浮动 pt 矩阵在我的虚拟世界中存储对象方向。

在服务器定期更新之后,我想在客户端预测这些方向,以便我拥有一致的虚拟图形世界。

我通过发送位置和速度值来预测对象(例如 opengl 立方体)的位置。

方向的角速度与位置的速度相同吗?

如果是,我如何从这个 3x3 矩阵计算角速度并将其用于外推?

0 投票
1 回答
668 浏览

networking - 让航位推算进入我的游戏的最简单方法是什么?

我有一个游戏,其中有许多精灵在屏幕上飞来飞去,用户用箭头键/WASD 控制其中一个。

我通过网络进行了设置,因此主机游戏是用户控制的游戏,客户端游戏没有用户输入,它只是模仿他在主机游戏中发生的一切。

我需要做的就是在客户端游戏中为用户控制的精灵实现航位推算。它可以向上、向下、向左和向右 4 个方向移动。

最简单的方法是什么/我该怎么做?

ps 我的主机游戏使用 WinSock 通过 UDP 套接字将数据发送到客户端。

0 投票
1 回答
2290 浏览

ios - iOS 航位推算

我正在开发一个 iOS 项目,该项目需要我在 GPS 不可用时进行简单的航位推算。我收到了来自各种手机的大量测量数据,其中包括以下内容:

  1. GPS 数据(x、y、z、航向、速度)(如果可用)
  2. 加速度计(用户加速度 x、y、z)
  3. 陀螺仪(旋转x、y、z)

我想计算时间序列中丢失的 GPS 位置。我了解如何根据最后的 GPS 位置和课程值来预测位置,但这给了我很大的错误。我的问题是,如果我将加速度计和陀螺仪数据结合起来,是否可以获得更好的结果。我了解如何整合加速度计值来获取速度信息,但我不确定如何使用陀螺仪数据。任何帮助将不胜感激。

0 投票
0 回答
431 浏览

android - 步行时加速度计传感器的世界参考值

我一直在尝试为 Android 开发行人航位推算应用程序,在处理了步数检测和步长组件之后,我决定解决方向确定问题。

在偶然发现了几篇关于坐标 转换的帖子(甚至与经常回答的人聊天之后,我的结果逐渐好转,但仍然有一些困扰我的事情。

本实验:

我往北走,转身又往南走。向 West 重复该过程,然后向 East 重复该过程。

问题:

  1. 我预计,在沿多个方向直行时,X 和 Y 值的值会随着脚步声而振荡,并且始终具有相对稳定的 Z 值。相反,Y 值以这种方式运行,而Z 值具有其预期行为。怎么来的?这与我不使用remapCoordinates()有什么关系吗?(见图1)

  2. 我预计角度图会在 180º 和 -180º 左右跳跃,但为什么它们也会在 35º 左右跳跃?(见图2)

笔记:

  • 我正在使用重力和磁力计值来计算旋转矩阵,并使用 OpenGL 的multiplyMV()将其相乘;
  • 我没有使用remapCoordinates(),因为我认为我不需要:手机在我的口袋里是直立的(Y 指向上/下,Z 通常向前)并且应该向前和向后移动 45º,在最坏的情况下;
  • 方位角值似乎没问题,并且没有问题 2 中描述的振荡。(参见图 3)

图表:

世界参考重力加速度 (蓝色为 X,红色为 Y,绿色为 Z)世界参考系加速度

世界参考重力角 (蓝色为 atan2(Y/X),红色为 atan2(Z/Y),绿色为 atan2(Z/X))来自世界坐标的 Atan2 值

方向值 (蓝色是方位角,红色是俯仰,绿色是滚动)方向值