问题
Background
I am trying to balance a mobile inverted pendulum (i.e. segway).
For the simulation, I created a simple robot that involves a pole attached to a cylinder (wheel) through a revolute joint.
Question
After constructing my MIP plant, plant.num_positions()
returns 8
and plant.num_velocities()
returns 7
, i.e. the total continuous_state
size is 15
- How do I make sense of this large number of states?
- I suppose one of these represents the angle that the pole makes with the vertical. How do I find that?
- Also, why is
num_positions()
not equal tonum_velocities()
?
回答1:
By default, the urdf/sdf parser adds the system with a quaternion-based floating base. This floating base joint has 7 position variables (x,y,z + quaternion) and 6 velocities (xdot, ydot, zdot, + spatial velocity). You should use the multibody API to get the variable in the right order.
You can add a joint between the world link and your base (either in the urdf/sdf or in your code) to replace that implied floating joint with e.g. a prismatic joint at the base.
There are lots of examples of how to simulate it, in drake, but also at http://underactuated.mit.edu
来源:https://stackoverflow.com/questions/55711025/how-to-make-sense-of-the-continuous-state-vector