Dead Reckoning: 在网络游戏中消除延时影响

如何解决FPS/RTS/赛车类游戏的同步问题 算法简述   动作类游戏如何在高延迟下实现同步?不同的客户端网络情况,如何实现延迟补偿?十年前开始关注该问题,转眼十年已过,看到大家还在问这类问题,旧文一篇,略作补充(关于游戏同步相关问题还可以见我写于2005年的另外两篇文章,帧锁定算法 和 网游同步法则): 影子跟随算法由普通DR(dead reckoning)算法发展而来,我将其称为“影子跟随”意再表示算法同步策略的主要思想 阅读详情

原文来自Gamasutra的Dead Reckoning: Latency Hiding for Networked Games,作者是Jesse Aronson。可以通过这个地址http://www.gamasutra.com/features/19970919/aronson_01.htm查看该文章(可能需要先登陆到Gamasutra),或者通过文章名到Google上查找其他转贴。

翻译的不好的地方欢迎指出,我会尽快改进,转贴请注明出处。

 以下是正文部分:

----------------------------------------华丽的分割线------------------------------------------

  

网络游戏的开发人员会很快发现需要处理网络延时的问题,延时就是网络数据包从一台计算机到另外一台计算机上所需要的时间。

对于移动缓慢的游戏,或者类似象棋这样的基于回合制的游戏来说并不是什么大问题。另一方面,如果玩家之间需要快速交互,比如“Twitch”这样的游戏,都会被典型的WAN甚至是LAN延迟所严重的影响。玩家期待联机游戏的表现能够接近于单机游戏。

当前的网络游戏供应商的解决方案大多依赖于专用网段,点对点的延时大概在150到200毫秒之间。专用网络是可行的解决方案,尽管当网络游戏操作是在一个不固定的,响应方式是在标准的网络环境下的时候它可以表现得更好,这时候的延时几乎不可预测并且大多时候会比较大。

很幸运的是,作为一个纳税人,你的美元曾被用来开发一个关于网络游戏的技术方案。美国国防部重金投资于一个用于军事训练的分布式模拟系统,特别是在分布式交互模拟(DIS)协议中,这个协议是在国防部高级研究项目机构(DARPA)的SIMNET项目中研发出来的。

DIS包含了隐藏延时和减少带宽使用的技术,它被称为Dead Reckoning(DR)。DR被广泛的使用,在DARPA的高级分布式模拟架构项目中被扩展成为“可预测性合约”的概念。DIS是做为网络坦克群模拟的环境被创建的,一些DIS的应用和twitch游戏一样使用了常用的特性。

 

DR的概念

DR是复制计算的一种形式,在游戏中每个人参与模拟游戏个体(典型的是交通工具),虽然逼真度很低。基本的DR概念就是预先在一些算法上建立一个协议,每个玩家都可以用来推断游戏中的个体的行为,并且协议也规定当推断算法和实际值的误差是多大的时候进行修正。

DIS下,当一个交通工具或者游戏个体被创建的时候,拥有该个体的计算机向网络上的所有计算机发送该个体的状态协议数据单元(PDU),个体状态的PDU包含了唯一确定该个体的信息;描述了个体当前运动状态的信息,包括位置,速度,加速度和方向;以及如个体伤害程度等其他信息。

最后,个体状态PDU包含了一个标志符,它告诉网络上的其他节点该个体使用的是何种DR算法。当参与分布模拟的其他计算机接收到该PDU的时候,它们创建该类型个体的本地备份。这样,每个网络上节点可以见到该个体,之后,最小的个体状态PDU将会每五秒发送出去。

撇开某些类型的推断算法,开始时发送的单个个体状态PDU会出现在远程终端上,但是它时静止的,只有描绘它的更新参数的附加PDU被发送的时候才会移动。这样,远程个体的运动看起来会很不稳定,在下一个PDU到达之前它们是静止的,而当新的PDU到达的时候又将发生位置上的跳动。减少PDU发送间隔将会减少这种不稳定感,但是这种方法在某些有着大量个体的关卡中,会极快的消耗可用的网络带宽。

DR中,接收到第一个个体状态PDU的时候,网络上的每个节点都开始使用约定的DR算法使该个体开始移动。该个体以一种可预测的方式持续移动,在所有的节点上,它的路径都使一致的同步的,也不需要更多的网络通信。

当然模拟个体并不总是以可预测的方式移动,玩家随时移动控制杆来操纵它,它就背离了平滑的,算法可以定义的一个路径。在DIS中,拥有该个体的计算机将会去检测和操作。

