使用铰接体轻松制作具有逼真动作和行为的工业设计原型

在目前处于测试阶段的 Unity 2020.1 中,我们将有一个新的物理组件:衔接身体。ARM 铰接技术使模拟具有逼真物理和运动的机械臂和运动链变得前所未有的简单。加上 PhysX 4.1 的其他改进,Unity 在工业应用仿真方面的能力比以往任何时候都更强。
在 Unity 2019.3 中,我们将物理库从 PhysX 3.4 升级到了 PhysX 4.0。现在,Unity 2020.1 测试版将用户向前推进了一步,升级到了 PhysX 4.1。虽然该库以前的版本能为各种游戏类型提供出色的性能,但要为非游戏应用建立现实模型却比较困难。建模运动链(如在布娃娃、机械臂或具有多个并发铰链的机械装置中看到的那种运动链)会导致运动不流畅、不真实。这些接头不仅外观奇特,而且无法用于模拟真实设备,从而阻碍了工业设计的建模或原型制作。
造成现实世界中这些缺陷的罪魁祸首之一是连接刚体的连接部件的选择。这些关节加上为游戏性能而优化的物理求解器,导致运动学模拟不真实。
在某些应用中,需要限制一些刚体的相对运动。为了形象地理解这一点,可以想象连接一个布娃娃的骨架骨骼、一个多关节的机械臂,或者让一扇门在铰链上转动。传统上,可以通过固定连接点(FixedJoint)或可配置连接点(ConfigurableJoint)等连接组件将两个刚体对象连接在一起。
在幕后,每个关节都会被分解成一些原始约束,例如,线性约束用于保持物体之间的特定距离,角度约束用于保持物体围绕特定轴线的特定方向。通过保持相同的间距,同样的约束条件也能防止车身相互重叠。所有的约束条件都将被输入一个迭代求解器,该求解器的目标是汇聚成一组脉冲,应用于世界空间中每一对相连的物体,尽可能使它们的位置满足所有的约束条件。
第一个问题是相互冲突的因素太多,会给求解器带来收敛问题。场景中的迭代次数、连接体的相对质量以及约束条件集的总复杂度都可能造成无法解决的情况。在这种情况下,会使用部分解决方案,因此某些约束条件无法满足。
第二个问题是,所施加的脉冲大小取决于联合误差,这个值显示了在给定时间内违反约束条件的严重程度。由于这种误差补偿行为,总是会有至少一些弹力效应,就好像车身是由一组阻尼弹簧连接在一起一样,尤其是当关节被链在一起的时候。
我们对上述运动学问题的解决方案是新的 "衔接"(articulation)概念:以逻辑树的形式组织一组物体,其中的父子关系表达了相互制约的运动理念。始终只有一个根主体,不可能有循环。我们使用 Unity 的变换层次来表达衔接。
现在,用户可以轻松地对现有机器人(如下面的 Universal Robots UR3e)进行建模,并模拟一项任务,从而更准确地反映该动作在现实世界中的样子。这样,机器人专家就可以在合成环境中可视化特定的运动序列、测试新代码,甚至验证新设计。
关节连接在两个主要方面为机器人专家和其他工业开发人员提供了帮助:它们的运动方式与现实世界中的对应物更加相似,而且它们的构建速度比以前的 "刚体+关节 "更快,从而节省了开发时间。
我们预计,衔接的主要用途之一将是机器人领域。机械臂通常有六个或更多的关节串联在一起,这意味着每个相对关节姿势的微小误差都可能对末端效应器的姿势产生巨大影响;误差会沿着运动学链向上传播,从而产生不切实际的运动和偏离目标的末端效应器位置。
仿真可以帮助机器人专家加快开发时间,方法是对许多部署场景和单元测试进行虚拟建模,然后大规模执行,而不是试图在真实机器人上实时运行相同的测试套件。我们希望 ArticulationBody 组件以及对 PhysX 的改进能够帮助机器人专家使用 Unity 进行仿真工作。
特定父子关系的自由度取决于实际使用的联合类型。目前,我们支持
- 固定:自由度为零,用于锁定各机构之间的相对位置
- 棱柱形:有一个自由度,即沿特定轴线相对于母体的线性偏移量
- 旋翼:有一个自由度,是棱柱的旋转类似物
- 球形:最多有三个自由度,是一种球窝关节,只允许相对旋转,不允许线性运动
为了进一步提高这些关节的逼真度,我们使用了基于费瑟斯通算法的新求解器。这种技术使用简化坐标来计算施加在由关节、链接和实体组成的结构上的力的影响,也就是说,在空间中,每个实体相对于其父实体的坐标数量与自由度的数量相同。以前,我们依赖于最大坐标,这种坐标在一般使用情况下性能更高,但为了获得这种性能,我们牺牲了精确度和准确性。
在缩小的坐标空间内的前向动态和铰接有助于满足机械臂对精度和准确度的高要求。与 PhysX 4.1 提供的其他改进(如 TGS 求解器)一起,铰接功能首次使 Unity 中可靠的机械臂模拟成为可能。使用迭代关节求解器建立机器人模型需要精确的调整和捷径,但仍无法与真实机器人的运动相匹配。
我们使用前向动力学算法来模拟缩小坐标空间(即每个体相对于其父体的坐标数与自由度数相同)中的衔接。它与衔接中的总自由度成线性比例,比使用传统的迭代求解器更快,因为传统的迭代求解器会随着约束数量的增加而增加,同时计算出的结果也更精确。
为了支持 Unity 中的衔接,我们添加了一个新组件:衔接体(ArticulationBody)。与普通物理学类似,ArticulationBody 就像是将 Rigidbody 和 ConfigurableJoint 合二为一的组件。在衔接中,除根体外的所有体都有一个连接到其父体的关节,这就是为什么它们没有被分离成单独的组件。

就像使用 Rigidbodies 一样,可以使用常规的 Collider 组件来描述物体的形状。
一旦创建,衔接中的主体就不能通过变换组件移动,因为它会打破缩小空间坐标所设定的限制。唯一的例外是根主体,它可以使用 ArticulationBody.TeleportRoot 函数进行移动。ArticulationBody 在设计上不会响应变换组件的变化。
也就是说,有几种可能的方式与衔接进行交互。首先,力和扭矩可以施加到衔接中的每个体上。其次,每个关节的每个自由度都有一个线性驱动器,可通过设置线性和角度目标进行控制。最后,还可以直接改变缩小坐标空间中的物体姿态。
铰接的一个特别优势是,模拟质量并不直接取决于连接体的质量比。在使用刚体和固定关节的情况下,当连接体之间的质量比大于 10:1 时,模拟开始变得不切实际。不过,在下面的例子中,你可以看到,即使红色球体的重量是黑色球体的 1000 倍,用固定关节连接的立体网格仍然可以精确模拟。
仿真可以帮助机器人专家加快开发时间,方法是对许多部署场景和单元测试进行虚拟建模,然后大规模执行,而不是试图在真实机器人上实时运行相同的测试套件。我们希望 ArticulationBody 组件以及对 PhysX 的改进能够帮助机器人专家使用 Unity 进行仿真工作。
要了解如何用铰接关节构建串行链接机械臂,请查看我们的 机器人演示项目。
下载 Unity 2020.1 测试版,尝试使用 ArticulationBody。
