Reputation: 25
I am working with a diagram which includes a MultiBodyPlant
with a Propeller
connected to it. The Propeller
actually realizes numerous physical propellers which are distributed among the bodies of the MultiBodyPlant
.
I am able to simulate the dynamics of the combined system by setting the prop forces with FixValue
, so I'm on the right track.
What I'd like to be able to do is, given a configuration for the system (i.e. the MultiBodyPlant
context) and a chosen propeller command, compute the generalized forces acting on the system. My sense is that this is not immediately available since the simulation is actually using the RNEA, and so does not aggregate the forces all together in that way. For what I'm doing (and even just as a sanity check), I would like to compute the forces directly, not just their effect on the evolution of the state.
Is there an existing method to compute this built into Drake, or should I compute it manually using the spatial jacobian of each propeller frame and the applied SpatialForce
of the corresponding propeller? (Something along the lines of this question: How to get the matrix that maps external forces to generalized forces?)
Many thanks for your help.
Upvotes: 2
Views: 130
Reputation: 5533
I understand better now. It's a very reasonable request! You have two systems at play: the Propeller
and MultibodyPlant
. Unfortunately, the quantity you want is all of Propeller
and just a piece of MultibodyPlant
. We don't offer direct access to the B(q)
matrix in that case.
What you can do is call with either AutoDiffXd
or symbolic::Expression
, call CalcImplicitTimeDerivativesResidual
on the Diagram
to get the entire dynamics in implicit form (to avoid taking M(q)
inverse). You could call it twice -- once with the Propeller
inputs set up via FixValue
as AutoDiffXd
and/or symbolic::Variable
and again with them as zero, then subtract the difference.
Note: CalcImplicitTimeDerivativesResidual
is relatively new; I haven't pushed the python bindings for it yet (but it's been on my list). Do you need it from python?
Upvotes: 1
Reputation: 5533
I think that perhaps you are looking for the MultibodyPlant reaction_forces output port?
Upvotes: 0