个体的拥有者记住最后一次发送PDU的时间,同时也基于这个PDU运行DR算法,那么它就拥有一个最新值的拷贝,正如网络上的其他点所看到的。

拥有者的模拟将DR值和玩家所控制的个体的真实状态进行比较,如果DR值和真实值之间的差距超过了DR协议所规定的极限,那么将把新的个体状态PDU发送给网络上的其他节点。所有的节点根据最新的个体状态PDU值更新它们的本地拷贝,DR就从新的数据点重新开始。

 

上图展示了DR的一个例子。在时间T0的时候,图左的一个飞船模拟器发送了第一个PDU告知网络上其他所有计算机飞船的存在和位置。这时,所有的计算机同步了飞船的位置。从这个点之后,其他所有计算机开始显示飞船,并根据协议算法让它向前移动。如虚线所示。

飞船的拥有者,基于玩家的输入(比如摇杆)来移动飞船,如左边的红线所示,而此时网络上的其他玩家看到的移动路线按虚线所示。当DR算法的位置和真实位置保持在预定义的一个阀值之间的时候,就不向网络上发送任何别的信息。节省网络带宽的同时其他玩家也可以基于DR算法看到一个平滑的移动路径。

然而,拥有者和网络上其他的模拟者之间始终存在着很微小的差异。当这个差异变大,在T1时刻超过预定的DR阀值的时候,就向外发送新的PDU包。这时,网络上的其他计算机马上根据新的PDU包同步它们本地的飞船位置,并重置DR算法,如T1’所示。DR算法重新开始运行,从T1’开始往后。

从图中我们可以很容易看出,过大的DR阀值会导致当远程终端收到新的PDU包的时候做一个明显的剧烈的跳动。从另一个角度来说,小的DR阀值会导致需要发送更多的PDU包。我们应该根据应用类型来选择最优的DR阀值。

DIS模拟也很典型的应用了平滑算法,使得个体在从DR位置更新到新的真实位置的时候的跳动效果减小。DIS模拟象位置一样应用了DR来面向移动。方向推断使用了另外一些算法,和位置推断有所不同,但是它们都是基于同样的原理。

 

DR的算法

下一步,我们来看一下DIS所实现的真正的DR算法。有九种标准算法,其中最有效的是两种,其他的大致相同,只不过使用了不一样的坐标系。我们来看一下最典型的三种算法。

位置1 = 位置0

位置1 = 位置0 + 速度 × (T1 – T0)

位置1 = 位置0 + 速度 × (T1 – T0)+ 1/2 × 加速度 × (T1 – T0)平方

以上就是DIS的三种DR算法。它们都基于最基本的物理定律。第一个算法把位置保持在T0时刻的个体状态PDU中所指定的位置。第二个算法根据已知的T0时的位置推断它向前的移动。第三种算法也从个体的最后已知位置向前推测,但是在推测种同时使用了速度和加速度。

这三种算法都很好的推测了位置。DIS中使用的更多精密复杂的算法也考虑了个体的方向(卷动,投掷,航向),甚至推测了个体的部分移动。比如,一辆坦克在向前巡逻的时候它的炮台向后扫描,我们可以用DR算法同时推测它的位置和坦克上的炮台的角度。

 

DR的应用

L1(最下方)显示了一个程序段,它从网络上的别的程序接收个体状态PDU,然后把已知的都显示出来,使用上面所提到的第二个DR算法。代码是C++风格的,类的构造,程序的初始化以及其他的细节没有在这里显示。

程序的主循环首先检查了是否有新的网络可用包。IDS使用UDP来通信,所以这里我们使用一个类JAVA的UDP socket类来存取UDP包。下一步,初始的包被解析并转换成个体状态UDP对象,其中包含了远程个体的位置,速度和特性等信息。

如果这个个体已经是已知的(比如TankList中已经存在该ID),那它的位置和速度将被更新。否则一个将在TankList中添加一个新的单位。接收时间也将被储存在远程移动物体表中(ctime是取得当前时间的一个函数);这是DR的要求。

当接收到新的包的时候,使用DR对TankList中的所有个体的位置做更新,然后显示在屏幕上。DR并不重置接收位置,因为它可能在一段时间之后的DR运算中被使用到。

