dair_pll.drake_utils

Drake simulation setup for multibody systems.

This file implements MultibodyPlantDiagram, which instantiates Drake simulation and visualization system for a given group of URDF files.

Visualization is done via Drake’s VideoWriter. Details on using the VideoWriter are available in the documentation for dair_pll.vis_utils.

In order to make the Drake states compatible with available StateSpace inheriting classes, users must define the drake system by a collection of URDF files, each of which contains a model for exactly one floating- or fixed-base rigid multibody chain. This allows for the system to be modeled as having a ProductSpace state space, where each factor space is a FloatingBaseSpace or FixedBaseSpace.

dair_pll.drake_utils.SceneGraphInspectorFloat
dair_pll.drake_utils.DiagramBuilderFloat
dair_pll.drake_utils.UniqueBodyIdentifier
dair_pll.drake_utils.get_bodies_in_model_instance(plant, model_instance_index)[source]

Get list of body names associated with model instance.

Parameters:
Return type:

List[Union[RigidBody, RigidBody_𝓣AutoDiffXd𝓤, RigidBody_𝓣Expression𝓤]]

dair_pll.drake_utils.get_body_names_in_model_instance(plant, model_instance_index)[source]

Get list of body names associated with model instance.

Return type:

List[str]

dair_pll.drake_utils.unique_body_identifier(plant, body)[source]

Unique string identifier for given Body_.

Return type:

str

dair_pll.drake_utils.get_all_bodies(plant, model_instance_indices)[source]

Get all bodies in plant’s models.

Return type:

Tuple[List[Union[RigidBody, RigidBody_𝓣AutoDiffXd𝓤, RigidBody_𝓣Expression𝓤]], List[str]]

dair_pll.drake_utils.get_all_inertial_bodies(plant, model_instance_indices)[source]

Get all bodies that should have inertial parameters in plant.

Return type:

Tuple[List[Union[RigidBody, RigidBody_𝓣AutoDiffXd𝓤, RigidBody_𝓣Expression𝓤]], List[str]]

class dair_pll.drake_utils.CollisionGeometrySet(ids=<factory>, frictions=<factory>, collision_candidates=<factory>)[source]

Bases: object

dataclasses.dataclass() for tracking object collisions.

ids: typing.List[pydrake.geometry.GeometryId]

List of geometries that may collide.

frictions: typing.List[pydrake.multibody.plant.CoulombFriction]

List of coulomb friction coefficients for the geometries.

collision_candidates: typing.List[typing.Tuple[int, int]]

Pairs of geometries that may collide.

dair_pll.drake_utils.get_collision_geometry_set(inspector)[source]

Get colliding geometries, frictional properties, and corresponding collision pairs in a scene.

Parameters:

inspector (Union[SceneGraphInspector, SceneGraphInspector_𝓣AutoDiffXd𝓤]) – Inspector of scene graph.

Return type:

CollisionGeometrySet

Returns:

List of geometries that are candidates for at least one collision. Pairs of indices in geometry list that potentially collide.

dair_pll.drake_utils.add_plant_from_urdfs(builder, urdfs, dt)[source]

Add plant to builder with prescribed URDF models.

Generates a world containing each given URDF as a model instance.

Parameters:
  • builder (Union[DiagramBuilder, DiagramBuilder_𝓣AutoDiffXd𝓤, DiagramBuilder_𝓣Expression𝓤]) – Diagram builder to add plant to

  • urdfs (Dict[str, str]) – Names and corresponding URDFs to add as models to plant.

  • dt (float) – Time step of plant in seconds.

Return type:

Tuple[List[ModelInstanceIndex], MultibodyPlant, SceneGraph]

Returns:

Named dictionary of model instances returned by AddModelFromFile. New plant, which has been added to builder. Scene graph associated with new plant.

class dair_pll.drake_utils.MultibodyPlantDiagram(urdfs, dt=0.001, visualization_file=None)[source]

Bases: object

Constructs and manages a diagram, simulator, and optionally a visualizer for a multibody system described in a list of URDF’s.

This minimal diagram consists of a MultibodyPlant, SceneGraph, and optionally a VideoWriter hooked up in the typical fashion.

From the MultibodyPlant, MultibodyPlantDiagram can infer the corresponding StateSpace from the dimension of the associated velocity vectors in the plant’s context, via the one-chain-per-file assumption.

Initialization generates a world containing each given URDF as a model instance, and a corresponding Drake Simulator set up to trigger a state update every dt.

By default, a ground plane is added at world height z = 0.

Parameters:
  • urdfs (Dict[str, str]) – Names and corresponding URDFs to add as models to plant.

  • dt (float) – Time step of plant in seconds.

  • visualization_file (Optional[str]) – Optional output GIF filename for trajectory visualization.

collision_geometry_set: dair_pll.drake_utils.CollisionGeometrySet
sim: pydrake.systems.analysis.Simulator
plant: pydrake.multibody.plant.MultibodyPlant
scene_graph: pydrake.geometry.SceneGraph
visualizer: typing.Optional[pydrake.visualization._video.VideoWriter]
model_ids: typing.List[pydrake.multibody.tree.ModelInstanceIndex]
space: dair_pll.state_space.ProductSpace
generate_state_space()[source]

Generate StateSpace object for plant.

Under the one-chain-per-model assumption, iteratively constructs a ProductSpace representation for the state of the MultibodyPlant.

Return type:

ProductSpace

Returns:

State space of the diagram’s underlying multibody system.