计算由于 Drake 中的 ExternallyAppliedSpatialForces 而产生的广义力,例如由于螺旋桨

Computing the generalized forces arising due to ExternallyAppliedSpatialForces in Drake, e.g. due to Propeller

我正在处理一个图表,其中包含一个 MultiBodyPlant 和一个 Propeller 连接到它。 Propeller实际上实现了分布在MultiBodyPlant身上的无数物理推进器。

我可以通过 FixValue 设置支撑力来模拟组合系统的动力学,所以我在正确的轨道上。

我想做的是,给定系统配置(即 MultiBodyPlant 上下文)和选定的螺旋桨命令,计算作用在系统上的广义力。我的感觉是,这不是立即可用的,因为模拟实际上使用的是 RNEA,因此不会以这种方式将所有力聚集在一起。对于我正在做的事情(甚至只是作为完整性检查),我想直接计算力,而不仅仅是它们对状态演变的影响。

是否有现有的方法来计算德雷克内置的这个,或者我应该使用每个螺旋桨框架的空间雅可比和相应螺旋桨的应用 SpatialForce 手动计算它? (类似于这个问题:

非常感谢您的帮助。

我想您可能正在寻找 MultibodyPlant reaction_forces output port?

我现在明白多了。这是一个非常合理的要求!您有两个系统在起作用:PropellerMultibodyPlant。很遗憾,您要的数量是 Propeller 的全部,只是 MultibodyPlant 的一部分。在这种情况下,我们不提供对 B(q) 矩阵的直接访问。

可以做的是用AutoDiffXdsymbolic::Expression调用,在Diagram上调用CalcImplicitTimeDerivativesResidual得到隐式形式的整个动态(避免取 M(q) 逆)。您可以调用它两次——一次通过 FixValuePropeller 输入设置为 AutoDiffXd and/or symbolic::Variable 并再次将它们设置为零,然后减去差异。

注:CalcImplicitTimeDerivativesResidual比较新;我还没有为它推送 python 绑定(但它已经在我的列表中)。您需要 python 吗?