L2(最下方)显示了一段用于发送模拟坦克信息的程序。它也遵守了DR的规则。程序基于用户摇杆输入不断的更新myTank。每次更新之后,它检查差值是否超过了DR阀值。如果超过,那就发送新的PDU来描绘新的状态。程序在最开始发送了一个个体状态PDU以使得网络上的其他计算机知道myTank的存在,程序必须记录最后发送的状态信息以及发送的时间。

 

DR的扩展

DIS主要使用DR来推测车辆的位置和方向,它也通过多项式来实现。DIS应用扩展了DR算法,允许推测车辆的可动部分(比如坦克上的炮台)。

DARPA ADS架构研究验证了DR的价值,拓展了原理以应用于网络对象的所有属性和推测的更大类别。使用这些拓展定义的推测被认为是预测性协议。

比如在一个坦克战役模拟中,某个被称为“沿路行驶到特定点”的预测性协议是可以被定义的。在这个预测性协议下,计算机模拟一辆坦克只需要发送关于车辆的一条信息:这是路上的某个特定点,而它正在沿路往前走,直到某个指定的点。

网络上的其他计算机都认同“沿路行驶”(比如你在右边行驶)的含义,并且所有的计算机都知道坦克所在的路的定义,那么它们就可以创建坦克的连续视图,而不需要进行任何的网络通信。当然,如果坦克偏离了它原计划的路径或者改变状态到其他任意一条不可预测的路径上,新的坦克状态信息将被发送到网络上。附加的预测性协议可以定义什么时候坦克关闭或者打开传感器,什么时候发送无线电报告,或者坦克行为的其他属性。

分布式对象计算的JAVA模型的出现允许更精确的预测性协议。在DIS模型中,所有的DR算法是在编译器被定义的,对于模拟来说没有办法在运行期去定义新的DR算法。使用类似JAVA这样的语言,模拟就可以随意通过网络发布更新的预测性协议。

 

其他

DR和预测性协议为网络模拟和游戏提供了两个好处。它们隐藏了网络固有的延时,也带来了另一个好处,就是通过允许模拟器仅在真正需要的时候才传输信息,减少了网络通信量。在DIS中,DR也允许通过更佳效果的通信方式(比如UDP)来传输个体状态信息,相比于代价昂贵的,保证可靠传输的机制比如TCP/IP。这是因为DR可以用来平滑丢包带来的缺口,即使丢失了一些网络同步包。

DR并不是无代价的。它需要网络上的每台计算机运行一个算法来推测模拟关卡中的每一个个体。如果模拟环境中的所有的个体同时表现得不可预测,DR就收效甚微了。然而,DR在DIS这样的大关卡和众多的计算机产生的个体中提供了重要的优势。在这种情况下,如果处理器周期能被交替使用以减少网络使用和明显的延时,DR可以成为一种非常有效的最佳技术。

Jesse Aronson是Science Application International Corp. 的首席软件架构师。他积极参与了国防部次世代的建模和模拟的架构定义,也是当前一个项目的技术总监,该项目将创建一个由数百台计算机模拟数千个移动对象的网络训练模拟环境。可以通过jaronson@std.saic.com联系他。

L1: 使用DR的接收模拟

