执行器#
一个关节系统由驱动关节组成,也称为自由度(DOF)。在物理系统中,驱动通常通过主动组件进行,例如电动或液压马达,或通过被动组件,例如弹簧。这些组件可能会引入某些非线性特性,包括延迟或最大可产生的速度或扭矩。
在仿真中,关节可以是位置控制、速度控制或扭矩控制。对于位置和速度控制,物理引擎内部实现了一个弹簧-阻尼(PD)控制器,用于计算作用在执行关节上的扭矩。在扭矩控制中,命令直接设置为关节力。虽然这模拟了关节机制的理想行为,但并不能真实地模拟驱动器在现实世界中的工作方式。因此,我们提供了一个机制来注入外部模型,以计算关节命令,以代表物理机器人的行为。
执行器模型#
我们命名两种不同类型的执行器模型:
隐式: 对应于理想的仿真机制(由物理引擎提供)。
显式: 对应于外部驱动器模型(由用户实现)。
显式执行器模型执行两个步骤: 1)计算用于跟踪输入命令的期望关节力矩,2)根据电机能力对期望力矩进行裁减。裁减后的力矩是设置到模拟中的期望执行力。
作为理想显式执行器模型的示例,我们提供 isaaclab.actuators.IdealPDActuator
类,它实现了具有前馈力的 PD 控制器,并根据配置的最大力进行简单剪裁。
其中,
执行器组#
执行器模型本身是计算块,其输入为期望的关节命令,并输出应用于模拟器的关节命令。它们不包含任何关于它们自身作用的关节的知识。这些由 isaaclab.assets.Articulation
类处理,该类包装了物理引擎的关节类。
执行器被聚合为一组在关节上被激活的执行器,这些关节使用相同的执行器模型。例如,四足动物机器人ANYmal-C使用串联弹性执行器ANYdrive 3.0作为所有关节的执行器。此分组配置了这些关节的执行器模型,将输入命令转换为关节级别的命令,并将关节动作返回到模拟器中。如果有一只手臂使用不同的执行器模型,比如直流电机,就需要配置不同的执行器组。
以下图显示了一个腿式移动机械臂的执行器组。
参见
我们为各种显式执行器模型提供实现。这些详细信息可在 isaaclab.actuators 子包中找到。
在使用执行器时的考虑#
如前面所述,有两种主要类型的执行器模型:隐式和显式。隐式执行器模型由物理引擎提供。这意味着当用户设置所需的位置或速度时,物理引擎将在内部计算需要应用到关节的力矩,以实现所需的行为。在PhysX中,PD控制器向所需的力矩添加数值阻尼,从而产生更稳定的行为。
显式执行器模型由用户提供。这意味着当用户设置所需位置或速度时,用户的模型将计算需要施加到关节上的力矩以实现所需行为。虽然这提供了更多灵活性,但也可能导致一些数值不稳定性。减轻这种情况的一种方法是使用执行器模型的 armature
参数,无论是在USD文件中还是在关节配置中。该参数用于阻尼关节响应,并有助于提高模拟的数值稳定性。有关如何提高关节稳定性的更多详细信息可以在 OmniPhysics 文档 中找到。
这对用户意味着什么?这意味着使用隐式执行器训练的策略在使用显式执行器时可能无法转移到完全相同的机器人模型。 如果您遇到这样的问题,或者在策略在隐式执行器上不收敛而在显式执行器上却收敛时,增加或设置 armature
参数为更高的值可能会有所帮助。