物理 (Physics)

Unity 的一大优势是其运行非常良好的物理仿真。它基于 NVIDIA PhysX 引擎,该引擎已通过 Unity API 进行了扩展。

Unity 引擎能够仿真包含许多网格和移动对象的非常大型的系统。这与非常逼真且出色的实时渲染相结合。realvirtual.io 的方法基于物理运动和运动学运动能力的结合。在某些情况下,使用物理运动是有利的,而在其他情况下,则建议使用纯运动学运动。Unity 和 realvirtual.io 的优势在于我们可以将两个世界结合起来,以获得非常逼真、强大,同时也稳定且准确的模型。

ℹ️

如果您需要非常高质量的物理仿真,包括多接触仿真和高精度动力学,您还可以使用 realvirtual.io 支持的 AGX Dynamics for Unity

物理运动和运动学运动 (Physical and kinematic movements)

可移动单元的自由物理运动 (Free physical movements of movable units)

在自动化系统中,经常需要自由移动的对象。我们在 realvirtual.io 中将此类对象称为 MU (可移动单元)。MUs 是传送带上的货物或工件载体上的对象,通常是在生产系统的数字孪生中移动的产品。物理运动意味着这些 MU 根据物理碰撞、力和重力移动。就像在现实世界中一样。这使得行为非常逼真,并考虑到了 MU 与环境之间的所有碰撞,而无需编写任何特殊的运动或行为逻辑。在 Unity 中,通过 Unity Physics Engine 仿真的所有内容都必须附加一个 RigidBody 组件。

在 realvirtual.io 中,Source(参见 Source 部分)创建 MUs。创建 MU 后,物理属性如下所示:

重力开启且 IsKinematic 关闭的 MU

如您所见,Use Gravity 已启用,Is Kinematic 属性已关闭。

Is Kinematic 关闭(false)意味着对象基于碰撞和物理力自由移动。

TransportSurfaces 的稳定性 (Stability of TransportSurfaces)

