9、教程-4复合实体和物体属性

发布时间 2023-07-27 21:34:17作者: gary_123

本教程的目的是通过创建一个具有多个边界对象的实体来更详细地探索物理模拟:一个由两个球体和一个圆柱体组成的哑铃。预期结果如图所示。

将上一个世界另存为compound_solid.wbt

混合实体

通过聚合形状节点,可以构建比我们以前看到的更复杂的实体节点。事实上,实体的物理特性和图形特性都可以由多个“形状”节点组成。此外,每个“形状”节点都可以放置在“姿势”节点中,以便更改其相对位置和方向。组节点也可以用于对几个子节点进行分组。
我们想要实现一个由手柄(圆柱体)和位于手柄两端的两个重物(球体)制成的哑铃。此图显示了实现哑铃所需的实体节点及其子节点。

按照下图创建哑铃,首先创建手柄,而不将其放置在Pose节点中(这样手柄轴将与实体的z轴方向相同)。手柄的长度应为0.1 m,半径应为0.01 m。配重的半径应为0.03 m,细分为2。权重可以在控制柄末端移动,这得益于其“姿势”节点的平移域。

物理属性

本小节的目的是学习如何为实体节点设置一些简单的物理属性。“物理”节点包含与当前刚体(实体)的物理相关的字段。
实体节点的质量由其密度或质量场给定。一次只能指定这两个字段中的一个(另一个应设置为-1)。当指定质量时,它定义了固体的总质量(单位为[kg])。当指定密度时,其值(单位为[kg/m3])乘以边界对象的体积,乘积即为固体的总质量。1000[kg/m³]的密度对应于水的密度(默认值)。

将哑铃的质量设置为2[kg]。未使用密度,应将其设置为-1。

默认情况下,实体节点的质心设置在其原点(由实体的平移场定义)。质心可以使用Physics节点的centerOfMass字段进行修改。质心是相对于实体的原点指定的。

假设其中一个重物比另一个重。沿z轴移动哑铃的质心0.01[m]。

注意,当选择实体时,质心在3D视图中由比表示实体中心的坐标系暗的坐标系表示。

接触点

当两个实体碰撞时,会在碰撞点处创建接触。ContactProperties节点可用于指定所需的接触行为(例如,两个实体之间的摩擦力)。
每个实体都属于其contactMaterial字段引用的材质类别(默认情况下为默认值)。WorldInfo节点有一个contactProperties字段,用于存储contactProperties节点的列表。这些节点允许定义两类实体之间的接触特性。
我们现在想修改哑铃和环境中其他固体之间的摩擦模型。

将哑铃的contactMaterial字段设置为“哑铃”。在“世界信息”节点中,在默认类别和哑铃类别之间添加一个ContactProperties节点。尝试将库仑摩擦力场设置为0,并注意哑铃在地板上滑动(而不是旋转),因为没有施加更多的摩擦力。

basicTimeStep、ERP和CFM

物理模拟的最关键参数存储在WorldInfo节点的basicTimeStep、ERP和CFM字段中。
basicTimeStep字段确定物理步骤的持续时间(以[ms]为单位)。此值越大,模拟越快,模拟的精度就越低。我们建议经常使用Webots的值在8到16之间。
解释ERP和CFM字段的行为更加困难。物理引擎直接使用这些值来确定如何解决约束。默认值是为Webots的常规使用而定义的。我们建议阅读参考手册和ODE(Webots中使用的物理引擎)的文档,以完全理解它们的用途。

次要的物理参数

还有其他物理参数在Webot的常规使用中不太有用,例如physics、WorldInfo和ContactProperties节点的一些字段。

搜索如何在所有对象上添加线性阻尼,如何使用惯性矩阵以及如何使用physicsDisableTime属性。