main(){
  //接收模拟
  DataGramSocket socket1;
  DataGramPacket packet1;
  EntityStatePDU espdu1;
  TankList remoteTanks;
  int i;

// 初始化代码,开启socket等等

// ... (其它未显示)

// 进入循环,接收并处理远程信息

while(1){
// 接收新的包

if (socket1.packetAvailable()){ #1
 socket1.receive(&packet1);
 espdu1.convertFromRawPacket(&packet1); //#2
 if (TankList.member(espdu1.entityID()) //#3
   TankList.update(espdu1,ctime());
 else
   TankList.addEntity(espdu1,ctime());
 }
...

L2: 使用DR的发送模拟

main(){
  //发送模拟
  Joystick stick1;
  DataGramSocket socket1;
  EntityStatePDU espdu1;
  tank myTank(initPosition);
  int i;

  
    
  

  
    
  
  // 开始时记录信息并发送
  espdu1.initializeWithPosition(myTank.Position());
  socket1.send(espdu1.convertToRawPacket());
  lastStateSent = myTank;
  lastTimeSent = ctime();

  
    
  

  
    
  
  while(1){
    // 根据摇杆更新坦克信息
    myTank.calcNewPosition(JoyStick.read());

  
    
  

  
    
  
    // 计算DR位置
    myTank.setDRposition(lastStateSent.position() + 
        lastStateSent.velocity() * (ctime() - lastTimeSent);
               
    // 仅当超过阀值时发送
    if (abs(myTank.position() - lastStateSent.position() > thresh){
      socket1.send(espdu1.convertToRawPacket());
      lastStateSent = myTank;
      lastTimeSent = ctime();
      }
    }

}

Unity3D 大型游戏 最后一站 源码 部分重点 英雄玩家同步移动(14) 上节课,我们讲到英雄实体的状态机,每个实体都有自己不同的状态。那么今天我们主要具体讲讲Run状态下的与服务器同步移动。 在实时战斗游戏中,同步一直是游戏客户端和服务器编程人员最头痛的,那么怎么样才能做到所有的玩家画面能够同步。 这里有好多种方法,大家可以好好看看这篇博客: http://dev.gameres.com/Program/Abstract/DeadReckoning.htm 这里 阅读详情

相关推荐

Dead Reckoning技术在网络游戏中的应用

我写的论文,关于网络游戏中网络中的算法

Dead Reckoning: Latency Hiding for Networked Games

Dead Reckoning: Latency Hiding for Networked Games by Jesse Aronson [Programming]             September 19, 1997       Pro

nefeithu123的专栏 1076

论文研究-DeadReckoning技术在网络游戏中的应用.pdf

网络延迟成为实时性要求较高的网络游戏的一个瓶颈,Dead Reckoning技术避免了高网络延迟对该类游戏的冲击。Dead Reckoning主要包括预测技术和平滑处理技术。介绍了基于物理运动学算法的预测技术以及基于Cubic Splines算法的平滑处理技术,并给出了Dead Reckoning在网络游戏中应用的具体算法以及该算法的相应实例。

网游同步算法之导航推测(Dead Reckoning)算法

在了解该算法前,我们先来谈谈该算法的一些背景资料。大家都知道,在网络传输的时候,延迟现象是很普遍的,而在基于Server/Client结构下的网络游戏的同步也就成了很头疼的问题,在保证客户端响应用户本地指令流畅的情况下,没法有效的保证的同步的及时性。同样,在军方也有类似的事情发生,即使是同一LAN里面的机器,也会因为传输的延迟,导致一些运算的失误,介于此,美国国防部投入了大量的资金用于研究一种比较

czh3642210的专栏 7491

matlab坐标正算代码-Dead-Reckoning:姿态确定算法的同步计算在STM32BluePill上开发

matlab坐标正算代码嵌入式系统中的位置跟踪算法和同步计算 Dead-Reckoning是一个可以在由三个STM32F103微控制器组成的系统上运行的存储库,可以通过对9轴加速度计数据使用传感器融合算法来确定用户的位置和方向。 该项目的预期应用是用于航空导航系统的方向确定,尤其是在推力矢量自主控制系统中。 通过将它们与系统在x,y和z方向上的实际运动进行比较,我测试了传感器融合和噪声调整算法的准确性。 传感器融合主要通过Madgwick的Quarternion融合算法完成。 但是,此存储库还包含用于位置跟踪的基本卡尔曼滤波器算法。 为了为关键任务应用程序增加额外的冗余层,多个STM32和加速度计将同步运行相同的计算,并且将使用拜占庭通用算法和加权平均轮询启发的方法来解决差异。 项目概况 I2C通讯 IMU校准 传感器融合实施 同步算法 三重冗余轮询算法 使用的技术 I2C通讯协议 Sigrok逻辑分析仪 GDB-GNU项目调试器 STM32低级开发指南 I2C通讯 设置 我决定以此为契机,以了解和实施I2C通信。 I2C的基本功能与此微控制器相同。 首先,我将RCC寄存器设置为将时钟

LSCM最小二乘保角参数化

LSCM最小二乘保角参数化 最小二乘思想 已知一组点的数据(x,y) x x1x_1x1​ x2x_2x2​ x3x_3x3​ … xnx_nxn​ y y1y_1y1​ y2y_2y2​ y3y_3y3​ … yny_nyn​ 可以近似为线性关系 y=ax+by=ax+by=ax+b ,目标为确定常数 aaa , bbb ; 解法:找到 aaa , bbb ,使得所有 yiy_iyi​ 与 axi+bax_i+baxi​+b 偏差的平方和 Q=∑i=1n(yi−axi−b)2 Q=\s

weixin_49732532的博客 4253

网络游戏实时动作同步方案(1)

<br />MMORPG不同,实时动作型网络游戏追求操作。<br /><br />和MMORPG不同,实时动作型网络游戏追求操作的响应要求极高(<150ms)。<br />动作型网络游戏的制作人希望做到单机游戏的体验,网络游戏的服务。<br />  <br />  网络指令在多客户端间的同步算法,从原理上来说,围绕两种特性的取舍而定:<br />  * 牺牲局部实时性:某程度的互等待,保证各客户端间指令集在指定时间段一致。<br />  * 牺牲局部一致性:容许客户端本机先行模拟,等待后续指令到达纠正。(D

mycoolmc2010的专栏 2114

芯片硅前验证技术与驱动工程师实战指南

硅前验证是芯片开发流程中的关键环节,通过pre-silicon simulation等技术手段在流片前验证设计正确性。其核心技术包括软件仿真、FPGA原型验证和硬件仿真器解决方案,涉及Linux驱动开发、芯片架构理解和波形分析等核心技能。作为连接芯片设计与系统集成的桥梁,硅前验证能早期发现设计缺陷,节省数百万美元流片成本。以Cadence Palladium为代表的硬件仿真器,通过专用服务器系统实现比纯软件方案快100-1000倍的仿真速度,为驱动工程师提供完整的外设模型验证环境。掌握硅前验证技术可显著提升

weixin_42522857的博客 324

在网络游戏中消除延时影响

原文来自Gamasutra的Dead Reckoning: Latency Hiding for Networked Games作者:Jesse Aronson原文链接:http://www.gamasutra.com/features/19970919/aronson_01.htm转贴请注明出处。网络游戏的开发人员会很快发现需要处理网络延时的问题,延时就是网络数据包从一台计算机到另外一台计算机上

lryain的专栏 1180

华为Watch的ECG功能技术分析

华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。采用医疗级ECG模拟前端芯片(AFE),如TI(德州仪器)的ADS1292R等,支持低噪声、高采样率(通常≥200Hz)。结合PPG(光学心率)数据交叉验证,提高检测可靠性(如ECG和PPG心率不一致时触发警告)。通过RR间期变异性判断心律是否规则,识别房颤(AFib)的典型特征(如不规则不规则心律)。结合加速度计数据,识别手臂运动导致的信号失真,动态调整算法参数。

xu_wenming的博客 6444

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8259

影子跟随算法

算法简述   动作类游戏如何在高延迟下实现同步?不同的客户端网络情况,如何实现延迟补偿?十年前开始关注该问题,转眼十年已过,看到大家还在问这类问题,旧文一篇,略作补充(关于游戏同步相关问题还可以见我写于2005年的另外两篇文章,帧锁定算法 和 网游同步法则): 影子跟随算法由普通DR(dead reckoning)算法发展而来,我将其称为“影子跟随”意再表示算法同步策

u014659211的专栏 1213

Open5GS实战指南:Ubuntu 22.04环境下的5G核心网快速部署

本文提供Open5GS在Ubuntu 22.04环境下部署5G核心网的实战指南,涵盖环境准备、MongoDB配置、核心组件安装、WebUI部署及网络调优等关键步骤。通过详细的安装教程和常见问题解决方案,帮助开发者快速搭建开源5G核心网测试环境。

weixin_29202213的博客 538

游戏网络同步——dead reckoning

网游中,玩家的位置同步经常会用到dead reckoning算法,中文翻译叫导航推测,下文简称DR。 DR提供了隐藏延时和减少带宽的方法。DR在本地模拟其他联网玩家状态(主要是位置信息),减少网络带宽消耗的同时尽可能的还原实际情况。 在飞机游戏中DR的一个例子: 1. 飞机的运动速度都是固定的,两台游戏机联机玩,分别是A和B; 2. 对于A和B来说,是否需要发送PDU(protocol dat

xak的专栏 5339

汇川AM系列后台安全管理与用户权限的设置方法

汇川AM系列后台安全管理与用户权限的设置方法。

viixin的博客 8457

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

DR算法

在飞机游戏中DR的一个例子: 1. 飞机的运动速度都是固定的,两台游戏机联机玩,分别是A和B; 2. 对于A和B来说,是否需要发送PDU(protocoldataunit,协议数据)是通过阈值控制的。实际运动位置是P1,而DR算法模拟得到的运动位置是P1′,如果P1-P1′大于预先设置的阈值就发送PDU通知对方。 3. 每次收到对方的PDU,则更新对方的位置。 4. 在没有收到PDU的时候,需要模...

格物致知 5181

SAP在sap我定义了三个帐套 T9 SGD,I9 CNY, C9 CMY 想使用三个不同的币种,那么 我在定义和激活非主分类账时 如何定义各自的币种 ?

摘要:在SAP中为非主分类账(T9、I9、C9)配置不同币种(SGD、CNY、MYR),需通过三个步骤实现:1)在FINSC_LEDGER中定义分类账货币类型;2)在OB22中为公司代码0919配置平行货币;3)在"定义和激活非主分类账"中关联币种。关键注意事项包括维护自定义货币类型(以Y/Z开头)、设置OB08汇率以及独立汇率评估。完成后可通过FB50测试凭证和FAGLL03验证各账套的币种金额显示。

金牌架构师 1012

Dead reckoning的改进模型。

今天在玩一款网络游戏的时候,发现一个问题,当用键盘操作主角的时候。 同时按住两个方向键,人物并不是往那两个方向的夹角走直线,而是在围绕一个点做圆周 运动,对于这种运动方式,如果用传统的dead reckoning模型,其方向将不停的在变,则 会带来大量的网络流量,那么如何解决这样的问题呢。低头沉思若干时间,终于恍然大悟。 首先用数学模型来描叙传统的dead reckoning模型: s(t) =

tarkey的专栏 3645

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

什么是航位推算(Dead Reckoning )

只有同时接收三到四个GPS / GNSS卫星的信号才能实现精确的GPS / GNSS定位。当仅依靠GPS / GNSS定位时,可能会出现位置精度降低或丢失的情况。例如,当车辆在无法接收GPS / GNSS信号的区域(隧道或地下通道)或发生非常强烈的多径传播(被高层玻璃覆盖的建筑物环绕的区域)中移动时。为了克服GPS / GNSS定位的这些限制,推测航位推算解决方案是有用的。即使在仅GPS / GN...

Zzt的博客 3万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[转]网游同步算法之导航推测(Dead Reckoning)算法

在了解该算法前,我们先来谈谈该算法的一些背景资料。大家都知道,在网络传输的时候,延迟现象是非常普遍的,而在基于Server/Client结构下  的网络游戏的同步也就成了非常头疼的问题,在确保客户端响应用户本地指令流畅的情况下,没法有效的确保的同步的及时性。同样,在军方也有类似的事情发生,  即使是同一LAN里面的机器,也会因为传输的延迟,导致一些运算的失误,介于此,美国国防部投入了大量的资金

qq_29804289的博客 843

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

延迟补偿在C/S架构游戏协议设计和优化中的应用

这篇文章介绍了cs这样的第一人称射击游戏中如何实现延迟补偿。非第一人称设计游戏设计也可以参考其中一些思想 原文地址: https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization

buck84的专栏 1万+

射击网游中网络时延的处理

<br />射击网游中网络时延的处理<br /><br /> (金庆的专栏)<br /><br /> 网游中的网络时延是无法避免的事. <br /> 例如移动, 客户端发出命令到收到服务器的确认会有100ms的时延,<br /> 如果客户端等待100ms后再移动, 操作性将会非常差.<br /> 一般是不等服务器确认, 先移动起来.<br /><br /> 对于攻击, 同样也有时延.<br /> 一般的PK网游中,攻击速度很慢,大概1s发一次攻击,<br /> 攻击伤害结果延时100ms没有

金庆的专栏 2421

++代码实现 感知机的原理_Dead reckoning-航位推算基本原理及代码实现-2

(图片来自udacity)上次写到了IMU的误差为何会随着时间累积。今天继续写通过IMU数据的累积实现简单的航位推算。2.2 航位推算简单的原理航位推算,就是像第一篇文章中的 不停的累积, 一直到下角标为n和n-1。之前举得例子是通过角度累计(也叫integral),将角度换成位置[x,y,z]也是一样的套路。比如 (1) (2) (3)很简单把。因为毕竟是简单的例子嘛~ ●▽●那么...

weixin_36028243的博客 782

5. ROS编程入门--航迹推算(dead reckoning)

这篇教程主要是测量机器人的里程计误差的,让机器人重复的走固定的路线,在这里我让机器人走正方形,比较机器人的起始位置(理想状态是重合的) 以及 局部里程计(机器人自身测算得)和全局里程计的的位置(定位系统)。

探索的博客 1万+
上一篇: 对论坛中有关数据类型转换的整理
下一篇: XML基础
amdk_7
博客等级 码龄22年 12粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值