传送系统上的常规运输由 TransportSurfaces 建模。如果您的运输系统非常复杂且有很多碰撞器,您应考虑以下几点:

  • 使用尽可能简单的碰撞器(最好是 box collider)
  • 将碰撞器放在标准层上(参见 #collision-matrix
  • 您可以通过 TransportSurface 的设置限制 RigidBodies 的自由度:
限制进入和离开 TransportSurface 时的运动自由度

运动学运动 (Kinematic movements)

对于不像 MU 那样在物理上自由移动的部件,被定义为运动学部件。

例如,这适用于机器本身的运动。例如,机器人和机器中的电机驱动轴,都用运动学运动表示。运动学意味着驱动器的位置和多个轴的运动学链由其几何父子关系精确定义,排除任何力的应用。

在纯运动学仿真中,不考虑力和运动学链可能断裂的可能性。引擎根据不同的驱动位置计算部件的精确当前位置。我们称之为运动学运动。

⚠️

尝试通过 PhysX 关节(即非运动学)来表示例如机器人通常是有问题的,因为 PhysX 物理求解器在轴本身中有一种"弹簧效应",因此无法实现精确定位。因此我们对此使用运动学运动。

运动学运动基于 GameObject 层次结构实现。这意味着当父对象移动时,子对象也会移动。这是 Unity 对非物理对象的默认行为。这些对象仍必须具有 RigidBody,以允许准确的位置和传感器碰撞检测,但 Use Gravity 属性必须关闭,IsKinematic 属性必须打开。

IsKinematic 打开(true)意味着 GameObject 基于父子关系和局部变换位置移动。关节中没有弹簧效应,也不计算力。

这是机器人的移动臂的外观:

机器人手臂、运动学链和 IsKinematic 已开启

如果您将 Drive 附加到层次结构级别,realvirtual.io 会自动添加 RigidBody 并处理运动学运动的属性设置。

Articulation Body

在 Unity 2020.1 中,物理升级到 PhysX 4.0。Unity 引入了 articulation 的新概念:一组组织在逻辑树中的物体,其中父子关系表达了相互约束运动的概念。始终有一个单一的根物体,并且不能有循环。变换层次结构用于表达 articulation。给定父子关系中的自由度数量取决于使用的实际关节类型。更多信息请查看 https://docs.unity3d.com/2020.3/Documentation/ScriptReference/ArticulationBody.html

ℹ️

使用 Articulation Bodies 只是一个选项。我们仍然建议使用基于驱动器和变换的标准 realvirtual.io 运动学定义。

如果您想使用 Articulation Bodies,必须将 realvirtual.io Drive 附加到 Articulation Body。Drive 位置现在将变换到 Articulation Body。

Drive 方向需要设置为 "virtual",因为关节(及连接的驱动器)的方向将由 Articulation Body 定义。

您可以在 realvirtual.io Community Github 上查看示例:https://github.com/game4automation/game4automation-Community/tree/main/in2sight/Robots/ABB/IRB7600-400-255

带 Articulation Body 和 Drive 的机器人手臂(Direction 设置为 "virtual")

碰撞矩阵 (Collision Matrix)

为了提供快速的碰撞检测,realvirtual.io 使用独立的碰撞矩阵。当您选择 Tools > realvirtual > Apply standard settings 时,此矩阵会自动生成。

realvirtual.io 使用以下特殊的碰撞层:

物理 - realvirtual.io 碰撞矩阵(直至 2021 版本)
物理 - realvirtual.io 碰撞矩阵(2022 及更高版本)
层(2021 及之前)层(2022 及以上)描述
g4a SensorMUrvMUSensor可移动单元(MU)的碰撞体层,用于与光栅等传感器交互。由于 Mesh Collider 的限制,此碰撞体应为 Box Collider。
g4a TransportMUrvMUTransportMU 的运输碰撞体层。可以是 mesh collider 以提供逼真的碰撞。
g4a SensorrvSensor探测区域(如光束等)的层。通常应为 box collider。
g4a TransportrvTransport传送面或用于将物体放置到平台上的碰撞体层。
g4a MUrvMUMU 的层,其中一个 box collider 足够用于运输碰撞和传感器检测。
g4a SnappingrvSnapping仅在 Simulation Library 中使用 - 对齐检测层
g4a CollisionDynamicrvSimDynamic仅在 Simulation Library 中使用 - 路径系统上移动的可运输对象层
g4a CollissionSaticrvSimStatic仅在 Simulation Library 中使用 - 在路径系统上检测可运输对象,由工作站使用
g4a Postprocessiong已删除未使用 - 供将来使用
g4a Lamps已删除未使用 - 供将来使用
g4a Debug已删除未使用 - 供将来使用

物理求解器设置 (Physic solver settings)

物理设置在 Unity 网页上有详细描述,但我们想根据我们的经验给您一些提示。

首先,只有在对稳定性和性能不满意时才应更改物理设置。通常标准设置工作得相当好。

物理步进时间 (Physics Step Time)

Unity 以固定的步进时间计算物理。这是调用 FixedUpdate 方法的时候。您可以通过选择 Edit > Project Settings > Time 来更改时间步进:

更改固定时间步长

标准设置为 20ms。您可以将其减小到例如 5ms。这将提高物理计算质量,但也会增加处理器负载。如果处理器负载过高,您会发现屏幕更新率变低(例如 60ms 或更低)。

求解器迭代次数 (Solver Iterations)

另一个产生更好物理仿真的可能性是增加求解器迭代次数。您可以增加求解器迭代次数来生成更好的质量,但这也会增加负载。通常,它用于减少关节或接触产生的抖动。

求解器迭代次数和求解器类型

物理求解器 (Physics Solver)

另一个通常能生成更好物理效果的设置是将求解器类型从标准 (Projected Gauss Seidel) 更改为 Temporal Gauss Seidel

当您在使用默认求解器的仿真过程中遇到一些不稳定行为时,它通常会有所帮助。我们建议使用此设置。

更多信息请查看 Unity 文档:

© 2025 realvirtual GmbH https://realvirtual.io - 版权所有。未经出版商事先书面许可,不得以任何形式或任何方式(包括打印、保存、影印、录制或其他电子或机械方法)复制、分发或传输本出版物的任何部分。