Search code examples
drake

Can I use an SDF as a plant for DirectCollocation?


My goal is to use an SDF I made that models a cart-pole system and use DirectCollocation to find a swing-up trajectory.

However, when I try to use the plant created by the SDF and use DirectCollocation to construct the mathematical program I get the following error:

RuntimeError: This system doesn't have any continuous states. DirectCollocation only makes sense for systems with continuous-time dynamics.

Can an SDF create a continuous system or am I required to create my own LeafSystem?

I've been using Example: 10.2 Direct Collocation for the Pendulum, Acrobot, and Cart-Pole as a reference from the Underactuated Book as well as digging through drake/examples/acrobot. Any additional reference suggestions would be appreciated!


Solution

  • Most likely, the problem is that you have explicitly constructed a discrete MultibodyPlant. Take a look at the constructor documentation. If you construct it as continuous (e.g., time_step = 0), then you can parse your SDF into it.

    You can confirm this by looking at your construction of the plant and confirm that you're passing a non-zero time step.