ODE仿真引擎使用(八)

  使用ODE,必须记住参数,ERP(误差减少参数)和CFM(约束力混合)。
1. ERP(误差减少参数)
   ERP是一个修正联合误差的参数。随着仿真的不断重复,由于各种内部逼近,使得关节误差不断增大。ERP可以修复错误。该值必须设置在0和1之间。0不修复错误,1通过下一步修复错误。典型值在0.1到0.8之间,默认值是0.2。不建议将ERP设置为1。如果你想设置ERP,请使用以下API。这个API影响了整个世界。
   dWorldSetERP (dWorldID, dReal erp)
   设置一个全球ERP。参数erp必须设置在0.0和1.0之间。请在上一章程序中插入dWorldSetERP (world, 0.0)到dWorldSetGravity()下面。如果将ERP设置为0,则上面的机器人会像上面的图一样被破坏。
2. 约束力混合
   接下来,解释约束力混合(CFM),ODE的另一个具体参数,它改变了关节的刚度。约束有两种类型,硬约束和软约束。硬约束是必须遵守的约束。而软约束则是不那么硬的约束。有些违规是可以允许的。为了控制约束,ODE使用CFM参数。如果将CFM设置为0,则应用硬约束,则CFM的值越大,则软约束越多。
   此外,ODE使用与约束含义相同的关节。硬约束意味着关节是一个完美的关节。也就是说,锚点的位置和关节轴的位置是一致的。换句话说,关节是硬的。软约束意味着关节不是完美的。换句话说,关节是灵活的。
   您可以使用ERP和CFM模拟弹簧和阻尼系统。弹簧和减震器系统经常被用来作为人形脚和地面之间的模型。请阅读ODE用户手册。
   接下来,我将解释如何使用CFM。如果你想设置CFM。请使用以下API。然而,这个API适用于世界上所有的接口。对于单精度,CFM的默认值是1E-5(10^-5),对于精度,该值是1E-10(10^-5)。
   dWorldSetCFM (dWorldID, dReal cfm)
   设置一个全局CFM。让我们使用CFM。请在上一章程序中插入dWorldSetERP()下面的dWorldSetCFM()。CFM改变了关节的柔软度。如果您想将值设置为0,在这种情况下,这是一个硬约束。不要将CFM设置为负值,因为系统将变得不稳定。所以请不要这样做。此外,CFM正在努力稳定仿真。所以,系统不是不稳定的,增加CFM。然而,关节会变软。推荐值不大于1E-3(10^-3)。
3、How To Use ERP and CFM
  ERP和CFM可以独立设置在多个节点上。可设置在接触关节、关节限位等各种位置,以控制关节的海绵度和弹性度(或关节限位)。如果CFM设置为0,则约束将很难实现。如果将CFM设置为正值,则可能通过“推动它”来违反约束(例如,对于接触约束,将两个接触对象强制放在一起)。换句话说,约束将是软的,并且随着CFM的增加,软约束将增加。这里实际发生的是,约束可以被一个与CFM成比例的数量乘以强制约束所需的恢复力。注意,将CFM设置为负值可能会产生不良的影响,比如不稳定性。不要这样做。
  通过调整ERP和CFM的数值,可以达到各种效果。例如,您可以模拟弹性约束,即两个物体像由弹簧连接一样振动。或者你可以模拟更多的海绵约束,没有振荡。事实上,ERP和CFM可以被选择为与任何期望的弹簧和阻尼常数具有相同的效果。如果你有一个弹簧常数kp和阻尼常数kd,那么相应的ODE常数是:
   ERP = hkp/(hkp + kd)
   CFM = 1/(hkp + kd)
   其中h为步长。这些数值将产生与用隐式一阶积分模拟弹簧-阻尼系统相同的效果。
   增加循环流化床模型,特别是全局循环流化床模型,可以减少仿真中的数值误差。如果系统近似奇异,则可以显著提高稳定性。事实上,如果该体系表现不佳,首先要做的事情之一就是增加全局CFM。

猜你喜欢

转载自www.cnblogs.com/zhaochenliang/p/12286309.html