├── CITATION.cff
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── __init__.py
├── build.sh
├── cpp
├── CMakeLists.txt
├── CONTRIBUTING.md
├── cmake
│ └── FindOrFetch.cmake
├── controllers
│ ├── CMakeLists.txt
│ ├── README.md
│ └── lsqp
│ │ ├── CMakeLists.txt
│ │ ├── include
│ │ └── dm_robotics
│ │ │ └── controllers
│ │ │ └── lsqp
│ │ │ ├── cartesian_6d_to_joint_velocity_mapper.h
│ │ │ ├── cartesian_6d_velocity_direction_constraint.h
│ │ │ ├── cartesian_6d_velocity_direction_task.h
│ │ │ ├── cartesian_6d_velocity_task.h
│ │ │ ├── collision_avoidance_constraint.h
│ │ │ ├── joint_acceleration_constraint.h
│ │ │ ├── joint_position_limit_constraint.h
│ │ │ ├── joint_velocity_filter.h
│ │ │ └── test_utils.h
│ │ ├── src
│ │ ├── cartesian_6d_to_joint_velocity_mapper.cc
│ │ ├── cartesian_6d_velocity_direction_constraint.cc
│ │ ├── cartesian_6d_velocity_direction_task.cc
│ │ ├── cartesian_6d_velocity_task.cc
│ │ ├── collision_avoidance_constraint.cc
│ │ ├── joint_acceleration_constraint.cc
│ │ ├── joint_position_limit_constraint.cc
│ │ ├── joint_velocity_filter.cc
│ │ └── test_utils.cc
│ │ └── tests
│ │ ├── cartesian_6d_to_joint_velocity_mapper_test.cc
│ │ ├── cartesian_6d_velocity_direction_constraint_test.cc
│ │ ├── cartesian_6d_velocity_direction_task_test.cc
│ │ ├── cartesian_6d_velocity_task_test.cc
│ │ ├── collision_avoidance_constraint_test.cc
│ │ ├── integration_test.cc
│ │ ├── joint_acceleration_constraint_test.cc
│ │ ├── joint_position_limit_constraint_test.cc
│ │ └── joint_velocity_filter_test.cc
├── controllers_py
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── __init__.py
│ ├── cartesian_6d_to_joint_velocity_mapper.cc
│ ├── cartesian_6d_to_joint_velocity_mapper_example.py
│ ├── cartesian_6d_to_joint_velocity_mapper_python_helpers.cc
│ ├── cartesian_6d_to_joint_velocity_mapper_python_helpers.h
│ ├── cartesian_6d_to_joint_velocity_mapper_test.py
│ ├── joint_velocity_filter.cc
│ ├── joint_velocity_filter_example.py
│ ├── joint_velocity_filter_python_helpers.cc
│ ├── joint_velocity_filter_python_helpers.h
│ ├── joint_velocity_filter_test.py
│ ├── pybind_utils.cc
│ └── pybind_utils.h
├── least_squares_qp
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── common
│ │ ├── CMakeLists.txt
│ │ ├── include
│ │ │ └── dm_robotics
│ │ │ │ └── least_squares_qp
│ │ │ │ └── common
│ │ │ │ ├── box_constraint.h
│ │ │ │ ├── identity_constraint.h
│ │ │ │ ├── identity_constraint_union.h
│ │ │ │ ├── identity_task.h
│ │ │ │ ├── math_utils.h
│ │ │ │ └── minimize_norm_task.h
│ │ ├── src
│ │ │ ├── box_constraint.cc
│ │ │ ├── identity_constraint_union.cc
│ │ │ ├── identity_task.cc
│ │ │ └── math_utils.cc
│ │ └── tests
│ │ │ ├── box_constraint_test.cc
│ │ │ ├── identity_constraint_union_test.cc
│ │ │ ├── identity_task_test.cc
│ │ │ ├── integration_test.cc
│ │ │ └── minimize_norm_task_test.cc
│ ├── core
│ │ ├── CMakeLists.txt
│ │ ├── include
│ │ │ └── dm_robotics
│ │ │ │ └── least_squares_qp
│ │ │ │ └── core
│ │ │ │ ├── lsqp_constraint.h
│ │ │ │ ├── lsqp_stack_of_tasks_solver.h
│ │ │ │ ├── lsqp_task.h
│ │ │ │ ├── lsqp_task_hierarchy.h
│ │ │ │ └── utils.h
│ │ ├── src
│ │ │ ├── lsqp_stack_of_tasks_solver.cc
│ │ │ ├── lsqp_stack_of_tasks_solver_impl.cc
│ │ │ └── lsqp_stack_of_tasks_solver_impl.h
│ │ └── tests
│ │ │ └── lsqp_stack_of_tasks_solver_test.cc
│ ├── examples
│ │ ├── CMakeLists.txt
│ │ ├── common_example.cc
│ │ └── core_example.cc
│ └── testing
│ │ ├── CMakeLists.txt
│ │ └── include
│ │ └── dm_robotics
│ │ └── least_squares_qp
│ │ └── testing
│ │ └── matchers.h
├── mujoco
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── cmake
│ │ └── defs.h.in
│ ├── include
│ │ └── dm_robotics
│ │ │ └── mujoco
│ │ │ ├── test_with_mujoco_model.h
│ │ │ ├── types.h
│ │ │ └── utils.h
│ ├── src
│ │ ├── test_with_mujoco_model.cc
│ │ └── utils.cc
│ └── tests
│ │ ├── test_with_mujoco_model_test.cc
│ │ └── utils_test.cc
├── requirements_external.txt
├── setup.py
└── support
│ ├── CMakeLists.txt
│ └── include
│ └── dm_robotics
│ └── support
│ ├── logging.h
│ ├── status-matchers.h
│ └── status_macros.h
└── py
├── agentflow
├── LICENSE
├── MANIFEST.in
├── README.md
├── __init__.py
├── action_spaces.py
├── action_spaces_test.py
├── composite_action_space_test.py
├── core.py
├── decorators.py
├── docs
│ ├── components.md
│ ├── control_flow.md
│ ├── example_agentflow_controlflow_graph.png
│ └── examples.md
├── loggers
│ ├── print_logger.py
│ ├── subtask_logger.py
│ ├── subtask_logger_test.py
│ ├── types.py
│ ├── utils.py
│ └── utils_test.py
├── meta_options
│ └── control_flow
│ │ ├── __init__.py
│ │ ├── cond.py
│ │ ├── cond_test.py
│ │ ├── examples
│ │ ├── common.py
│ │ └── simple_insertion.py
│ │ ├── loop_ops.py
│ │ ├── loop_ops_test.py
│ │ ├── sequence.py
│ │ └── sequence_test.py
├── options
│ ├── basic_options.py
│ └── basic_options_test.py
├── preprocessors
│ ├── observation_transforms.py
│ ├── observation_transforms_test.py
│ ├── rewards.py
│ ├── rewards_test.py
│ ├── timestep_preprocessor.py
│ └── timestep_preprocessor_test.py
├── rendering
│ ├── graphviz_renderer.py
│ ├── graphviz_renderer_test.py
│ ├── intermediate.py
│ ├── intermediate_test.py
│ ├── subgraph.py
│ └── subgraph_test.py
├── requirements.txt
├── requirements_external.txt
├── run_tests.py
├── setup.py
├── spec_utils.py
├── spec_utils_test.py
├── subtask.py
├── subtask_test.py
├── subtasks
│ ├── integration_test.py
│ ├── parameterized_subtask.py
│ ├── parameterized_subtask_test.py
│ ├── subtask_termination.py
│ └── subtask_termination_test.py
├── testing_functions.py
├── testing_functions_test.py
├── tox.ini
├── tutorial.ipynb
└── util.py
├── geometry
├── MANIFEST.in
├── README.md
├── __init__.py
├── geometry.py
├── geometry_test.py
├── jax_geometry
│ ├── __init__.py
│ ├── _impl
│ │ ├── map_coordinates.py
│ │ └── map_coordinates_test.py
│ ├── auto_vectorize.py
│ ├── auto_vectorize_test.py
│ ├── basic_types.py
│ ├── camera.py
│ ├── camera_test.py
│ ├── frame_geometry.py
│ ├── frame_geometry_test.py
│ ├── geometry_utils.py
│ ├── geometry_utils_test.py
│ ├── normal_geometry.py
│ ├── normal_geometry_test.py
│ ├── pointcloud_stamped.py
│ ├── pointcloud_stamped_test.py
│ ├── projective_geometry.py
│ └── projective_geometry_test.py
├── joint_angles_distribution.py
├── mujoco_physics.py
├── observation_physics.py
├── observation_physics_test.py
├── pose_distribution.py
├── pose_distribution_test.py
├── requirements.txt
├── requirements_external.txt
├── setup.py
└── tox.ini
├── integration_test
├── generate_requirements_txt.py
├── requirements_external.txt
└── tox.ini
├── manipulation
├── MANIFEST.in
├── README.md
├── __init__.py
├── props
│ ├── mesh_object.py
│ ├── mesh_object_test.py
│ ├── object_collection.py
│ ├── parametric_object
│ │ ├── parametric_object.py
│ │ ├── parametric_object_test.py
│ │ └── rgb_objects
│ │ │ ├── parametric_rgb_object.py
│ │ │ ├── parametric_rgb_object_test.py
│ │ │ └── rgb_object_names.py
│ ├── rgb_objects
│ │ ├── README.md
│ │ ├── assets
│ │ │ └── rgb_v1.3
│ │ │ │ └── meshes
│ │ │ │ ├── heldout
│ │ │ │ ├── e2_sds5_shr0_drf0_hlw0_shx0_shy0_scx49_scy49_scz50.stl
│ │ │ │ ├── e3_sds4_shr20_drf0_hlw0_shx0_shy0_scx48_scy50_scz55.stl
│ │ │ │ ├── e5_sds4_shr0_drf0_hlw0_shx0_shy11_scx50_scy50_scz50.stl
│ │ │ │ ├── e6_sds4_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz77.stl
│ │ │ │ ├── f2_sds5_shr0_drf0_hlw0_shx0_shy0_scx50_scy50_scz50.stl
│ │ │ │ ├── f3_sds4_shr13_drf0_hlw0_shx0_shy0_scx49_scy50_scz53.stl
│ │ │ │ ├── f5_sds4_shr0_drf0_hlw0_shx0_shy7_scx50_scy50_scz50.stl
│ │ │ │ ├── f6_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz68.stl
│ │ │ │ ├── h2_sds6_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz50.stl
│ │ │ │ ├── h3_sds4_shr34_drf0_hlw0_shx0_shy0_scx46_scy50_scz59.stl
│ │ │ │ ├── h5_sds4_shr0_drf0_hlw0_shx0_shy19_scx50_scy50_scz50.stl
│ │ │ │ ├── h6_sds4_shr0_drf0_hlw0_shx0_shy0_scx41_scy41_scz95.stl
│ │ │ │ ├── l2_sds7_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz50.stl
│ │ │ │ ├── l3_sds4_shr47_drf0_hlw0_shx0_shy0_scx45_scy50_scz63.stl
│ │ │ │ ├── l5_sds4_shr0_drf0_hlw0_shx0_shy26_scx50_scy50_scz50.stl
│ │ │ │ ├── l6_sds4_shr0_drf0_hlw0_shx0_shy0_scx37_scy37_scz113.stl
│ │ │ │ ├── m2_sds8_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl
│ │ │ │ ├── m3_sds4_shr61_drf0_hlw0_shx0_shy0_scx43_scy50_scz67.stl
│ │ │ │ ├── m5_sds4_shr0_drf0_hlw0_shx0_shy34_scx50_scy50_scz50.stl
│ │ │ │ ├── m6_sds4_shr0_drf0_hlw0_shx0_shy0_scx33_scy33_scz131.stl
│ │ │ │ ├── u2_sds6_shr0_drf0_hlw0_shx0_shy0_scx49_scy49_scz50.stl
│ │ │ │ ├── u3_sds4_shr27_drf0_hlw0_shx0_shy0_scx47_scy50_scz57.stl
│ │ │ │ ├── u5_sds4_shr0_drf0_hlw0_shx0_shy15_scx50_scy50_scz50.stl
│ │ │ │ ├── u6_sds4_shr0_drf0_hlw0_shx0_shy0_scx43_scy43_scz86.stl
│ │ │ │ ├── v2_sds8_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz50.stl
│ │ │ │ ├── v3_sds4_shr54_drf0_hlw0_shx0_shy0_scx44_scy50_scz65.stl
│ │ │ │ ├── v5_sds4_shr0_drf0_hlw0_shx0_shy30_scx50_scy50_scz50.stl
│ │ │ │ ├── v6_sds4_shr0_drf0_hlw0_shx0_shy0_scx35_scy35_scz122.stl
│ │ │ │ ├── x2_sds7_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz50.stl
│ │ │ │ ├── x3_sds4_shr40_drf0_hlw0_shx0_shy0_scx46_scy50_scz61.stl
│ │ │ │ ├── x5_sds4_shr0_drf0_hlw0_shx0_shy22_scx50_scy50_scz50.stl
│ │ │ │ ├── x6_sds4_shr0_drf0_hlw0_shx0_shy0_scx39_scy39_scz104.stl
│ │ │ │ ├── y2_sds9_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl
│ │ │ │ ├── y3_sds4_shr68_drf0_hlw0_shx0_shy0_scx42_scy50_scz69.stl
│ │ │ │ ├── y5_sds4_shr0_drf0_hlw0_shx0_shy38_scx50_scy50_scz50.stl
│ │ │ │ └── y6_sds4_shr0_drf0_hlw0_shx0_shy0_scx31_scy31_scz140.stl
│ │ │ │ ├── test_triplets
│ │ │ │ ├── b2_sds8_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz50.stl
│ │ │ │ ├── b3_sds4_shr48_drf0_hlw0_shx0_shy0_scx46_scy49_scz63.stl
│ │ │ │ ├── b5_sds4_shr0_drf0_hlw0_shx0_shy31_scx50_scy50_scz50.stl
│ │ │ │ ├── b6_sds4_shr0_drf0_hlw0_shx0_shy0_scx32_scy48_scz96.stl
│ │ │ │ ├── g2_sds6_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl
│ │ │ │ ├── g3_sds4_shr25_drf0_hlw0_shx0_shy0_scx51_scy51_scz60.stl
│ │ │ │ ├── g5_sds4_shr0_drf0_hlw0_shx0_shy20_scx50_scy50_scz50.stl
│ │ │ │ ├── g6_sds4_shr0_drf0_hlw0_shx0_shy0_scx40_scy56_scz80.stl
│ │ │ │ ├── r2_sds10_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz50.stl
│ │ │ │ ├── r3_sds4_shr75_drf0_hlw0_shx0_shy0_scx41_scy49_scz71.stl
│ │ │ │ ├── r5_sds4_shr0_drf0_hlw0_shx0_shy42_scx50_scy50_scz50.stl
│ │ │ │ ├── r6_sds4_shr0_drf0_hlw0_shx0_shy0_scx29_scy29_scz150.stl
│ │ │ │ └── s0_sds4_shr0_drf0_hlw0_shx0_shy0_scx50_scy50_scz50.stl
│ │ │ │ └── train
│ │ │ │ ├── e23_sds4_shr10_drf0_hlw0_shx0_shy0_scx48_scy49_scz52.stl
│ │ │ │ ├── e25_sds4_shr0_drf0_hlw0_shx0_shy5_scx49_scy49_scz50.stl
│ │ │ │ ├── e26_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz63.stl
│ │ │ │ ├── e35_sds4_shr10_drf0_hlw0_shx0_shy5_scx49_scy50_scz52.stl
│ │ │ │ ├── e36_sds4_shr10_drf0_hlw0_shx0_shy0_scx46_scy47_scz66.stl
│ │ │ │ ├── e37_sds4_shr10_drf0_hlw0_shx0_shy0_scx46_scy63_scz50.stl
│ │ │ │ ├── e38_sds4_shr10_drf0_hlw0_shx0_shy0_scx62_scy47_scz50.stl
│ │ │ │ ├── e56_sds4_shr0_drf0_hlw0_shx0_shy5_scx47_scy47_scz63.stl
│ │ │ │ ├── e57_sds4_shr0_drf0_hlw0_shx0_shy5_scx47_scy63_scz47.stl
│ │ │ │ ├── e58_sds4_shr0_drf0_hlw0_shx0_shy5_scx63_scy47_scz47.stl
│ │ │ │ ├── e67_sds4_shr0_drf0_hlw0_shx0_shy0_scx45_scy61_scz61.stl
│ │ │ │ ├── f23_sds4_shr6_drf0_hlw0_shx0_shy0_scx49_scy50_scz51.stl
│ │ │ │ ├── f26_sds4_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz59.stl
│ │ │ │ ├── f35_sds4_shr6_drf0_hlw0_shx0_shy3_scx49_scy50_scz51.stl
│ │ │ │ ├── f36_sds4_shr6_drf0_hlw0_shx0_shy0_scx48_scy48_scz60.stl
│ │ │ │ ├── f37_sds4_shr6_drf0_hlw0_shx0_shy0_scx48_scy59_scz50.stl
│ │ │ │ ├── f38_sds4_shr6_drf0_hlw0_shx0_shy0_scx58_scy48_scz50.stl
│ │ │ │ ├── f56_sds4_shr0_drf0_hlw0_shx0_shy3_scx48_scy48_scz59.stl
│ │ │ │ ├── f57_sds4_shr0_drf0_hlw0_shx0_shy3_scx48_scy59_scz48.stl
│ │ │ │ ├── f58_sds4_shr0_drf0_hlw0_shx0_shy3_scx59_scy48_scz48.stl
│ │ │ │ ├── f67_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy57_scz57.stl
│ │ │ │ ├── h23_sds5_shr17_drf0_hlw0_shx0_shy0_scx47_scy49_scz54.stl
│ │ │ │ ├── h25_sds5_shr0_drf0_hlw0_shx0_shy9_scx49_scy49_scz50.stl
│ │ │ │ ├── h26_sds5_shr0_drf0_hlw0_shx0_shy0_scx44_scy44_scz72.stl
│ │ │ │ ├── h35_sds4_shr17_drf0_hlw0_shx0_shy9_scx48_scy50_scz54.stl
│ │ │ │ ├── h36_sds4_shr17_drf0_hlw0_shx0_shy0_scx43_scy45_scz77.stl
│ │ │ │ ├── h37_sds4_shr17_drf0_hlw0_shx0_shy0_scx43_scy72_scz50.stl
│ │ │ │ ├── h38_sds4_shr17_drf0_hlw0_shx0_shy0_scx70_scy45_scz50.stl
│ │ │ │ ├── h56_sds4_shr0_drf0_hlw0_shx0_shy9_scx45_scy45_scz72.stl
│ │ │ │ ├── h57_sds4_shr0_drf0_hlw0_shx0_shy9_scx45_scy72_scz45.stl
│ │ │ │ ├── h58_sds4_shr0_drf0_hlw0_shx0_shy9_scx72_scy45_scz45.stl
│ │ │ │ ├── h67_sds4_shr0_drf0_hlw0_shx0_shy0_scx41_scy68_scz68.stl
│ │ │ │ ├── l23_sds5_shr23_drf0_hlw0_shx0_shy0_scx46_scy48_scz56.stl
│ │ │ │ ├── l25_sds5_shr0_drf0_hlw0_shx0_shy13_scx48_scy48_scz50.stl
│ │ │ │ ├── l26_sds5_shr0_drf0_hlw0_shx0_shy0_scx42_scy42_scz81.stl
│ │ │ │ ├── l35_sds4_shr23_drf0_hlw0_shx0_shy13_scx47_scy50_scz56.stl
│ │ │ │ ├── l37_sds4_shr23_drf0_hlw0_shx0_shy0_scx41_scy81_scz50.stl
│ │ │ │ ├── l38_sds4_shr23_drf0_hlw0_shx0_shy0_scx79_scy43_scz50.stl
│ │ │ │ ├── l56_sds4_shr0_drf0_hlw0_shx0_shy13_scx43_scy43_scz81.stl
│ │ │ │ ├── l57_sds4_shr0_drf0_hlw0_shx0_shy13_scx43_scy81_scz43.stl
│ │ │ │ ├── l58_sds4_shr0_drf0_hlw0_shx0_shy13_scx81_scy43_scz43.stl
│ │ │ │ ├── l67_sds4_shr0_drf0_hlw0_shx0_shy0_scx37_scy75_scz75.stl
│ │ │ │ ├── m23_sds6_shr30_drf0_hlw0_shx0_shy0_scx44_scy48_scz58.stl
│ │ │ │ ├── m25_sds6_shr0_drf0_hlw0_shx0_shy17_scx48_scy48_scz50.stl
│ │ │ │ ├── m26_sds6_shr0_drf0_hlw0_shx0_shy0_scx39_scy39_scz90.stl
│ │ │ │ ├── m35_sds4_shr30_drf0_hlw0_shx0_shy17_scx46_scy50_scz58.stl
│ │ │ │ ├── m37_sds4_shr30_drf0_hlw0_shx0_shy0_scx38_scy90_scz50.stl
│ │ │ │ ├── m38_sds4_shr30_drf0_hlw0_shx0_shy0_scx87_scy41_scz50.stl
│ │ │ │ ├── m56_sds4_shr0_drf0_hlw0_shx0_shy17_scx41_scy41_scz90.stl
│ │ │ │ ├── m57_sds4_shr0_drf0_hlw0_shx0_shy17_scx41_scy90_scz41.stl
│ │ │ │ ├── m58_sds4_shr0_drf0_hlw0_shx0_shy17_scx90_scy41_scz41.stl
│ │ │ │ ├── m67_sds4_shr0_drf0_hlw0_shx0_shy0_scx33_scy82_scz82.stl
│ │ │ │ ├── r23_sds7_shr37_drf0_hlw0_shx0_shy0_scx43_scy47_scz60.stl
│ │ │ │ ├── r25_sds7_shr0_drf0_hlw0_shx0_shy21_scx47_scy47_scz50.stl
│ │ │ │ ├── r26_sds7_shr0_drf0_hlw0_shx0_shy0_scx37_scy37_scz100.stl
│ │ │ │ ├── r35_sds4_shr37_drf0_hlw0_shx0_shy21_scx45_scy49_scz60.stl
│ │ │ │ ├── r37_sds4_shr37_drf0_hlw0_shx0_shy0_scx35_scy99_scz50.stl
│ │ │ │ ├── r38_sds4_shr37_drf0_hlw0_shx0_shy0_scx95_scy39_scz50.stl
│ │ │ │ ├── r56_sds4_shr0_drf0_hlw0_shx0_shy21_scx39_scy39_scz100.stl
│ │ │ │ ├── r57_sds4_shr0_drf0_hlw0_shx0_shy21_scx39_scy100_scz39.stl
│ │ │ │ ├── r58_sds4_shr0_drf0_hlw0_shx0_shy21_scx100_scy39_scz39.stl
│ │ │ │ ├── u23_sds5_shr13_drf0_hlw0_shx0_shy0_scx48_scy49_scz53.stl
│ │ │ │ ├── u25_sds5_shr0_drf0_hlw0_shx0_shy7_scx49_scy49_scz50.stl
│ │ │ │ ├── u26_sds5_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz68.stl
│ │ │ │ ├── u35_sds4_shr13_drf0_hlw0_shx0_shy7_scx48_scy50_scz53.stl
│ │ │ │ ├── u36_sds4_shr13_drf0_hlw0_shx0_shy0_scx45_scy46_scz71.stl
│ │ │ │ ├── u37_sds4_shr13_drf0_hlw0_shx0_shy0_scx45_scy68_scz50.stl
│ │ │ │ ├── u38_sds4_shr13_drf0_hlw0_shx0_shy0_scx66_scy46_scz50.stl
│ │ │ │ ├── u56_sds4_shr0_drf0_hlw0_shx0_shy7_scx46_scy46_scz68.stl
│ │ │ │ ├── u57_sds4_shr0_drf0_hlw0_shx0_shy7_scx46_scy68_scz46.stl
│ │ │ │ ├── u58_sds4_shr0_drf0_hlw0_shx0_shy7_scx68_scy46_scz46.stl
│ │ │ │ ├── u67_sds4_shr0_drf0_hlw0_shx0_shy0_scx43_scy64_scz64.stl
│ │ │ │ ├── v23_sds6_shr27_drf0_hlw0_shx0_shy0_scx45_scy48_scz57.stl
│ │ │ │ ├── v25_sds6_shr0_drf0_hlw0_shx0_shy15_scx48_scy48_scz50.stl
│ │ │ │ ├── v26_sds6_shr0_drf0_hlw0_shx0_shy0_scx41_scy41_scz86.stl
│ │ │ │ ├── v35_sds4_shr27_drf0_hlw0_shx0_shy15_scx47_scy50_scz57.stl
│ │ │ │ ├── v37_sds4_shr27_drf0_hlw0_shx0_shy0_scx39_scy86_scz50.stl
│ │ │ │ ├── v38_sds4_shr27_drf0_hlw0_shx0_shy0_scx83_scy42_scz50.stl
│ │ │ │ ├── v56_sds4_shr0_drf0_hlw0_shx0_shy15_scx42_scy42_scz86.stl
│ │ │ │ ├── v57_sds4_shr0_drf0_hlw0_shx0_shy15_scx42_scy86_scz42.stl
│ │ │ │ ├── v58_sds4_shr0_drf0_hlw0_shx0_shy15_scx86_scy42_scz42.stl
│ │ │ │ ├── v67_sds4_shr0_drf0_hlw0_shx0_shy0_scx35_scy78_scz78.stl
│ │ │ │ ├── x23_sds5_shr20_drf0_hlw0_shx0_shy0_scx47_scy49_scz55.stl
│ │ │ │ ├── x25_sds5_shr0_drf0_hlw0_shx0_shy11_scx49_scy49_scz50.stl
│ │ │ │ ├── x26_sds5_shr0_drf0_hlw0_shx0_shy0_scx43_scy43_scz77.stl
│ │ │ │ ├── x35_sds4_shr20_drf0_hlw0_shx0_shy11_scx48_scy50_scz55.stl
│ │ │ │ ├── x36_sds4_shr20_drf0_hlw0_shx0_shy0_scx42_scy44_scz82.stl
│ │ │ │ ├── x37_sds4_shr20_drf0_hlw0_shx0_shy0_scx42_scy77_scz50.stl
│ │ │ │ ├── x38_sds4_shr20_drf0_hlw0_shx0_shy0_scx75_scy44_scz50.stl
│ │ │ │ ├── x56_sds4_shr0_drf0_hlw0_shx0_shy11_scx44_scy44_scz77.stl
│ │ │ │ ├── x57_sds4_shr0_drf0_hlw0_shx0_shy11_scx44_scy77_scz44.stl
│ │ │ │ ├── x58_sds4_shr0_drf0_hlw0_shx0_shy11_scx77_scy44_scz44.stl
│ │ │ │ ├── x67_sds4_shr0_drf0_hlw0_shx0_shy0_scx39_scy71_scz71.stl
│ │ │ │ ├── y23_sds6_shr34_drf0_hlw0_shx0_shy0_scx44_scy48_scz59.stl
│ │ │ │ ├── y25_sds6_shr0_drf0_hlw0_shx0_shy19_scx48_scy48_scz50.stl
│ │ │ │ ├── y26_sds6_shr0_drf0_hlw0_shx0_shy0_scx38_scy38_scz95.stl
│ │ │ │ ├── y35_sds4_shr34_drf0_hlw0_shx0_shy19_scx46_scy50_scz59.stl
│ │ │ │ ├── y37_sds4_shr34_drf0_hlw0_shx0_shy0_scx36_scy95_scz50.stl
│ │ │ │ ├── y38_sds4_shr34_drf0_hlw0_shx0_shy0_scx91_scy40_scz50.stl
│ │ │ │ ├── y56_sds4_shr0_drf0_hlw0_shx0_shy19_scx40_scy40_scz95.stl
│ │ │ │ ├── y57_sds4_shr0_drf0_hlw0_shx0_shy19_scx40_scy95_scz40.stl
│ │ │ │ ├── y58_sds4_shr0_drf0_hlw0_shx0_shy19_scx95_scy40_scz40.stl
│ │ │ │ └── y67_sds4_shr0_drf0_hlw0_shx0_shy0_scx31_scy85_scz85.stl
│ │ ├── doc
│ │ │ └── images
│ │ │ │ ├── rgb_benchmark.png
│ │ │ │ ├── rgb_objects_disk.png
│ │ │ │ ├── rgb_triplet_1.gif
│ │ │ │ ├── rgb_triplet_2.gif
│ │ │ │ ├── rgb_triplet_3.gif
│ │ │ │ ├── rgb_triplet_4.gif
│ │ │ │ ├── rgb_triplet_5.gif
│ │ │ │ ├── tile_axis2.gif
│ │ │ │ ├── tile_axis23.gif
│ │ │ │ ├── tile_axis25.gif
│ │ │ │ ├── tile_axis26.gif
│ │ │ │ ├── tile_axis3.gif
│ │ │ │ ├── tile_axis35.gif
│ │ │ │ ├── tile_axis36.gif
│ │ │ │ ├── tile_axis37.gif
│ │ │ │ ├── tile_axis38.gif
│ │ │ │ ├── tile_axis5.gif
│ │ │ │ ├── tile_axis56.gif
│ │ │ │ ├── tile_axis57.gif
│ │ │ │ ├── tile_axis58.gif
│ │ │ │ ├── tile_axis6.gif
│ │ │ │ ├── tile_axis67.gif
│ │ │ │ └── tile_triplets.gif
│ │ ├── rgb_object.py
│ │ └── rgb_object_test.py
│ └── utils
│ │ ├── mesh_formats_utils.py
│ │ └── test_assets
│ │ └── octahedron.obj
├── requirements.txt
├── requirements_external.txt
├── requirements_test.txt
├── run_tests.py
├── setup.py
├── standard_cell
│ ├── rgb_basket.py
│ ├── rgb_basket_assets
│ │ ├── camera_support_base__1default.stl
│ │ ├── lasercut_basket_part_1__1default.stl
│ │ ├── lasercut_basket_part_1__2default.stl
│ │ ├── lasercut_basket_part_1__3default.stl
│ │ ├── lasercut_basket_part_1__4default.stl
│ │ ├── lasercut_basket_part_2__1default.stl
│ │ ├── lasercut_basket_part_2__4default.stl
│ │ ├── lasercut_basket_part_2__5default.stl
│ │ ├── lasercut_basket_part_2__6default.stl
│ │ ├── lasercut_basket_part_3__1default.stl
│ │ ├── lasercut_basket_part_4__1default.stl
│ │ ├── lasercut_basket_part_4__2default.stl
│ │ ├── lasercut_basket_part_4__3default.stl
│ │ ├── lasercut_basket_part_4__4default.stl
│ │ └── rgb_basket.xml
│ └── rgb_basket_test.py
└── tox.ini
├── moma
├── MANIFEST.in
├── README.md
├── __init__.py
├── action_spaces.py
├── action_spaces_test.py
├── base_task.py
├── base_task_test.py
├── doc
│ └── images
│ │ ├── actions_and_tsps.png
│ │ ├── hardware_abstraction.png
│ │ ├── moma_abstractions.png
│ │ └── moma_logic_flow.png
├── effector.py
├── effectors
│ ├── arm_effector.py
│ ├── arm_effector_test.py
│ ├── cartesian_4d_velocity_effector.py
│ ├── cartesian_4d_velocity_effector_test.py
│ ├── cartesian_6d_velocity_effector.py
│ ├── cartesian_6d_velocity_effector_test.py
│ ├── constrained_actions_effectors.py
│ ├── constrained_actions_effectors_test.py
│ ├── default_gripper_effector.py
│ ├── min_max_effector.py
│ ├── min_max_effector_test.py
│ ├── mujoco_actuation.py
│ └── test_utils.py
├── entity_composer.py
├── entity_initializer.py
├── initializer.py
├── models
│ ├── arenas
│ │ ├── empty.py
│ │ ├── empty_assets
│ │ │ └── arena.xml
│ │ └── empty_test.py
│ ├── end_effectors
│ │ ├── robot_hands
│ │ │ ├── robot_hand.py
│ │ │ ├── robotiq_2f85.py
│ │ │ ├── robotiq_2f85_constants.py
│ │ │ └── robotiq_2f85_test.py
│ │ └── wrist_sensors
│ │ │ ├── robotiq_fts300.py
│ │ │ ├── robotiq_fts300.xml
│ │ │ ├── robotiq_fts300_constants.py
│ │ │ └── robotiq_fts300_test.py
│ ├── robots
│ │ └── robot_arms
│ │ │ ├── robot_arm.py
│ │ │ ├── sawyer.py
│ │ │ ├── sawyer_constants.py
│ │ │ ├── sawyer_constants_test.py
│ │ │ └── sawyer_test.py
│ ├── types.py
│ ├── utils.py
│ └── vendor
│ │ ├── rethink
│ │ ├── LICENSE
│ │ └── sawyer_description
│ │ │ ├── CMakeLists.txt
│ │ │ ├── config
│ │ │ └── sawyer.rviz
│ │ │ ├── launch
│ │ │ └── test_sawyer_description.launch.test
│ │ │ ├── meshes
│ │ │ ├── sawyer_ft
│ │ │ │ ├── PEDESTAL.DAE
│ │ │ │ ├── PEDESTAL.STL
│ │ │ │ ├── base.DAE
│ │ │ │ ├── base.STL
│ │ │ │ ├── head.DAE
│ │ │ │ ├── head.STL
│ │ │ │ ├── l0.DAE
│ │ │ │ ├── l0.STL
│ │ │ │ ├── l1.DAE
│ │ │ │ ├── l1.STL
│ │ │ │ ├── l2.DAE
│ │ │ │ ├── l2.STL
│ │ │ │ ├── l3.DAE
│ │ │ │ ├── l3.STL
│ │ │ │ ├── l4.DAE
│ │ │ │ ├── l4.STL
│ │ │ │ ├── l5.DAE
│ │ │ │ ├── l5.STL
│ │ │ │ ├── l6.DAE
│ │ │ │ └── l6.STL
│ │ │ ├── sawyer_mp1
│ │ │ │ ├── l6.DAE
│ │ │ │ └── l6.STL
│ │ │ ├── sawyer_mp3
│ │ │ │ ├── l0.DAE
│ │ │ │ ├── l0.STL
│ │ │ │ ├── l1.DAE
│ │ │ │ └── l1.STL
│ │ │ └── sawyer_pv
│ │ │ │ ├── base.DAE
│ │ │ │ ├── base.STL
│ │ │ │ ├── head.DAE
│ │ │ │ ├── head.STL
│ │ │ │ ├── l0.DAE
│ │ │ │ ├── l0.STL
│ │ │ │ ├── l1.DAE
│ │ │ │ ├── l1.STL
│ │ │ │ ├── l2.DAE
│ │ │ │ ├── l2.STL
│ │ │ │ ├── l3.DAE
│ │ │ │ ├── l3.STL
│ │ │ │ ├── l4.DAE
│ │ │ │ ├── l4.STL
│ │ │ │ ├── l5.DAE
│ │ │ │ ├── l5.STL
│ │ │ │ ├── l6.DAE
│ │ │ │ ├── l6.STL
│ │ │ │ ├── pedestal.DAE
│ │ │ │ └── pedestal.STL
│ │ │ ├── mjcf
│ │ │ ├── README.md
│ │ │ ├── sawyer.xml
│ │ │ ├── sawyer_pedestal.xml
│ │ │ ├── sawyer_position_actuators.xml
│ │ │ ├── sawyer_torque_actuators.xml
│ │ │ └── sawyer_velocity_actuators.xml
│ │ │ ├── package.xml
│ │ │ ├── params
│ │ │ └── named_poses.yaml
│ │ │ └── urdf
│ │ │ └── sawyer.urdf
│ │ ├── robotiq_beta_robots
│ │ ├── LICENSE
│ │ ├── mujoco
│ │ │ ├── robotiq_2f85.xml
│ │ │ └── robotiq_2f85_v2.xml
│ │ └── robotiq_2f_model
│ │ │ ├── README.md
│ │ │ ├── media
│ │ │ ├── coarse_collision.png
│ │ │ ├── precise_collision.png
│ │ │ └── visual.png
│ │ │ └── model
│ │ │ ├── meshes
│ │ │ └── 2f85
│ │ │ │ ├── collision
│ │ │ │ ├── base.stl
│ │ │ │ ├── base_mount.stl
│ │ │ │ ├── coupler.stl
│ │ │ │ ├── driver.stl
│ │ │ │ ├── finger_pad_v2.stl
│ │ │ │ ├── fingertip_pad_v2.stl
│ │ │ │ ├── fingertip_v2.stl
│ │ │ │ ├── follower.stl
│ │ │ │ ├── follower_v2.stl
│ │ │ │ ├── pad.stl
│ │ │ │ ├── pad_mod.stl
│ │ │ │ ├── reinforced_fingertip.stl
│ │ │ │ ├── silicon_pad.stl
│ │ │ │ └── spring_link.stl
│ │ │ │ └── visual
│ │ │ │ ├── base.dae
│ │ │ │ ├── coupler.dae
│ │ │ │ ├── driver.dae
│ │ │ │ ├── follower.dae
│ │ │ │ ├── pad.dae
│ │ │ │ └── spring_link.dae
│ │ │ ├── robotiq_2f_140.urdf.xacro
│ │ │ └── robotiq_2f_85.urdf.xacro
│ │ └── ros_robotiq
│ │ ├── LICENSE
│ │ └── robotiq_force_torque_sensor
│ │ └── meshes
│ │ └── visual
│ │ ├── robotiq_fts150.stl
│ │ ├── robotiq_fts150_base.stl
│ │ ├── robotiq_fts150_top.stl
│ │ ├── robotiq_fts300.stl
│ │ ├── robotiq_fts300_base.stl
│ │ ├── robotiq_fts300_coupling.stl
│ │ └── robotiq_fts300_top.stl
├── moma_option.py
├── moma_option_test.py
├── moma_tutorial.ipynb
├── prop.py
├── requirements.txt
├── requirements_external.txt
├── robot.py
├── run_tests.py
├── scene_initializer.py
├── sensor.py
├── sensors
│ ├── action_sensor.py
│ ├── action_sensor_test.py
│ ├── camera_sensor.py
│ ├── camera_sensor_test.py
│ ├── external_value_sensor.py
│ ├── external_value_sensor_test.py
│ ├── generic_pose_sensor.py
│ ├── generic_pose_sensor_test.py
│ ├── joint_observations.py
│ ├── mujoco_utils.py
│ ├── prop_pose_sensor.py
│ ├── prop_pose_sensor_test.py
│ ├── robot_arm_sensor.py
│ ├── robot_arm_sensor_test.py
│ ├── robot_tcp_sensor.py
│ ├── robot_tcp_sensor_test.py
│ ├── robot_wrist_ft_sensor.py
│ ├── robot_wrist_ft_sensor_test.py
│ ├── robotiq_gripper_observations.py
│ ├── robotiq_gripper_sensor.py
│ ├── robotiq_gripper_sensor_integration_test.py
│ ├── robotiq_gripper_sensor_test.py
│ ├── site_sensor.py
│ ├── site_sensor_test.py
│ └── wrench_observations.py
├── setup.py
├── subtask_env.py
├── subtask_env_builder.py
├── subtask_env_test.py
├── subtask_test.py
├── tasks
│ ├── README
│ ├── example_task
│ │ ├── example_task.py
│ │ ├── example_task_test.py
│ │ ├── run.py
│ │ └── task_builder.py
│ ├── run_loop.py
│ └── run_loop_test.py
├── tox.ini
└── utils
│ ├── ik_solver.py
│ ├── ik_solver_test.py
│ ├── mujoco_collisions.py
│ ├── mujoco_collisions_test.py
│ ├── mujoco_rendering.py
│ ├── mujoco_rendering_test.py
│ ├── pose_utils.py
│ └── pose_utils_test.py
├── transformations
├── MANIFEST.in
├── README.md
├── __init__.py
├── _transformations.py
├── _transformations_quat.py
├── _types.py
├── jax_transformations
│ ├── transformations.py
│ └── transformations_test.py
├── requirements.txt
├── setup.py
├── tox.ini
├── transformations.py
└── transformations_test.py
└── vision
├── README.md
├── __init__.py
├── blob_detector.py
├── blob_tracker_object_defs.py
├── blob_triangulation_node.py
├── config_blob_detector.py
├── config_blob_triangulation.py
├── detector.py
├── detector_node.py
├── launch_blob_detector.py
├── launch_blob_triangulation.py
├── robot_config.py
├── ros_utils.py
├── ros_utils_test.py
├── triangulation.py
├── triangulation_test.py
├── types.py
├── utils.py
└── utils_test.py
/CITATION.cff:
--------------------------------------------------------------------------------
1 | cff-version: 1.2.0
2 | message: "If you use this software, please cite it as below."
3 | authors:
4 | - family-names: Barker
5 | given-names: Dave
6 | - family-names: Blokzijl
7 | given-names: Michiel
8 | - family-names: Chen
9 | given-names: Jose Enrique
10 | - family-names: Fantacci
11 | given-names: Claudio
12 | - family-names: Jeong
13 | given-names: Rae
14 | - family-names: Khosid
15 | given-names: David
16 | - family-names: Laurens
17 | given-names: Antoine
18 | - family-names: Pevceviciute
19 | given-names: Rugile
20 | - family-names: Raju
21 | given-names: Akhil
22 | - family-names: Regli
23 | given-names: Jean-Baptiste
24 | - family-names: Scholz
25 | given-names: Jon
26 | - family-names: Sushkov
27 | given-names: Oleg
28 | title: "dm\_robotics: Libraries, tools, and tasks created and used for robotics research at DeepMind"
29 | version: 0.01
30 | date-released: 2021-07-29
31 | url: "https://github.com/deepmind/dm_robotics"
32 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to Contribute
2 |
3 | We'd love to accept your patches and contributions to this project. There are
4 | just a few small guidelines you need to follow.
5 |
6 | ## Contributor License Agreement
7 |
8 | Contributions to this project must be accompanied by a Contributor License
9 | Agreement (CLA). You (or your employer) retain the copyright to your
10 | contribution; this simply gives us permission to use and redistribute your
11 | contributions as part of the project. Head over to
12 | to see your current agreements on file or
13 | to sign a new one.
14 |
15 | You generally only need to submit a CLA once, so if you've already submitted one
16 | (even if it was for a different project), you probably don't need to do it
17 | again.
18 |
19 | ## Code reviews
20 |
21 | All submissions, including submissions by project members, require review. We
22 | use GitHub pull requests for this purpose. Consult
23 | [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
24 | information on using pull requests.
25 |
26 | ## Community Guidelines
27 |
28 | This project follows
29 | [Google's Open Source Community Guidelines](https://opensource.google/conduct/).
30 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 |
--------------------------------------------------------------------------------
/cpp/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to Contribute
2 |
3 | We'd love to accept your patches and contributions to this project. There are
4 | just a few small guidelines you need to follow.
5 |
6 | ## Contributor License Agreement
7 |
8 | Contributions to this project must be accompanied by a Contributor License
9 | Agreement (CLA). You (or your employer) retain the copyright to your
10 | contribution; this simply gives us permission to use and redistribute your
11 | contributions as part of the project. Head over to
12 | to see your current agreements on file or
13 | to sign a new one.
14 |
15 | You generally only need to submit a CLA once, so if you've already submitted one
16 | (even if it was for a different project), you probably don't need to do it
17 | again.
18 |
19 | ## Code reviews
20 |
21 | All submissions, including submissions by project members, require review. We
22 | use GitHub pull requests for this purpose. Consult
23 | [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
24 | information on using pull requests.
25 |
26 | ## Community Guidelines
27 |
28 | This project follows
29 | [Google's Open Source Community Guidelines](https://opensource.google/conduct/).
30 |
--------------------------------------------------------------------------------
/cpp/controllers/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | cmake_minimum_required(VERSION 3.5)
16 | project(dmr_controllers
17 | DESCRIPTION "DM Robotics: Controllers Library"
18 | VERSION 0.1
19 | )
20 |
21 | add_subdirectory(lsqp)
22 |
--------------------------------------------------------------------------------
/cpp/controllers_py/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 |
--------------------------------------------------------------------------------
/cpp/controllers_py/pybind_utils.h:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited.
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef DM_ROBOTICS_PY_CONTROLLERS_PYBIND_UTILS_H_
16 | #define DM_ROBOTICS_PY_CONTROLLERS_PYBIND_UTILS_H_
17 |
18 | #include "absl/strings/string_view.h"
19 | #include "mujoco/mujoco.h"
20 | #include "pybind11/pytypes.h" // pybind
21 |
22 | namespace dm_robotics::internal {
23 |
24 | // Raises a `RuntimeError` exception in Python with the message `message`.
25 | void RaiseRuntimeErrorWithMessage(absl::string_view message);
26 |
27 | // Extracts an mjModel pointer from a Python handle to a mujoco or dm_control
28 | // `MjModel` object. Raises a `RuntimeError` exception in Python if it fails to
29 | // extract an mjModel object from the handle.
30 | //
31 | // Note that this does not increment the reference count.
32 | const mjModel* GetmjModelOrRaise(pybind11::handle obj);
33 |
34 | // Extracts an mjData pointer from a Python handle to a mujoco or dm_control
35 | // `MjData` object. Raises a `RuntimeError` exception in Python if it fails to
36 | // extract an mjData object from the handle.
37 | //
38 | // Note that this does not increment the reference count.
39 | const mjData* GetmjDataOrRaise(pybind11::handle obj);
40 |
41 | } // namespace dm_robotics::internal
42 |
43 | #endif // DM_ROBOTICS_PY_CONTROLLERS_PYBIND_UTILS_H_
44 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | cmake_minimum_required(VERSION 3.5)
16 | project(dmr_lsqp
17 | DESCRIPTION "DM Robotics: Least Squares Quadratic Optimization Library"
18 | VERSION 0.1
19 | )
20 |
21 | add_subdirectory(core)
22 |
23 | if (DM_ROBOTICS_BUILD_TESTS)
24 | add_subdirectory(testing)
25 | endif()
26 |
27 | add_subdirectory(common)
28 |
29 | if (DM_ROBOTICS_BUILD_EXAMPLES)
30 | add_subdirectory(examples)
31 | endif()
32 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/common/include/dm_robotics/least_squares_qp/common/box_constraint.h:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef DM_ROBOTICS_LEAST_SQUARES_QP_COMMON_BOX_CONSTRAINT_H_
16 | #define DM_ROBOTICS_LEAST_SQUARES_QP_COMMON_BOX_CONSTRAINT_H_
17 |
18 | #include
19 |
20 | #include "absl/types/span.h"
21 | #include "dm_robotics/least_squares_qp/common/identity_constraint.h"
22 |
23 | namespace dm_robotics {
24 |
25 | // Constraint that bounds the solution vector to be within an n-dimensional box.
26 | // One-sided bounds can be implemented by setting the opposite bound to
27 | // std::numeric_limits::infinity.
28 | class BoxConstraint : public IdentityConstraint {
29 | public:
30 | // Check-fails if both arrays are not the same size, or if any element in
31 | // `lower_bound` is greater than the respective element in `upper_bound`.
32 | BoxConstraint(absl::Span lower_bound,
33 | absl::Span upper_bound);
34 |
35 | // IdentityConstraint virtual members.
36 | absl::Span GetLowerBound() const override;
37 | absl::Span GetUpperBound() const override;
38 |
39 | private:
40 | std::vector lower_bound_;
41 | std::vector upper_bound_;
42 | };
43 |
44 | } // namespace dm_robotics
45 |
46 | #endif // DM_ROBOTICS_LEAST_SQUARES_QP_COMMON_BOX_CONSTRAINT_H_
47 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/common/include/dm_robotics/least_squares_qp/common/math_utils.h:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef DM_ROBOTICS_LEAST_SQUARES_QP_COMMON_MATH_UTILS_H_
16 | #define DM_ROBOTICS_LEAST_SQUARES_QP_COMMON_MATH_UTILS_H_
17 |
18 | #include
19 |
20 | namespace dm_robotics {
21 |
22 | // Returns an identity matrix for a given size.
23 | std::vector MakeIdentityMatrix(int size);
24 |
25 | } // namespace dm_robotics
26 |
27 | #endif // DM_ROBOTICS_LEAST_SQUARES_QP_COMMON_MATH_UTILS_H_
28 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/common/src/math_utils.cc:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #include "dm_robotics/least_squares_qp/common/math_utils.h"
16 |
17 | #include
18 |
19 | #include "Eigen/Core"
20 |
21 | namespace dm_robotics {
22 |
23 | std::vector MakeIdentityMatrix(int size) {
24 | std::vector identity_matrix(size * size);
25 | Eigen::Map(identity_matrix.data(), size, size).setIdentity();
26 | return identity_matrix;
27 | }
28 |
29 | } // namespace dm_robotics
30 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/common/tests/identity_task_test.cc:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #include "dm_robotics/least_squares_qp/common/identity_task.h"
16 |
17 | #include
18 |
19 | #include "dm_robotics/support/status-matchers.h"
20 | #include "gmock/gmock.h"
21 | #include "gtest/gtest.h"
22 | #include "dm_robotics/least_squares_qp/common/math_utils.h"
23 | #include "dm_robotics/least_squares_qp/testing/matchers.h"
24 |
25 | namespace dm_robotics {
26 | namespace {
27 |
28 | using ::dm_robotics::testing::LsqpTaskDimensionsAreValid;
29 | using ::testing::DoubleEq;
30 | using ::testing::Pointwise;
31 |
32 | TEST(IdentityTaskTest, CoefficientMatrixAndBiasHaveValidDimensionsAndValues) {
33 | const std::vector kTarget = {-5, -3, -1, 1, 3, 5};
34 | const IdentityTask task(kTarget);
35 |
36 | EXPECT_THAT(task, LsqpTaskDimensionsAreValid());
37 | EXPECT_THAT(task.GetBias(), Pointwise(DoubleEq(), kTarget));
38 | EXPECT_THAT(task.GetCoefficientMatrix(),
39 | Pointwise(DoubleEq(), MakeIdentityMatrix(kTarget.size())));
40 | }
41 |
42 | } // namespace
43 | } // namespace dm_robotics
44 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/common/tests/minimize_norm_task_test.cc:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #include "dm_robotics/least_squares_qp/common/minimize_norm_task.h"
16 |
17 | #include "dm_robotics/support/status-matchers.h"
18 | #include "gmock/gmock.h"
19 | #include "gtest/gtest.h"
20 | #include "dm_robotics/least_squares_qp/common/math_utils.h"
21 | #include "dm_robotics/least_squares_qp/testing/matchers.h"
22 |
23 | namespace dm_robotics {
24 | namespace {
25 |
26 | using ::dm_robotics::testing::LsqpTaskDimensionsAreValid;
27 | using ::testing::DoubleEq;
28 | using ::testing::Each;
29 | using ::testing::Pointwise;
30 |
31 | TEST(MinimizeNormTaskTest,
32 | CoefficientMatrixAndBiasHaveValidDimensionsAndValues) {
33 | const int kNumDof = 777;
34 | const MinimizeNormTask task(kNumDof);
35 |
36 | EXPECT_THAT(task, LsqpTaskDimensionsAreValid());
37 | EXPECT_EQ(task.GetNumberOfDof(), kNumDof);
38 | EXPECT_THAT(task.GetBias(), Each(DoubleEq(0.0)));
39 | EXPECT_THAT(task.GetCoefficientMatrix(),
40 | Pointwise(DoubleEq(), MakeIdentityMatrix(kNumDof)));
41 | }
42 |
43 | } // namespace
44 | } // namespace dm_robotics
45 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/core/include/dm_robotics/least_squares_qp/core/utils.h:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef LEARNING_DEEPMIND_ROBOTICS_LEAST_SQUARES_QP_CORE_UTILS_H_
16 | #define LEARNING_DEEPMIND_ROBOTICS_LEAST_SQUARES_QP_CORE_UTILS_H_
17 |
18 | #include
19 | #include
20 |
21 | #include "absl/types/span.h"
22 |
23 | namespace dm_robotics {
24 |
25 | // Copies the array referred to by an absl::Span object into a newly
26 | // allocated std::vector object, where U is the same type as T with its
27 | // topmost cv-qualifiers removed.
28 | //
29 | // Example usage:
30 | // absl::Span span = ...;
31 | // std::vector copy = AsCopy(span);
32 | template >>
33 | std::vector, Alloc> AsCopy(absl::Span s,
34 | const Alloc& alloc = Alloc()) {
35 | return std::vector, Alloc>(s.begin(), s.end(), alloc);
36 | }
37 |
38 | } // namespace dm_robotics
39 |
40 | #endif // LEARNING_DEEPMIND_ROBOTICS_LEAST_SQUARES_QP_CORE_UTILS_H_
41 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/examples/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # LSQP examples
16 |
17 | add_executable(dmr_lsqp_core_example
18 | ${CMAKE_CURRENT_SOURCE_DIR}/core_example.cc
19 | )
20 | target_link_libraries(dmr_lsqp_core_example
21 | absl::span
22 | absl::hash
23 | absl::hashtablez_sampler
24 | absl::strings
25 | absl::status
26 | absl::statusor
27 | dmr_support
28 | dmr_lsqp_core
29 | Eigen3::Eigen
30 | )
31 |
32 | add_executable(dmr_lsqp_common_example
33 | ${CMAKE_CURRENT_SOURCE_DIR}/common_example.cc
34 | )
35 | target_link_libraries(dmr_lsqp_common_example
36 | absl::span
37 | absl::hash
38 | absl::hashtablez_sampler
39 | absl::strings
40 | absl::status
41 | absl::statusor
42 | dmr_support
43 | dmr_lsqp_core
44 | dmr_lsqp_common
45 | )
46 |
--------------------------------------------------------------------------------
/cpp/least_squares_qp/testing/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # LSQP Testing library
16 |
17 | # Library
18 | set(HDRS
19 | ${CMAKE_CURRENT_SOURCE_DIR}/include/dm_robotics/least_squares_qp/testing/matchers.h
20 | )
21 | add_library(dmr_lsqp_testing)
22 | set_target_properties(dmr_lsqp_testing PROPERTIES LINKER_LANGUAGE CXX)
23 | target_sources(dmr_lsqp_testing PUBLIC ${HDRS})
24 | target_include_directories(dmr_lsqp_core
25 | PUBLIC
26 | $
27 | $
28 | PRIVATE
29 | ${CMAKE_CURRENT_SOURCE_DIR}/src
30 | )
31 | target_link_libraries(dmr_lsqp_testing
32 | PUBLIC
33 | gtest
34 | gmock
35 | gtest_main
36 | absl::strings
37 | dmr_lsqp_core
38 | )
39 |
40 |
--------------------------------------------------------------------------------
/cpp/mujoco/README.md:
--------------------------------------------------------------------------------
1 | # MuJoCo utilities for DeepMind Robotics
2 |
3 | MuJoCo utilities and helper functions for DeepMind Robotics.
4 |
--------------------------------------------------------------------------------
/cpp/mujoco/cmake/defs.h.in:
--------------------------------------------------------------------------------
1 | #ifndef LEARNING_DEEPMIND_ROBOTICS_MUJOCO_DEFS_H_
2 | #define LEARNING_DEEPMIND_ROBOTICS_MUJOCO_DEFS_H_
3 |
4 | // Users must specify this constant through
5 | // CMake if they wish to run the tests and examples provided with this library.
6 | #cmakedefine DMR_DMCONTROL_SUITE_HUMANOID_XML_PATH "@DMR_DMCONTROL_SUITE_HUMANOID_XML_PATH@"
7 |
8 | inline constexpr char kDmControlSuiteHumanoidXmlPath[] =
9 | DMR_DMCONTROL_SUITE_HUMANOID_XML_PATH;
10 |
11 | #undef DMR_DMCONTROL_SUITE_HUMANOID_XML_PATH
12 |
13 | #endif // LEARNING_DEEPMIND_ROBOTICS_MUJOCO_DEFS_H_
14 |
--------------------------------------------------------------------------------
/cpp/mujoco/include/dm_robotics/mujoco/test_with_mujoco_model.h:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef DM_ROBOTICS_MUJOCO_TEST_WITH_MUJOCO_MODEL_H_
16 | #define DM_ROBOTICS_MUJOCO_TEST_WITH_MUJOCO_MODEL_H_
17 |
18 | #include
19 |
20 | #include "gtest/gtest.h"
21 | #include "absl/strings/string_view.h"
22 | #include //NOLINT
23 |
24 | namespace dm_robotics::testing {
25 |
26 | // Fixture for MuJoCo tests with an mjModel and mjData object.
27 | class TestWithMujocoModel : public ::testing::Test {
28 | private:
29 | struct MjModelDeleter {
30 | void operator()(mjModel* p) const { mj_deleteModel(p); }
31 | };
32 | struct MjDataDeleter {
33 | void operator()(mjData* p) const { mj_deleteData(p); }
34 | };
35 |
36 | protected:
37 | // Loads a new MuJoCo XML into `model_` and re-initializes `data_`.
38 | void LoadModelFromXmlPath(absl::string_view path_to_xml);
39 |
40 | std::unique_ptr model_;
41 | std::unique_ptr data_;
42 | };
43 |
44 | } // namespace dm_robotics::testing
45 |
46 | #endif // DM_ROBOTICS_MUJOCO_TEST_WITH_MUJOCO_MODEL_H_
47 |
--------------------------------------------------------------------------------
/cpp/mujoco/include/dm_robotics/mujoco/types.h:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #ifndef DM_ROBOTICS_MUJOCO_TYPES_H_
16 | #define DM_ROBOTICS_MUJOCO_TYPES_H_
17 |
18 | #include
19 | #include
20 |
21 | #include "absl/container/btree_set.h"
22 |
23 | namespace dm_robotics {
24 |
25 | // A GeomGroup defines a set of geoms by their names.
26 | using GeomGroup = absl::btree_set;
27 |
28 | // A CollisionPair defines a set of two geom groups that should avoid each
29 | // other, i.e. every geom of the first group should avoid every geom of the
30 | // second group, and vice versa.
31 | using CollisionPair = std::pair;
32 |
33 | } // namespace dm_robotics
34 |
35 | #endif // DM_ROBOTICS_MUJOCO_TYPES_H_
36 |
--------------------------------------------------------------------------------
/cpp/mujoco/tests/test_with_mujoco_model_test.cc:
--------------------------------------------------------------------------------
1 | // Copyright 2020 DeepMind Technologies Limited
2 | //
3 | // Licensed under the Apache License, Version 2.0 (the "License");
4 | // you may not use this file except in compliance with the License.
5 | // You may obtain a copy of the License at
6 | //
7 | // https://www.apache.org/licenses/LICENSE-2.0
8 | //
9 | // Unless required by applicable law or agreed to in writing, software
10 | // distributed under the License is distributed on an "AS IS" BASIS,
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | // See the License for the specific language governing permissions and
13 | // limitations under the License.
14 |
15 | #include "dm_robotics/mujoco/test_with_mujoco_model.h"
16 |
17 | #include "dm_robotics/support/status-matchers.h"
18 | #include "gmock/gmock.h"
19 | #include "gtest/gtest.h"
20 | #include "dm_robotics/mujoco/defs.h"
21 |
22 | namespace dm_robotics::testing {
23 | namespace {
24 |
25 | using ::testing::IsNull;
26 | using ::testing::NotNull;
27 |
28 | TEST_F(TestWithMujocoModel, MjModelAndDataNotNull) {
29 | EXPECT_THAT(model_, IsNull());
30 | EXPECT_THAT(data_, IsNull());
31 |
32 | LoadModelFromXmlPath(kDmControlSuiteHumanoidXmlPath);
33 | EXPECT_THAT(model_, NotNull());
34 | EXPECT_THAT(data_, NotNull());
35 | }
36 |
37 | } // namespace
38 | } // namespace dm_robotics::testing
39 |
--------------------------------------------------------------------------------
/cpp/requirements_external.txt:
--------------------------------------------------------------------------------
1 | numpy >= 1.16.0, < 2.0
2 | setuptools >= 38.6.0
3 | pkginfo >= 1.4.2
4 | wheel >= 0.31.0
5 | dm_control == 1.0.15
6 | mujoco == 3.1.6
7 |
--------------------------------------------------------------------------------
/cpp/support/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | cmake_minimum_required(VERSION 3.5)
16 | project(dmr_support
17 | DESCRIPTION "DM Robotics: Infrastructure support library"
18 | VERSION 0.1
19 | )
20 |
21 | # This is a header-only library.
22 | set(HDRS
23 | ${CMAKE_CURRENT_SOURCE_DIR}/include/dm_robotics/support/logging.h
24 | ${CMAKE_CURRENT_SOURCE_DIR}/include/dm_robotics/support/status_macros.h
25 | ${CMAKE_CURRENT_SOURCE_DIR}/include/dm_robotics/support/status-matchers.h
26 | )
27 | add_library(dmr_support INTERFACE)
28 | target_sources(dmr_support INTERFACE ${HDRS})
29 | target_include_directories(dmr_support
30 | INTERFACE
31 | $
32 | )
33 | target_link_libraries(dmr_support
34 | INTERFACE
35 | absl::status
36 | absl::statusor
37 | )
38 |
--------------------------------------------------------------------------------
/py/agentflow/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include requirements*.txt
2 |
3 |
--------------------------------------------------------------------------------
/py/agentflow/README.md:
--------------------------------------------------------------------------------
1 | # AgentFlow: A Modular Toolkit for Scalable RL Research
2 |
3 |
4 |
5 | ## Overview
6 |
7 | `AgentFlow` is a library for composing Reinforcement-Learning agents. The core
8 | features that AgentFlow provides are:
9 |
10 | 1. tools for slicing, transforming, and composing *specs*
11 | 2. tools for encapsulating and composing RL-tasks.
12 |
13 | Unlike the standard RL setup, which assumes a single environment and an agent,
14 | `AgentFlow` is designed for the single-embodiment, multiple-task regime. This
15 | was motivated by the robotics use-case, which frequently requires training RL
16 | modules for various skills, and then composing them (possibly with non-learned
17 | controllers too).
18 |
19 | Instead of having to implement a separate RL environment for each skill and
20 | combine them ad hoc, with `AgentFlow` you can define one or more `SubTasks`
21 | which *modify* a timestep from a single top-level environment, e.g. adding
22 | observations and defining rewards, or isolating a particular sub-system of the
23 | environment, such as a robot arm.
24 |
25 | You then *compose* SubTasks with regular RL-agents to form modules, and use a
26 | set of graph-building operators to define the flow of these modules over time
27 | (hence the name `AgentFlow`).
28 |
29 | The graph-building step is entirely optional, and is intended only for use-cases
30 | that require something like a (possibly learnable, possibly stochastic)
31 | state-machine.
32 |
33 |
34 | ### [Components](docs/components.md)
35 | ### [Control Flow](docs/control_flow.md)
36 | ### [Examples](docs/examples.md)
37 |
38 |
--------------------------------------------------------------------------------
/py/agentflow/docs/control_flow.md:
--------------------------------------------------------------------------------
1 | # Control-Flow Ops Examples w/ rendering.
2 |
3 | ## Examples
4 |
5 | The control_flow directory contains several examples for how to build and
6 | visualize AgentFlow graphs that use control flow options.
7 |
8 | ### simple_insertion.py
9 |
10 | This example uses `Cond`, `Repeat`, and `Sequence` to construct a graph for a
11 | plug-insertion experiment which combines a single learner with a set of scripted
12 | behaviors.
13 |
14 |
15 |
16 | 
17 |
18 | The code to create these options is:
19 |
20 | ```python
21 | # Use some AgentFlow operators to embed the agent in a bigger agent.
22 | # First use Cond to op run learned-agent if sufficiently close.
23 | reach_or_insert_op = af.Cond(
24 | cond=near_socket,
25 | true_branch=learned_insert_option,
26 | false_branch=reach_option,
27 | name='Reach or Insert')
28 |
29 | # Loop the insert-or-reach option 5 times.
30 | reach_and_insert_5x = af.Repeat(
31 | 5, reach_or_insert_op, name='Retry Loop')
32 |
33 | loop_body = af.Sequence([
34 | scripted_reset,
35 | reach_and_insert_5x,
36 | af.Cond(
37 | cond=last_option_successful,
38 | true_branch=extract_option,
39 | false_branch=recovery_option,
40 | name='post-insert')
41 | ])
42 | main_loop = af.While(lambda _: True, loop_body)
43 | ```
44 |
--------------------------------------------------------------------------------
/py/agentflow/docs/example_agentflow_controlflow_graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/agentflow/docs/example_agentflow_controlflow_graph.png
--------------------------------------------------------------------------------
/py/agentflow/loggers/print_logger.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # python3
16 | """A rudimentary logging class that outputs data as strings."""
17 |
18 | from typing import Any, Callable, Mapping, Optional
19 | import numpy as np
20 |
21 |
22 | class PrintLogger:
23 | """Serializes logging vales to strings and prints them."""
24 |
25 | def __init__(
26 | self,
27 | print_fn: Callable[[str], None] = print,
28 | serialize_fn: Optional[Callable[[Mapping[str, Any]], str]] = None,
29 | ):
30 | """Initializes the logger.
31 |
32 | Args:
33 | print_fn: function to call which acts like print.
34 | serialize_fn: function to call which formats a values dict.
35 | """
36 |
37 | self._print_fn = print_fn
38 | self._serialize_fn = serialize_fn or _serialize
39 |
40 | def write(self, values: Mapping[str, Any]):
41 | self._print_fn(self._serialize_fn(values))
42 |
43 |
44 | def _format_value(value: Any) -> str:
45 | if isinstance(value, (float, np.number)):
46 | return f'{value:0.3f}'
47 | return str(value)
48 |
49 |
50 | def _serialize(values: Mapping[str, Any]) -> str:
51 | return ', '.join(
52 | f'{k} = {_format_value(v)}' for k, v in sorted(values.items()))
53 |
--------------------------------------------------------------------------------
/py/agentflow/loggers/types.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """The Logger type."""
16 |
17 | from typing import Any, Mapping
18 | import typing_extensions
19 |
20 |
21 | @typing_extensions.runtime
22 | class Logger(typing_extensions.Protocol):
23 |
24 | def write(self, data: Mapping[str, Any]) -> None:
25 | pass
26 |
--------------------------------------------------------------------------------
/py/agentflow/loggers/utils.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # python3
16 | """Utilities for subtask logging."""
17 |
18 | from typing import Sequence
19 |
20 |
21 | def compute_return(episode_rewards: Sequence[float],
22 | episode_discounts: Sequence[float]) -> float:
23 | """Computes the return of an episode from a list of rewards and discounts."""
24 | if len(episode_rewards) <= 0:
25 | raise ValueError('Length of episode_rewards must be greater than zero.')
26 | if len(episode_discounts) <= 0:
27 | raise ValueError('Length of episode_discounts must be greater than zero.')
28 | if len(episode_rewards) != len(episode_discounts):
29 | raise ValueError('episode_rewards and episode_discounts must be same length'
30 | ' but are {episode_rewards} and {episode_discounts}')
31 | episode_return = episode_rewards[0]
32 | total_discount = episode_discounts[0]
33 | for reward, discount in zip(episode_rewards[1:],
34 | episode_discounts[1:]):
35 | episode_return += reward * total_discount
36 | total_discount *= discount
37 |
38 | return episode_return
39 |
--------------------------------------------------------------------------------
/py/agentflow/loggers/utils_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | # python3
16 | """Tests for dm_robotics.agentflow.logging.utils."""
17 |
18 | from absl.testing import absltest
19 | from absl.testing import parameterized
20 | from dm_robotics.agentflow.loggers import utils
21 | import numpy as np
22 |
23 |
24 | class UtilsTest(parameterized.TestCase):
25 |
26 | @parameterized.named_parameters(
27 | ('simple', [0., 1., 2.], [1., 1., 0.], 0.9),
28 | ('random', np.random.rand(3), np.random.rand(3), np.random.rand(1)),
29 | )
30 | def test_compute_return(self, rewards, discounts, additional_discount):
31 | actual_return = utils.compute_return(
32 | rewards,
33 | np.asarray(discounts) * additional_discount)
34 | expected_return = (
35 | rewards[0] + rewards[1] * discounts[0] * additional_discount +
36 | rewards[2] * discounts[0] * discounts[1] * additional_discount**2)
37 | np.testing.assert_almost_equal(actual_return, expected_return)
38 |
39 |
40 | if __name__ == '__main__':
41 | absltest.main()
42 |
--------------------------------------------------------------------------------
/py/agentflow/meta_options/control_flow/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Control-flow module."""
16 | from dm_robotics.agentflow.meta_options.control_flow.cond import Cond
17 | from dm_robotics.agentflow.meta_options.control_flow.loop_ops import Repeat
18 | from dm_robotics.agentflow.meta_options.control_flow.loop_ops import While
19 | from dm_robotics.agentflow.meta_options.control_flow.sequence import Sequence
20 |
--------------------------------------------------------------------------------
/py/agentflow/requirements.txt:
--------------------------------------------------------------------------------
1 | -r requirements_external.txt
2 | dm_robotics-transformations
3 | dm_robotics-geometry
4 |
--------------------------------------------------------------------------------
/py/agentflow/requirements_external.txt:
--------------------------------------------------------------------------------
1 | numpy >= 1.16.0, < 2.0
2 | dm_control == 1.0.15
3 | mujoco == 3.1.6
4 | opencv-python >= 3.4.0
5 | attrs >= 20.3.0
6 | pydot >= 1.2.4
7 | typing-extensions >= 3.7.4
8 |
--------------------------------------------------------------------------------
/py/agentflow/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | # NB: these tests depend on dm_transformations and dm_geometry being available in ../dist
3 | envlist = build,test
4 | distshare = ../dist
5 |
6 | [testenv:build]
7 | deps =
8 | {distshare}/dm_robotics*transformations-*.zip
9 | {distshare}/dm_robotics*geometry-*.zip
10 | -r requirements_external.txt
11 | setuptools
12 | passenv = MJLIB_PATH
13 | commands = python setup.py sdist bdist_wheel
14 |
15 |
16 | [testenv:test]
17 | whitelist_externals = /bin/sh
18 | deps =
19 | {distshare}/dm_robotics*transformations-*.zip
20 | {distshare}/dm_robotics*geometry-*.zip
21 | -r requirements_external.txt
22 | passenv = MJLIB_PATH
23 | commands = python run_tests.py .
24 |
25 | # This test command runs each test in a separate process.
26 | # This is important because spec_utils has a flag and global counter that
27 | # switches off validation after some time because it's too slow for
28 | # high-frequency control. However, the test is checking that validation, so
29 | # it must not be switched off for the test.
30 | # Making a separate process for each test resets that counter.
31 | # It is also good for test isolation.
32 | #
33 | # This command also includes 'set -e'
34 | # This is also critical, it means that the shell will exit when any command
35 | # it runs fails. If this is not set, then a test failure in the for loop will
36 | # be ignored, meaning the test command would always succeed, even if a test it
37 | # ran failed.
38 |
39 |
--------------------------------------------------------------------------------
/py/geometry/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include requirements*.txt
2 |
3 |
--------------------------------------------------------------------------------
/py/geometry/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
--------------------------------------------------------------------------------
/py/geometry/jax_geometry/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2024 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Top level interface for the geometry module."""
16 |
17 | from dm_robotics.geometry.jax_geometry import basic_types
18 | from dm_robotics.geometry.jax_geometry import camera
19 | from dm_robotics.geometry.jax_geometry import pointcloud_stamped
20 |
21 | Camera = camera.Camera
22 | Raster = basic_types.Raster
23 | Point = basic_types.Point
24 | Cloud = basic_types.Cloud
25 | PointRaster = basic_types.PointRaster
26 | PointCloud = basic_types.PointCloud
27 | PointCloudStamped = pointcloud_stamped.PointCloudStamped
28 | Image = basic_types.Image
29 | DepthMap = basic_types.DepthMap
30 | Frame = basic_types.Frame
31 |
32 | del basic_types, camera, pointcloud_stamped
33 |
--------------------------------------------------------------------------------
/py/geometry/observation_physics_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | """Tests for observation_physics."""
15 |
16 | from absl.testing import absltest
17 | from dm_robotics.geometry import geometry
18 | from dm_robotics.geometry import observation_physics
19 | import numpy as np
20 |
21 |
22 | class ObservationPhysicsTest(absltest.TestCase):
23 |
24 | def test_happy_path(self):
25 | physics = observation_physics.ObservationPhysics(
26 | geometry.Pose.from_poseuler)
27 | raw_data = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
28 | physics.set_observation({'pose1': np.asarray(raw_data)})
29 | self.assertEqual(
30 | physics.world_pose('pose1'), geometry.Pose.from_poseuler(raw_data))
31 |
32 | def test_missing(self):
33 | physics = observation_physics.ObservationPhysics(
34 | geometry.Pose.from_poseuler)
35 | raw_data = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
36 | physics.set_observation({'pose1': np.asarray(raw_data)})
37 | with self.assertRaises(ValueError):
38 | physics.world_pose('pose2')
39 |
40 |
41 | if __name__ == '__main__':
42 | absltest.main()
43 |
--------------------------------------------------------------------------------
/py/geometry/requirements.txt:
--------------------------------------------------------------------------------
1 | -r requirements_external.txt
2 | dm_robotics-transformations
3 |
--------------------------------------------------------------------------------
/py/geometry/requirements_external.txt:
--------------------------------------------------------------------------------
1 | numpy >= 1.16.0, < 2.0
2 | dm_control == 1.0.15
3 | mujoco == 3.1.6
4 | six >= 1.16.0
5 | chex >= 0.1.7 # Last version to support Python 3.8.
6 |
--------------------------------------------------------------------------------
/py/geometry/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | # NB: these tests depend on dm_transformations being available in ../dist
3 | envlist = build,test
4 | distshare = ../dist
5 |
6 | [testenv:build]
7 | deps =
8 | {distshare}/dm_robotics*transformations-*.zip
9 | -rrequirements_external.txt
10 | setuptools
11 | passenv = MJLIB_PATH
12 | commands = python setup.py sdist bdist_wheel
13 |
14 |
15 | [testenv:test]
16 | deps =
17 | {distshare}/dm_robotics*transformations-*.zip
18 | -r requirements_external.txt
19 | passenv = MJLIB_PATH
20 | commands = python -m unittest discover -p '*_test.py'
21 |
--------------------------------------------------------------------------------
/py/integration_test/generate_requirements_txt.py:
--------------------------------------------------------------------------------
1 | # Copyright 2021 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | """Generate a requirements.txt file with the artifacts in ../dist/.
15 |
16 | This ensures tox/pip will test with these, rather than with some from
17 | pypi. This currently assumes that ../dist only contains one version of
18 | each dm_robotics library.
19 | """
20 |
21 | import glob
22 | import os
23 | import pathlib
24 |
25 |
26 | _CURRENT_FILE_DIR = pathlib.Path(os.path.dirname(os.path.realpath(__file__)))
27 |
28 |
29 | if __name__ == '__main__':
30 | with open(_CURRENT_FILE_DIR / 'requirements.txt', 'w') as f:
31 | for artifact in glob.glob('../dist/*.zip'):
32 | f.write(artifact + os.linesep)
33 | for artifact in glob.glob('../dist/*manylinux2014_x86_64.whl'):
34 | f.write(artifact + os.linesep)
35 |
--------------------------------------------------------------------------------
/py/integration_test/requirements_external.txt:
--------------------------------------------------------------------------------
1 | # Other important libraries we want to remain compatible with
2 | tensorflow >= 2.6.0
3 | jax[cpu] >= 0.2.17
4 |
--------------------------------------------------------------------------------
/py/integration_test/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | envlist=build,test
3 | distshare=../dist
4 | # There's no package to build in this directory
5 | skipsdist=True
6 |
7 | [testenv:build]
8 | commands = python generate_requirements_txt.py
9 |
10 | # Test that dm_robotics can be installed at the same time as important
11 | # libraries like tensorflow & jax
12 | [testenv:test]
13 | deps =
14 | -r requirements.txt
15 | -r requirements_external.txt
16 | commands = python -c "print('Dependencies compatible.')"
17 |
18 |
--------------------------------------------------------------------------------
/py/manipulation/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include requirements*.txt
2 | recursive-include props/rgb_objects/assets *
3 | recursive-include props/utils/test_assets *
4 | recursive-include standard_cell/rgb_basket_assets *
5 |
--------------------------------------------------------------------------------
/py/manipulation/README.md:
--------------------------------------------------------------------------------
1 | # Objects for robotic manipulation
2 |
3 |
4 |
5 | This folder provides various physical objects and software utilities used to
6 | build simulated environments for robotic manipulation.
7 |
8 | #### Cell for robotic manipulation
9 | Contains assets and code to create a robotic cell in simulated environments.
10 |
11 | #### Parametric objects documentation
12 | Infrastructure to design families of parametric objects.
13 |
14 | #### [RGB-objects 🛑🟩🔷 documentation](props/rgb_objects/README.md)
15 | Contains assets and supported code that allows using the RGB-objects in
16 | simulated environments. The RGB-objects is a set of parametric objects crafted
17 | for [RGB-stacking][rgb_stacking] manipulation tasks.
18 |
19 |
20 |
21 |
22 |
23 | [rgb_stacking]: https://github.com/deepmind/rgb_stacking
24 |
--------------------------------------------------------------------------------
/py/manipulation/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # https://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e2_sds5_shr0_drf0_hlw0_shx0_shy0_scx49_scy49_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e2_sds5_shr0_drf0_hlw0_shx0_shy0_scx49_scy49_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e3_sds4_shr20_drf0_hlw0_shx0_shy0_scx48_scy50_scz55.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e3_sds4_shr20_drf0_hlw0_shx0_shy0_scx48_scy50_scz55.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e5_sds4_shr0_drf0_hlw0_shx0_shy11_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e5_sds4_shr0_drf0_hlw0_shx0_shy11_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e6_sds4_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz77.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/e6_sds4_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz77.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f2_sds5_shr0_drf0_hlw0_shx0_shy0_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f2_sds5_shr0_drf0_hlw0_shx0_shy0_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f3_sds4_shr13_drf0_hlw0_shx0_shy0_scx49_scy50_scz53.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f3_sds4_shr13_drf0_hlw0_shx0_shy0_scx49_scy50_scz53.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f5_sds4_shr0_drf0_hlw0_shx0_shy7_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f5_sds4_shr0_drf0_hlw0_shx0_shy7_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f6_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz68.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/f6_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz68.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h2_sds6_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h2_sds6_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h3_sds4_shr34_drf0_hlw0_shx0_shy0_scx46_scy50_scz59.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h3_sds4_shr34_drf0_hlw0_shx0_shy0_scx46_scy50_scz59.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h5_sds4_shr0_drf0_hlw0_shx0_shy19_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h5_sds4_shr0_drf0_hlw0_shx0_shy19_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h6_sds4_shr0_drf0_hlw0_shx0_shy0_scx41_scy41_scz95.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/h6_sds4_shr0_drf0_hlw0_shx0_shy0_scx41_scy41_scz95.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l2_sds7_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l2_sds7_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l3_sds4_shr47_drf0_hlw0_shx0_shy0_scx45_scy50_scz63.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l3_sds4_shr47_drf0_hlw0_shx0_shy0_scx45_scy50_scz63.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l5_sds4_shr0_drf0_hlw0_shx0_shy26_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l5_sds4_shr0_drf0_hlw0_shx0_shy26_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l6_sds4_shr0_drf0_hlw0_shx0_shy0_scx37_scy37_scz113.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/l6_sds4_shr0_drf0_hlw0_shx0_shy0_scx37_scy37_scz113.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m2_sds8_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m2_sds8_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m3_sds4_shr61_drf0_hlw0_shx0_shy0_scx43_scy50_scz67.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m3_sds4_shr61_drf0_hlw0_shx0_shy0_scx43_scy50_scz67.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m5_sds4_shr0_drf0_hlw0_shx0_shy34_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m5_sds4_shr0_drf0_hlw0_shx0_shy34_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m6_sds4_shr0_drf0_hlw0_shx0_shy0_scx33_scy33_scz131.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/m6_sds4_shr0_drf0_hlw0_shx0_shy0_scx33_scy33_scz131.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u2_sds6_shr0_drf0_hlw0_shx0_shy0_scx49_scy49_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u2_sds6_shr0_drf0_hlw0_shx0_shy0_scx49_scy49_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u3_sds4_shr27_drf0_hlw0_shx0_shy0_scx47_scy50_scz57.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u3_sds4_shr27_drf0_hlw0_shx0_shy0_scx47_scy50_scz57.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u5_sds4_shr0_drf0_hlw0_shx0_shy15_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u5_sds4_shr0_drf0_hlw0_shx0_shy15_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u6_sds4_shr0_drf0_hlw0_shx0_shy0_scx43_scy43_scz86.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/u6_sds4_shr0_drf0_hlw0_shx0_shy0_scx43_scy43_scz86.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v2_sds8_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v2_sds8_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v3_sds4_shr54_drf0_hlw0_shx0_shy0_scx44_scy50_scz65.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v3_sds4_shr54_drf0_hlw0_shx0_shy0_scx44_scy50_scz65.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v5_sds4_shr0_drf0_hlw0_shx0_shy30_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v5_sds4_shr0_drf0_hlw0_shx0_shy30_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v6_sds4_shr0_drf0_hlw0_shx0_shy0_scx35_scy35_scz122.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/v6_sds4_shr0_drf0_hlw0_shx0_shy0_scx35_scy35_scz122.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x2_sds7_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x2_sds7_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x3_sds4_shr40_drf0_hlw0_shx0_shy0_scx46_scy50_scz61.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x3_sds4_shr40_drf0_hlw0_shx0_shy0_scx46_scy50_scz61.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x5_sds4_shr0_drf0_hlw0_shx0_shy22_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x5_sds4_shr0_drf0_hlw0_shx0_shy22_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x6_sds4_shr0_drf0_hlw0_shx0_shy0_scx39_scy39_scz104.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/x6_sds4_shr0_drf0_hlw0_shx0_shy0_scx39_scy39_scz104.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y2_sds9_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y2_sds9_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y3_sds4_shr68_drf0_hlw0_shx0_shy0_scx42_scy50_scz69.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y3_sds4_shr68_drf0_hlw0_shx0_shy0_scx42_scy50_scz69.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y5_sds4_shr0_drf0_hlw0_shx0_shy38_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y5_sds4_shr0_drf0_hlw0_shx0_shy38_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y6_sds4_shr0_drf0_hlw0_shx0_shy0_scx31_scy31_scz140.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/heldout/y6_sds4_shr0_drf0_hlw0_shx0_shy0_scx31_scy31_scz140.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b2_sds8_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b2_sds8_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b3_sds4_shr48_drf0_hlw0_shx0_shy0_scx46_scy49_scz63.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b3_sds4_shr48_drf0_hlw0_shx0_shy0_scx46_scy49_scz63.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b5_sds4_shr0_drf0_hlw0_shx0_shy31_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b5_sds4_shr0_drf0_hlw0_shx0_shy31_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b6_sds4_shr0_drf0_hlw0_shx0_shy0_scx32_scy48_scz96.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/b6_sds4_shr0_drf0_hlw0_shx0_shy0_scx32_scy48_scz96.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g2_sds6_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g2_sds6_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g3_sds4_shr25_drf0_hlw0_shx0_shy0_scx51_scy51_scz60.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g3_sds4_shr25_drf0_hlw0_shx0_shy0_scx51_scy51_scz60.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g5_sds4_shr0_drf0_hlw0_shx0_shy20_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g5_sds4_shr0_drf0_hlw0_shx0_shy20_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g6_sds4_shr0_drf0_hlw0_shx0_shy0_scx40_scy56_scz80.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/g6_sds4_shr0_drf0_hlw0_shx0_shy0_scx40_scy56_scz80.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r2_sds10_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r2_sds10_shr0_drf0_hlw0_shx0_shy0_scx45_scy45_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r3_sds4_shr75_drf0_hlw0_shx0_shy0_scx41_scy49_scz71.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r3_sds4_shr75_drf0_hlw0_shx0_shy0_scx41_scy49_scz71.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r5_sds4_shr0_drf0_hlw0_shx0_shy42_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r5_sds4_shr0_drf0_hlw0_shx0_shy42_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r6_sds4_shr0_drf0_hlw0_shx0_shy0_scx29_scy29_scz150.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/r6_sds4_shr0_drf0_hlw0_shx0_shy0_scx29_scy29_scz150.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/s0_sds4_shr0_drf0_hlw0_shx0_shy0_scx50_scy50_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/test_triplets/s0_sds4_shr0_drf0_hlw0_shx0_shy0_scx50_scy50_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e23_sds4_shr10_drf0_hlw0_shx0_shy0_scx48_scy49_scz52.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e23_sds4_shr10_drf0_hlw0_shx0_shy0_scx48_scy49_scz52.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e25_sds4_shr0_drf0_hlw0_shx0_shy5_scx49_scy49_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e25_sds4_shr0_drf0_hlw0_shx0_shy5_scx49_scy49_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e26_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz63.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e26_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy47_scz63.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e35_sds4_shr10_drf0_hlw0_shx0_shy5_scx49_scy50_scz52.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e35_sds4_shr10_drf0_hlw0_shx0_shy5_scx49_scy50_scz52.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e36_sds4_shr10_drf0_hlw0_shx0_shy0_scx46_scy47_scz66.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e36_sds4_shr10_drf0_hlw0_shx0_shy0_scx46_scy47_scz66.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e37_sds4_shr10_drf0_hlw0_shx0_shy0_scx46_scy63_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e37_sds4_shr10_drf0_hlw0_shx0_shy0_scx46_scy63_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e38_sds4_shr10_drf0_hlw0_shx0_shy0_scx62_scy47_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e38_sds4_shr10_drf0_hlw0_shx0_shy0_scx62_scy47_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e56_sds4_shr0_drf0_hlw0_shx0_shy5_scx47_scy47_scz63.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e56_sds4_shr0_drf0_hlw0_shx0_shy5_scx47_scy47_scz63.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e57_sds4_shr0_drf0_hlw0_shx0_shy5_scx47_scy63_scz47.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e57_sds4_shr0_drf0_hlw0_shx0_shy5_scx47_scy63_scz47.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e58_sds4_shr0_drf0_hlw0_shx0_shy5_scx63_scy47_scz47.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e58_sds4_shr0_drf0_hlw0_shx0_shy5_scx63_scy47_scz47.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e67_sds4_shr0_drf0_hlw0_shx0_shy0_scx45_scy61_scz61.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/e67_sds4_shr0_drf0_hlw0_shx0_shy0_scx45_scy61_scz61.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f23_sds4_shr6_drf0_hlw0_shx0_shy0_scx49_scy50_scz51.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f23_sds4_shr6_drf0_hlw0_shx0_shy0_scx49_scy50_scz51.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f26_sds4_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz59.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f26_sds4_shr0_drf0_hlw0_shx0_shy0_scx48_scy48_scz59.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f35_sds4_shr6_drf0_hlw0_shx0_shy3_scx49_scy50_scz51.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f35_sds4_shr6_drf0_hlw0_shx0_shy3_scx49_scy50_scz51.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f36_sds4_shr6_drf0_hlw0_shx0_shy0_scx48_scy48_scz60.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f36_sds4_shr6_drf0_hlw0_shx0_shy0_scx48_scy48_scz60.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f37_sds4_shr6_drf0_hlw0_shx0_shy0_scx48_scy59_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f37_sds4_shr6_drf0_hlw0_shx0_shy0_scx48_scy59_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f38_sds4_shr6_drf0_hlw0_shx0_shy0_scx58_scy48_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f38_sds4_shr6_drf0_hlw0_shx0_shy0_scx58_scy48_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f56_sds4_shr0_drf0_hlw0_shx0_shy3_scx48_scy48_scz59.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f56_sds4_shr0_drf0_hlw0_shx0_shy3_scx48_scy48_scz59.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f57_sds4_shr0_drf0_hlw0_shx0_shy3_scx48_scy59_scz48.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f57_sds4_shr0_drf0_hlw0_shx0_shy3_scx48_scy59_scz48.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f58_sds4_shr0_drf0_hlw0_shx0_shy3_scx59_scy48_scz48.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f58_sds4_shr0_drf0_hlw0_shx0_shy3_scx59_scy48_scz48.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f67_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy57_scz57.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/f67_sds4_shr0_drf0_hlw0_shx0_shy0_scx47_scy57_scz57.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h23_sds5_shr17_drf0_hlw0_shx0_shy0_scx47_scy49_scz54.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h23_sds5_shr17_drf0_hlw0_shx0_shy0_scx47_scy49_scz54.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h25_sds5_shr0_drf0_hlw0_shx0_shy9_scx49_scy49_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h25_sds5_shr0_drf0_hlw0_shx0_shy9_scx49_scy49_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h26_sds5_shr0_drf0_hlw0_shx0_shy0_scx44_scy44_scz72.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h26_sds5_shr0_drf0_hlw0_shx0_shy0_scx44_scy44_scz72.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h35_sds4_shr17_drf0_hlw0_shx0_shy9_scx48_scy50_scz54.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h35_sds4_shr17_drf0_hlw0_shx0_shy9_scx48_scy50_scz54.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h36_sds4_shr17_drf0_hlw0_shx0_shy0_scx43_scy45_scz77.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h36_sds4_shr17_drf0_hlw0_shx0_shy0_scx43_scy45_scz77.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h37_sds4_shr17_drf0_hlw0_shx0_shy0_scx43_scy72_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h37_sds4_shr17_drf0_hlw0_shx0_shy0_scx43_scy72_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h38_sds4_shr17_drf0_hlw0_shx0_shy0_scx70_scy45_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h38_sds4_shr17_drf0_hlw0_shx0_shy0_scx70_scy45_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h56_sds4_shr0_drf0_hlw0_shx0_shy9_scx45_scy45_scz72.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h56_sds4_shr0_drf0_hlw0_shx0_shy9_scx45_scy45_scz72.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h57_sds4_shr0_drf0_hlw0_shx0_shy9_scx45_scy72_scz45.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h57_sds4_shr0_drf0_hlw0_shx0_shy9_scx45_scy72_scz45.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h58_sds4_shr0_drf0_hlw0_shx0_shy9_scx72_scy45_scz45.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h58_sds4_shr0_drf0_hlw0_shx0_shy9_scx72_scy45_scz45.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h67_sds4_shr0_drf0_hlw0_shx0_shy0_scx41_scy68_scz68.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/h67_sds4_shr0_drf0_hlw0_shx0_shy0_scx41_scy68_scz68.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l23_sds5_shr23_drf0_hlw0_shx0_shy0_scx46_scy48_scz56.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l23_sds5_shr23_drf0_hlw0_shx0_shy0_scx46_scy48_scz56.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l25_sds5_shr0_drf0_hlw0_shx0_shy13_scx48_scy48_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l25_sds5_shr0_drf0_hlw0_shx0_shy13_scx48_scy48_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l26_sds5_shr0_drf0_hlw0_shx0_shy0_scx42_scy42_scz81.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l26_sds5_shr0_drf0_hlw0_shx0_shy0_scx42_scy42_scz81.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l35_sds4_shr23_drf0_hlw0_shx0_shy13_scx47_scy50_scz56.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l35_sds4_shr23_drf0_hlw0_shx0_shy13_scx47_scy50_scz56.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l37_sds4_shr23_drf0_hlw0_shx0_shy0_scx41_scy81_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l37_sds4_shr23_drf0_hlw0_shx0_shy0_scx41_scy81_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l38_sds4_shr23_drf0_hlw0_shx0_shy0_scx79_scy43_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l38_sds4_shr23_drf0_hlw0_shx0_shy0_scx79_scy43_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l56_sds4_shr0_drf0_hlw0_shx0_shy13_scx43_scy43_scz81.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l56_sds4_shr0_drf0_hlw0_shx0_shy13_scx43_scy43_scz81.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l57_sds4_shr0_drf0_hlw0_shx0_shy13_scx43_scy81_scz43.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l57_sds4_shr0_drf0_hlw0_shx0_shy13_scx43_scy81_scz43.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l58_sds4_shr0_drf0_hlw0_shx0_shy13_scx81_scy43_scz43.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l58_sds4_shr0_drf0_hlw0_shx0_shy13_scx81_scy43_scz43.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l67_sds4_shr0_drf0_hlw0_shx0_shy0_scx37_scy75_scz75.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/l67_sds4_shr0_drf0_hlw0_shx0_shy0_scx37_scy75_scz75.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m23_sds6_shr30_drf0_hlw0_shx0_shy0_scx44_scy48_scz58.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m23_sds6_shr30_drf0_hlw0_shx0_shy0_scx44_scy48_scz58.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m25_sds6_shr0_drf0_hlw0_shx0_shy17_scx48_scy48_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m25_sds6_shr0_drf0_hlw0_shx0_shy17_scx48_scy48_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m26_sds6_shr0_drf0_hlw0_shx0_shy0_scx39_scy39_scz90.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m26_sds6_shr0_drf0_hlw0_shx0_shy0_scx39_scy39_scz90.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m35_sds4_shr30_drf0_hlw0_shx0_shy17_scx46_scy50_scz58.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m35_sds4_shr30_drf0_hlw0_shx0_shy17_scx46_scy50_scz58.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m37_sds4_shr30_drf0_hlw0_shx0_shy0_scx38_scy90_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m37_sds4_shr30_drf0_hlw0_shx0_shy0_scx38_scy90_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m38_sds4_shr30_drf0_hlw0_shx0_shy0_scx87_scy41_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m38_sds4_shr30_drf0_hlw0_shx0_shy0_scx87_scy41_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m56_sds4_shr0_drf0_hlw0_shx0_shy17_scx41_scy41_scz90.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m56_sds4_shr0_drf0_hlw0_shx0_shy17_scx41_scy41_scz90.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m57_sds4_shr0_drf0_hlw0_shx0_shy17_scx41_scy90_scz41.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m57_sds4_shr0_drf0_hlw0_shx0_shy17_scx41_scy90_scz41.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m58_sds4_shr0_drf0_hlw0_shx0_shy17_scx90_scy41_scz41.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m58_sds4_shr0_drf0_hlw0_shx0_shy17_scx90_scy41_scz41.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m67_sds4_shr0_drf0_hlw0_shx0_shy0_scx33_scy82_scz82.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/m67_sds4_shr0_drf0_hlw0_shx0_shy0_scx33_scy82_scz82.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r23_sds7_shr37_drf0_hlw0_shx0_shy0_scx43_scy47_scz60.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r23_sds7_shr37_drf0_hlw0_shx0_shy0_scx43_scy47_scz60.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r25_sds7_shr0_drf0_hlw0_shx0_shy21_scx47_scy47_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r25_sds7_shr0_drf0_hlw0_shx0_shy21_scx47_scy47_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r26_sds7_shr0_drf0_hlw0_shx0_shy0_scx37_scy37_scz100.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r26_sds7_shr0_drf0_hlw0_shx0_shy0_scx37_scy37_scz100.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r35_sds4_shr37_drf0_hlw0_shx0_shy21_scx45_scy49_scz60.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r35_sds4_shr37_drf0_hlw0_shx0_shy21_scx45_scy49_scz60.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r37_sds4_shr37_drf0_hlw0_shx0_shy0_scx35_scy99_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r37_sds4_shr37_drf0_hlw0_shx0_shy0_scx35_scy99_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r38_sds4_shr37_drf0_hlw0_shx0_shy0_scx95_scy39_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r38_sds4_shr37_drf0_hlw0_shx0_shy0_scx95_scy39_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r56_sds4_shr0_drf0_hlw0_shx0_shy21_scx39_scy39_scz100.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r56_sds4_shr0_drf0_hlw0_shx0_shy21_scx39_scy39_scz100.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r57_sds4_shr0_drf0_hlw0_shx0_shy21_scx39_scy100_scz39.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r57_sds4_shr0_drf0_hlw0_shx0_shy21_scx39_scy100_scz39.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r58_sds4_shr0_drf0_hlw0_shx0_shy21_scx100_scy39_scz39.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/r58_sds4_shr0_drf0_hlw0_shx0_shy21_scx100_scy39_scz39.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u23_sds5_shr13_drf0_hlw0_shx0_shy0_scx48_scy49_scz53.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u23_sds5_shr13_drf0_hlw0_shx0_shy0_scx48_scy49_scz53.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u25_sds5_shr0_drf0_hlw0_shx0_shy7_scx49_scy49_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u25_sds5_shr0_drf0_hlw0_shx0_shy7_scx49_scy49_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u26_sds5_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz68.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u26_sds5_shr0_drf0_hlw0_shx0_shy0_scx46_scy46_scz68.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u35_sds4_shr13_drf0_hlw0_shx0_shy7_scx48_scy50_scz53.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u35_sds4_shr13_drf0_hlw0_shx0_shy7_scx48_scy50_scz53.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u36_sds4_shr13_drf0_hlw0_shx0_shy0_scx45_scy46_scz71.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u36_sds4_shr13_drf0_hlw0_shx0_shy0_scx45_scy46_scz71.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u37_sds4_shr13_drf0_hlw0_shx0_shy0_scx45_scy68_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u37_sds4_shr13_drf0_hlw0_shx0_shy0_scx45_scy68_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u38_sds4_shr13_drf0_hlw0_shx0_shy0_scx66_scy46_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u38_sds4_shr13_drf0_hlw0_shx0_shy0_scx66_scy46_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u56_sds4_shr0_drf0_hlw0_shx0_shy7_scx46_scy46_scz68.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u56_sds4_shr0_drf0_hlw0_shx0_shy7_scx46_scy46_scz68.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u57_sds4_shr0_drf0_hlw0_shx0_shy7_scx46_scy68_scz46.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u57_sds4_shr0_drf0_hlw0_shx0_shy7_scx46_scy68_scz46.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u58_sds4_shr0_drf0_hlw0_shx0_shy7_scx68_scy46_scz46.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u58_sds4_shr0_drf0_hlw0_shx0_shy7_scx68_scy46_scz46.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u67_sds4_shr0_drf0_hlw0_shx0_shy0_scx43_scy64_scz64.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/u67_sds4_shr0_drf0_hlw0_shx0_shy0_scx43_scy64_scz64.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v23_sds6_shr27_drf0_hlw0_shx0_shy0_scx45_scy48_scz57.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v23_sds6_shr27_drf0_hlw0_shx0_shy0_scx45_scy48_scz57.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v25_sds6_shr0_drf0_hlw0_shx0_shy15_scx48_scy48_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v25_sds6_shr0_drf0_hlw0_shx0_shy15_scx48_scy48_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v26_sds6_shr0_drf0_hlw0_shx0_shy0_scx41_scy41_scz86.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v26_sds6_shr0_drf0_hlw0_shx0_shy0_scx41_scy41_scz86.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v35_sds4_shr27_drf0_hlw0_shx0_shy15_scx47_scy50_scz57.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v35_sds4_shr27_drf0_hlw0_shx0_shy15_scx47_scy50_scz57.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v37_sds4_shr27_drf0_hlw0_shx0_shy0_scx39_scy86_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v37_sds4_shr27_drf0_hlw0_shx0_shy0_scx39_scy86_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v38_sds4_shr27_drf0_hlw0_shx0_shy0_scx83_scy42_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v38_sds4_shr27_drf0_hlw0_shx0_shy0_scx83_scy42_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v56_sds4_shr0_drf0_hlw0_shx0_shy15_scx42_scy42_scz86.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v56_sds4_shr0_drf0_hlw0_shx0_shy15_scx42_scy42_scz86.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v57_sds4_shr0_drf0_hlw0_shx0_shy15_scx42_scy86_scz42.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v57_sds4_shr0_drf0_hlw0_shx0_shy15_scx42_scy86_scz42.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v58_sds4_shr0_drf0_hlw0_shx0_shy15_scx86_scy42_scz42.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v58_sds4_shr0_drf0_hlw0_shx0_shy15_scx86_scy42_scz42.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v67_sds4_shr0_drf0_hlw0_shx0_shy0_scx35_scy78_scz78.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/v67_sds4_shr0_drf0_hlw0_shx0_shy0_scx35_scy78_scz78.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x23_sds5_shr20_drf0_hlw0_shx0_shy0_scx47_scy49_scz55.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x23_sds5_shr20_drf0_hlw0_shx0_shy0_scx47_scy49_scz55.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x25_sds5_shr0_drf0_hlw0_shx0_shy11_scx49_scy49_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x25_sds5_shr0_drf0_hlw0_shx0_shy11_scx49_scy49_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x26_sds5_shr0_drf0_hlw0_shx0_shy0_scx43_scy43_scz77.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x26_sds5_shr0_drf0_hlw0_shx0_shy0_scx43_scy43_scz77.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x35_sds4_shr20_drf0_hlw0_shx0_shy11_scx48_scy50_scz55.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x35_sds4_shr20_drf0_hlw0_shx0_shy11_scx48_scy50_scz55.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x36_sds4_shr20_drf0_hlw0_shx0_shy0_scx42_scy44_scz82.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x36_sds4_shr20_drf0_hlw0_shx0_shy0_scx42_scy44_scz82.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x37_sds4_shr20_drf0_hlw0_shx0_shy0_scx42_scy77_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x37_sds4_shr20_drf0_hlw0_shx0_shy0_scx42_scy77_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x38_sds4_shr20_drf0_hlw0_shx0_shy0_scx75_scy44_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x38_sds4_shr20_drf0_hlw0_shx0_shy0_scx75_scy44_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x56_sds4_shr0_drf0_hlw0_shx0_shy11_scx44_scy44_scz77.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x56_sds4_shr0_drf0_hlw0_shx0_shy11_scx44_scy44_scz77.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x57_sds4_shr0_drf0_hlw0_shx0_shy11_scx44_scy77_scz44.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x57_sds4_shr0_drf0_hlw0_shx0_shy11_scx44_scy77_scz44.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x58_sds4_shr0_drf0_hlw0_shx0_shy11_scx77_scy44_scz44.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x58_sds4_shr0_drf0_hlw0_shx0_shy11_scx77_scy44_scz44.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x67_sds4_shr0_drf0_hlw0_shx0_shy0_scx39_scy71_scz71.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/x67_sds4_shr0_drf0_hlw0_shx0_shy0_scx39_scy71_scz71.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y23_sds6_shr34_drf0_hlw0_shx0_shy0_scx44_scy48_scz59.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y23_sds6_shr34_drf0_hlw0_shx0_shy0_scx44_scy48_scz59.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y25_sds6_shr0_drf0_hlw0_shx0_shy19_scx48_scy48_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y25_sds6_shr0_drf0_hlw0_shx0_shy19_scx48_scy48_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y26_sds6_shr0_drf0_hlw0_shx0_shy0_scx38_scy38_scz95.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y26_sds6_shr0_drf0_hlw0_shx0_shy0_scx38_scy38_scz95.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y35_sds4_shr34_drf0_hlw0_shx0_shy19_scx46_scy50_scz59.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y35_sds4_shr34_drf0_hlw0_shx0_shy19_scx46_scy50_scz59.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y37_sds4_shr34_drf0_hlw0_shx0_shy0_scx36_scy95_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y37_sds4_shr34_drf0_hlw0_shx0_shy0_scx36_scy95_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y38_sds4_shr34_drf0_hlw0_shx0_shy0_scx91_scy40_scz50.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y38_sds4_shr34_drf0_hlw0_shx0_shy0_scx91_scy40_scz50.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y56_sds4_shr0_drf0_hlw0_shx0_shy19_scx40_scy40_scz95.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y56_sds4_shr0_drf0_hlw0_shx0_shy19_scx40_scy40_scz95.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y57_sds4_shr0_drf0_hlw0_shx0_shy19_scx40_scy95_scz40.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y57_sds4_shr0_drf0_hlw0_shx0_shy19_scx40_scy95_scz40.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y58_sds4_shr0_drf0_hlw0_shx0_shy19_scx95_scy40_scz40.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y58_sds4_shr0_drf0_hlw0_shx0_shy19_scx95_scy40_scz40.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y67_sds4_shr0_drf0_hlw0_shx0_shy0_scx31_scy85_scz85.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/assets/rgb_v1.3/meshes/train/y67_sds4_shr0_drf0_hlw0_shx0_shy0_scx31_scy85_scz85.stl
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/rgb_benchmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/rgb_benchmark.png
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/rgb_objects_disk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/rgb_objects_disk.png
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_1.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_2.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_3.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_4.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/rgb_triplet_5.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis2.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis23.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis23.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis25.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis25.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis26.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis26.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis3.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis35.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis35.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis36.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis36.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis37.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis37.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis38.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis38.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis5.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis56.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis56.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis57.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis57.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis58.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis58.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis6.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis6.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_axis67.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_axis67.gif
--------------------------------------------------------------------------------
/py/manipulation/props/rgb_objects/doc/images/tile_triplets.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/props/rgb_objects/doc/images/tile_triplets.gif
--------------------------------------------------------------------------------
/py/manipulation/props/utils/test_assets/octahedron.obj:
--------------------------------------------------------------------------------
1 | # Octahedron.
2 |
3 | # List of geometric vertices.
4 | v -1 0 0
5 | v 0 1 0
6 | v 1 0 0
7 | v 0 -1 0
8 | v 0 0 -1
9 | v 0 0 1
10 |
11 | # List of texture coordinates, in (u, [,v ,w]) coordinates.
12 | vt 0.500 1
13 | vt 0.500 1
14 | vt 0.500 1
15 | vt 0.500 1
16 | vt 0.500 1
17 | vt 0.500 1
18 |
19 | # Polygonal face element.
20 | f 1/1 4/4 6/6
21 | f 2/2 1/1 6/6
22 | f 3/3 2/2 6/6
23 | f 4/4 3/3 6/6
24 | f 1/1 2/2 5/5
25 | f 2/2 3/3 5/5
26 | f 3/3 4/4 5/5
27 | f 4/4 1/1 5/5
28 |
--------------------------------------------------------------------------------
/py/manipulation/requirements.txt:
--------------------------------------------------------------------------------
1 | -r requirements_external.txt
2 | dm_robotics-transformations
3 | dm_robotics-geometry
4 | dm_robotics-agentflow
5 | dm_robotics-controllers
6 | dm_robotics-moma
7 |
--------------------------------------------------------------------------------
/py/manipulation/requirements_external.txt:
--------------------------------------------------------------------------------
1 | absl-py >= 0.9.0
2 | numpy >= 1.16.0, < 2.0
3 | typing-extensions >= 3.7.4
4 | dm_control == 1.0.15
5 | mujoco == 3.1.6
6 |
--------------------------------------------------------------------------------
/py/manipulation/requirements_test.txt:
--------------------------------------------------------------------------------
1 | pillow==10.3.0
2 |
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/camera_support_base__1default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/camera_support_base__1default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__1default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__1default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__2default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__2default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__3default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__3default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__4default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_1__4default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__1default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__1default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__4default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__4default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__5default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__5default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__6default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_2__6default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_3__1default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_3__1default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__1default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__1default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__2default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__2default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__3default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__3default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__4default.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/manipulation/standard_cell/rgb_basket_assets/lasercut_basket_part_4__4default.stl
--------------------------------------------------------------------------------
/py/manipulation/standard_cell/rgb_basket_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | """Tests for dm_robotics.manipulation.standard_cell.rgb_basket."""
15 |
16 | from absl.testing import absltest
17 |
18 | from dm_control import mjcf
19 |
20 | from dm_robotics.manipulation.standard_cell import rgb_basket
21 |
22 |
23 | class RGBBasketTest(absltest.TestCase):
24 |
25 | def test_initialize(self):
26 |
27 | basket = rgb_basket.RGBBasket()
28 |
29 | physics = mjcf.Physics.from_mjcf_model(basket.mjcf_model)
30 | # Check if we can call step the basket.
31 | physics.step()
32 |
33 | def test_collision_geom_group_with_primitive_collisions_enabled(self):
34 | basket = rgb_basket.RGBBasket()
35 | self.assertNotEmpty(basket.collision_geom_group)
36 |
37 |
38 | if __name__ == '__main__':
39 | absltest.main()
40 |
--------------------------------------------------------------------------------
/py/manipulation/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | envlist = build,test
3 | distshare = ../dist
4 |
5 | [testenv:build]
6 | deps =
7 | {distshare}/dm_robotics*transformations-*.zip
8 | {distshare}/dm_robotics*geometry-*.zip
9 | {distshare}/dm_robotics*agentflow-*.zip
10 | {distshare}/dm_robotics*controllers-*manylinux2014_x86_64.whl
11 | {distshare}/dm_robotics*moma-*.zip
12 | -r requirements_external.txt
13 | setuptools
14 | passenv = MJLIB_PATH
15 | commands = python setup.py sdist bdist_wheel
16 |
17 | [testenv:test]
18 | deps =
19 | {distshare}/dm_robotics*transformations-*.zip
20 | {distshare}/dm_robotics*geometry-*.zip
21 | {distshare}/dm_robotics*agentflow-*.zip
22 | {distshare}/dm_robotics*controllers-*manylinux2014_x86_64.whl
23 | {distshare}/dm_robotics*moma-*.zip
24 | -r requirements_external.txt
25 | -r requirements_test.txt
26 | passenv = MJLIB_PATH
27 | commands = python run_tests.py .
28 |
--------------------------------------------------------------------------------
/py/moma/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include requirements*.txt
2 | recursive-include models/vendor *
3 | recursive-include models *.xml
4 |
--------------------------------------------------------------------------------
/py/moma/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 |
--------------------------------------------------------------------------------
/py/moma/doc/images/actions_and_tsps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/doc/images/actions_and_tsps.png
--------------------------------------------------------------------------------
/py/moma/doc/images/hardware_abstraction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/doc/images/hardware_abstraction.png
--------------------------------------------------------------------------------
/py/moma/doc/images/moma_abstractions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/doc/images/moma_abstractions.png
--------------------------------------------------------------------------------
/py/moma/doc/images/moma_logic_flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/doc/images/moma_logic_flow.png
--------------------------------------------------------------------------------
/py/moma/effectors/default_gripper_effector.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Default effector for grippers in sim."""
16 |
17 | from dm_control import mjcf # type: ignore
18 | from dm_env import specs
19 | from dm_robotics.moma import effector
20 | from dm_robotics.moma.effectors import mujoco_actuation
21 | from dm_robotics.moma.models.end_effectors.robot_hands import robot_hand
22 | import numpy as np
23 |
24 |
25 | class DefaultGripperEffector(effector.Effector):
26 | """An effector interface for MoMa grippers."""
27 |
28 | def __init__(self, gripper: robot_hand.RobotHand, robot_name: str):
29 | self._gripper = gripper
30 | self._effector_prefix = '{}_gripper'.format(robot_name)
31 |
32 | self._mujoco_effector = mujoco_actuation.MujocoEffector(
33 | self._gripper.actuators, self._effector_prefix)
34 |
35 | def action_spec(self, physics: mjcf.Physics) -> specs.BoundedArray:
36 | return self._mujoco_effector.action_spec(physics)
37 |
38 | def set_control(self, physics: mjcf.Physics, command: np.ndarray) -> None:
39 | self._mujoco_effector.set_control(physics, command)
40 |
41 | def initialize_episode(self, physics: mjcf.Physics,
42 | random_state: np.random.RandomState) -> None:
43 | pass
44 |
45 | @property
46 | def prefix(self) -> str:
47 | return self._effector_prefix
48 |
--------------------------------------------------------------------------------
/py/moma/entity_composer.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Composes Entities."""
16 |
17 | import abc
18 | from dm_control import composer
19 |
20 |
21 | class TaskEntitiesComposer(abc.ABC):
22 |
23 | @abc.abstractmethod
24 | def compose_entities(self, arena: composer.Arena) -> None:
25 | """Adds all of the necessary objects to the arena and composes objects."""
26 | pass
27 |
--------------------------------------------------------------------------------
/py/moma/initializer.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Base class for MOMA initializers that return a boolean indicating success."""
16 |
17 | import abc
18 | from typing import Any
19 | from dm_control import composer
20 |
21 |
22 | class Initializer(composer.Initializer):
23 | """Composer initializer that returns whether it was successful."""
24 |
25 | @abc.abstractmethod
26 | def __call__(self, physics: Any, random_state: Any) -> bool:
27 | raise NotImplementedError
28 |
29 | def reset(self, physics: Any) -> bool:
30 | """Resets this initializer. Returns true if successful."""
31 | return True
32 |
--------------------------------------------------------------------------------
/py/moma/models/arenas/empty.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """An empty space."""
16 |
17 | import os
18 | from typing import Optional
19 | from dm_control import composer
20 | from dm_control import mjcf
21 |
22 | RESOURCES_ROOT_DIR = os.path.dirname(__file__) # arenas
23 | _EMPTY_CELL_XML_PATH = os.path.join(RESOURCES_ROOT_DIR,
24 | 'empty_assets/arena.xml')
25 |
26 |
27 | class Arena(composer.Arena):
28 | """An empty arena with a ground plane and camera."""
29 |
30 | def _build(self, name: Optional[str] = None):
31 | """Initializes this arena.
32 |
33 | Args:
34 | name: (optional) A string, the name of this arena. If `None`, use the
35 | model name defined in the MJCF file.
36 | """
37 | super()._build(name)
38 | self._mjcf_root.include_copy(
39 | mjcf.from_path(_EMPTY_CELL_XML_PATH), override_attributes=True)
40 | self._ground = self._mjcf_root.find('geom', 'ground')
41 |
42 | @property
43 | def ground(self):
44 | """The ground plane mjcf element."""
45 | return self._ground
46 |
47 | @property
48 | def mjcf_model(self) -> mjcf.RootElement:
49 | """Returns the `mjcf.RootElement` object corresponding to this arena."""
50 | return self._mjcf_root
51 |
--------------------------------------------------------------------------------
/py/moma/models/arenas/empty_assets/arena.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/py/moma/models/arenas/empty_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for empty."""
16 |
17 | from absl.testing import absltest
18 | from dm_control import mjcf
19 | from dm_robotics.moma.models.arenas import empty
20 |
21 |
22 | class TestArena(absltest.TestCase):
23 |
24 | def test_initialize(self):
25 |
26 | arena = empty.Arena()
27 |
28 | physics = mjcf.Physics.from_mjcf_model(arena.mjcf_model)
29 | physics.step()
30 |
31 |
32 | if __name__ == '__main__':
33 | absltest.main()
34 |
--------------------------------------------------------------------------------
/py/moma/models/end_effectors/robot_hands/robotiq_2f85_constants.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Defines Robotiq 2-finger 85 adaptive gripper constants."""
16 |
17 | import os # pylint: disable=unused-import
18 |
19 |
20 | NO_GRASP = 1 # no object grasped
21 | INWARD_GRASP = 2 # grasp while moving inwards
22 | OUTWARD_GRASP = 3 # grasp while moving outwards
23 |
24 |
25 | # pylint: disable=line-too-long
26 | # XML path of the Robotiq 2F85 robot hand.
27 | XML_PATH = (os.path.join(os.path.dirname(__file__), '..', '..', 'vendor', 'robotiq_beta_robots', 'mujoco', 'robotiq_2f85_v2.xml'))
28 | # pylint: enable=line-too-long
29 |
30 | # Located at the center of the finger contact surface.
31 | TCP_SITE_POS = (0., 0., 0.1489)
32 |
--------------------------------------------------------------------------------
/py/moma/models/end_effectors/wrist_sensors/robotiq_fts300.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/py/moma/models/end_effectors/wrist_sensors/robotiq_fts300_constants.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Defines Robotiq FTS300 constants."""
16 | import os # pylint: disable=unused-import
17 |
18 | # pylint: disable=line-too-long
19 | # XML path of the Robotiq FTS300.
20 | XML_PATH = os.path.join(os.path.dirname(__file__), 'robotiq_fts300.xml') # end effectors
21 | # pylint: enable=line-too-long
22 |
--------------------------------------------------------------------------------
/py/moma/models/end_effectors/wrist_sensors/robotiq_fts300_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for dm_robotics.moma.models.end_effectors.wrist_sensors.robotiq_fts300."""
16 |
17 | from absl.testing import absltest
18 | from absl.testing import parameterized
19 | from dm_control import mjcf
20 |
21 | from dm_robotics.moma.models.end_effectors.wrist_sensors import robotiq_fts300
22 |
23 |
24 | class RobotiqFTS300Test(parameterized.TestCase):
25 | """Tests for the Robotiq FTS300 force/torque sensor."""
26 |
27 | def test_load_sensor(self):
28 | """Check RobotiqFTS300 can be instantiated and physics step() executed."""
29 | entity = robotiq_fts300.RobotiqFTS300()
30 | physics = mjcf.Physics.from_mjcf_model(entity.mjcf_model)
31 | physics.step()
32 |
33 | def test_zero_gravity_readings(self):
34 | """Measure the force applied to F/T sensor when gravity is disabled."""
35 | entity = robotiq_fts300.RobotiqFTS300()
36 | physics = mjcf.Physics.from_mjcf_model(entity.mjcf_model)
37 | with physics.model.disable("gravity"):
38 | physics.forward()
39 | force_z = physics.bind(entity.force_sensor).sensordata[2]
40 | self.assertEqual(force_z, 0.)
41 |
42 |
43 | if __name__ == "__main__":
44 | absltest.main()
45 |
--------------------------------------------------------------------------------
/py/moma/models/types.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Type declaration used in models."""
16 |
17 | from typing import Union
18 |
19 | from dm_control import mjcf
20 |
21 | # Return type of physics.bind()
22 | Binding = Union[mjcf.physics.Binding, mjcf.physics._EmptyBinding] # pylint: disable=protected-access
23 |
24 | # Type of the mjcf elements. This is needed for pytype compatibility because
25 | # mcjf.Element doesn't implement anything and therefor has none of the
26 | # properties that are being access.
27 | MjcfElement = mjcf.element._ElementImpl # pylint: disable=protected-access
28 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013-2016, Rethink Robotics
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | 1. Redistributions of source code must retain the above copyright notice,
8 | this list of conditions and the following disclaimer.
9 | 2. Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | 3. Neither the name of the Rethink Robotics nor the names of its
13 | contributors may be used to endorse or promote products derived from
14 | this software without specific prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 | POSSIBILITY OF SUCH DAMAGE.
27 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.3)
2 |
3 | project(sawyer_description)
4 |
5 | find_package(catkin REQUIRED)
6 |
7 | catkin_package()
8 |
9 | foreach(dir config meshes params urdf)
10 | install(DIRECTORY ${dir}/
11 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir})
12 | endforeach(dir)
13 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/launch/test_sawyer_description.launch.test:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
19 |
20 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/PEDESTAL.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/PEDESTAL.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/base.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/base.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/head.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/head.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l0.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l0.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l1.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l1.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l2.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l2.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l3.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l3.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l4.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l4.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l5.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l5.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l6.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_ft/l6.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_mp1/l6.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_mp1/l6.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_mp3/l0.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_mp3/l0.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_mp3/l1.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_mp3/l1.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/base.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/base.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/head.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/head.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l0.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l0.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l1.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l1.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l2.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l2.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l3.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l3.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l4.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l4.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l5.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l5.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l6.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/l6.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/pedestal.STL:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/rethink/sawyer_description/meshes/sawyer_pv/pedestal.STL
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/mjcf/README.md:
--------------------------------------------------------------------------------
1 | # Sawyer robot
2 |
3 | This directory contains MuJoCo MJCF models of the Rethink Sawyer robot and
4 | several associated actuator modules.
5 |
6 | ## Original models
7 |
8 | The MJCF models were automatically generated from the original URDF models,
9 | which can be found together with their assets in:
10 | https://github.com/RethinkRobotics/sawyer_robot/tree/master/sawyer_description/.
11 |
12 | ## Modifications
13 |
14 | The following manual changes were made:
15 |
16 | * Approximate geometries using primitive geoms were commented out.
17 | * Dummy bodies (with no DoFs) were removed.
18 | * Some collisions were explicitly excluded.
19 | * Some MuJoCo-specific properties were added (sensors, contact parameters).
20 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/mjcf/sawyer_pedestal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/mjcf/sawyer_position_actuators.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/mjcf/sawyer_torque_actuators.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/mjcf/sawyer_velocity_actuators.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | sawyer_description
4 | 5.0.4
5 |
6 | Description of Sawyer Robot from Rethink Robotics.
7 | This package contains the URDF and meshes describing Sawyer.
8 |
9 |
10 |
11 | Rethink Robotics Inc.
12 |
13 | BSD
14 | http://sdk.rethinkrobotics.com/intera/
15 |
16 | https://github.com/RethinkRobotics/sawyer_robot
17 |
18 |
19 | https://github.com/RethinkRobotics/sawyer_robot/issues
20 |
21 | Rethink Robotics Inc.
22 | catkin
23 |
24 | robot_state_publisher
25 | joint_state_publisher
26 | tf2_ros
27 | rviz
28 |
29 |
30 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/rethink/sawyer_description/params/named_poses.yaml:
--------------------------------------------------------------------------------
1 | # ------------------------------ Sawyer ------------------------------
2 | named_poses:
3 | right:
4 | joint_names: ['right_j0', 'right_j1', 'right_j2', 'right_j3', 'right_j4', 'right_j5', 'right_j6']
5 | poses:
6 | neutral: [0.00, -1.18, 0.00, 2.18, 0.00, 0.57, 3.3161]
7 | shipping: [0.00, -1.57, 0.00, 2.79, 0.00, -2.79, 3.3161]
8 | head:
9 | joint_names: ['head_pan']
10 | poses:
11 | neutral: [0.00]
12 | shipping: [-3.14]
13 |
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013, ROS-Industrial
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification,
5 | are permitted provided that the following conditions are met:
6 |
7 | Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | Redistributions in binary form must reproduce the above copyright notice, this
11 | list of conditions and the following disclaimer in the documentation and/or
12 | other materials provided with the distribution.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
18 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/media/coarse_collision.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/media/coarse_collision.png
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/media/precise_collision.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/media/precise_collision.png
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/media/visual.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/media/visual.png
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/base.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/base.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/base_mount.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/base_mount.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/coupler.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/coupler.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/driver.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/driver.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/finger_pad_v2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/finger_pad_v2.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/fingertip_pad_v2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/fingertip_pad_v2.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/fingertip_v2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/fingertip_v2.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/follower.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/follower.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/follower_v2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/follower_v2.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/pad.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/pad.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/pad_mod.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/pad_mod.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/reinforced_fingertip.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/reinforced_fingertip.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/silicon_pad.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/silicon_pad.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/spring_link.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/meshes/2f85/collision/spring_link.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/robotiq_2f_140.urdf.xacro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/robotiq_beta_robots/robotiq_2f_model/model/robotiq_2f_140.urdf.xacro
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013, ROS-Industrial
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification,
5 | are permitted provided that the following conditions are met:
6 |
7 | Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | Redistributions in binary form must reproduce the above copyright notice, this
11 | list of conditions and the following disclaimer in the documentation and/or
12 | other materials provided with the distribution.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
18 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts150.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts150.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts150_base.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts150_base.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts150_top.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts150_top.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300_base.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300_base.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300_coupling.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300_coupling.stl
--------------------------------------------------------------------------------
/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300_top.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-deepmind/dm_robotics/99d3dc5e9ede91112bf938cf075d8b53ba3bbf62/py/moma/models/vendor/ros_robotiq/robotiq_force_torque_sensor/meshes/visual/robotiq_fts300_top.stl
--------------------------------------------------------------------------------
/py/moma/requirements.txt:
--------------------------------------------------------------------------------
1 | -r requirements_external.txt
2 | dm_robotics-transformations
3 | dm_robotics-geometry
4 | dm_robotics-agentflow
5 | dm_robotics-controllers
6 |
--------------------------------------------------------------------------------
/py/moma/requirements_external.txt:
--------------------------------------------------------------------------------
1 | numpy >= 1.16.0, < 2.0
2 | dm_control == 1.0.15
3 | mujoco == 3.1.6
4 | opencv-python >= 3.4.0
5 | attrs >= 20.3.0
6 | pydot >= 1.2.4
7 | typing-extensions >= 3.7.4
8 | dataclasses;python_version<"3.7"
9 |
--------------------------------------------------------------------------------
/py/moma/scene_initializer.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Module for scene initializers.
16 |
17 | Scene initializers are callables that can change the MJCF of a scene. They are
18 | called before each episode, and the MJCF is recompiled afterwards. See
19 | `base_task.py` for more information on how they are called.
20 | """
21 |
22 | import dataclasses
23 | from typing import Callable, Iterable, Tuple
24 |
25 | from dm_control import mjcf
26 | from dm_robotics.moma import base_task
27 | import numpy as np
28 |
29 |
30 | @dataclasses.dataclass(frozen=True)
31 | class CompositeSceneInitializer:
32 | initializers: Iterable[base_task.SceneInitializer]
33 |
34 | def __call__(self, random_state: np.random.RandomState) -> None:
35 | for initializer in self.initializers:
36 | initializer(random_state)
37 |
38 |
39 | NO_INIT = CompositeSceneInitializer(initializers=tuple())
40 |
41 |
42 | @dataclasses.dataclass
43 | class EntityPoseInitializer:
44 | """Pose initializer."""
45 |
46 | entity: mjcf.Element
47 | pose_sampler: Callable[[np.random.RandomState], Tuple[np.ndarray, np.ndarray]]
48 |
49 | def __call__(self, random_state: np.random.RandomState) -> None:
50 | pos, quat = self.pose_sampler(random_state)
51 | # pytype: disable=not-writable
52 | self.entity.pos = pos
53 | self.entity.quat = quat
54 | # pytype: enable=not-writable
55 |
--------------------------------------------------------------------------------
/py/moma/sensors/external_value_sensor_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for external_value_sensor."""
16 |
17 | from absl.testing import absltest
18 | from absl.testing import parameterized
19 | from dm_control import mjcf
20 | from dm_robotics.moma.models.arenas import empty
21 | from dm_robotics.moma.sensors import external_value_sensor
22 | import numpy as np
23 |
24 |
25 | class ExternalValueSensorTest(parameterized.TestCase):
26 |
27 | @parameterized.parameters([
28 | [np.array([1.0, 2.0]), np.array([3.0, 4.0])],
29 | ])
30 | def test_external_value_set(self, init_val, set_val):
31 | arena = empty.Arena()
32 | physics = mjcf.Physics.from_mjcf_model(arena.mjcf_model)
33 |
34 | sensor = external_value_sensor.ExternalValueSensor(
35 | name='test_sensor', initial_value=init_val)
36 |
37 | self.assertEqual('test_sensor', sensor.get_obs_key(None))
38 | self.assertIn(sensor.get_obs_key(None), sensor.observables)
39 | cur_value = sensor.observables[sensor.get_obs_key(None)](physics)
40 | self.assertTrue(np.allclose(cur_value, init_val))
41 |
42 | sensor.set_value(set_val)
43 | cur_value = sensor.observables[sensor.get_obs_key(None)](physics)
44 | self.assertTrue(np.allclose(cur_value, set_val))
45 |
46 |
47 | if __name__ == '__main__':
48 | absltest.main()
49 |
--------------------------------------------------------------------------------
/py/moma/sensors/generic_pose_sensor_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for generic_pose_sensor."""
16 |
17 | from absl.testing import absltest
18 | from dm_robotics.geometry import geometry
19 | from dm_robotics.moma.sensors import generic_pose_sensor
20 | import numpy as np
21 |
22 |
23 | class GenericPoseSensorTest(absltest.TestCase):
24 |
25 | def test_sensor(self):
26 | pos = [1.0, 2.0, 3.0]
27 | quat = [0.0, 1.0, 0.0, 0.1]
28 | pose_fn = lambda _: geometry.Pose(position=pos, quaternion=quat)
29 | sensor = generic_pose_sensor.GenericPoseSensor(pose_fn, name='generic')
30 |
31 | key = 'generic_pose'
32 | # Check that the observables is added.
33 | self.assertIn(key, sensor.observables)
34 |
35 | # Check that the pose is returned.
36 | sensor_pose = sensor.observables[key](None)
37 | np.testing.assert_equal(sensor_pose, np.concatenate((pos, quat)))
38 |
39 | if __name__ == '__main__':
40 | absltest.main()
41 |
--------------------------------------------------------------------------------
/py/moma/sensors/joint_observations.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Enum to help key into a timestep's observations dictionary for joint obs."""
16 |
17 | import enum
18 |
19 |
20 | @enum.unique
21 | class Observations(enum.Enum):
22 | """Joint state observations exposed by a MoMa sensor."""
23 | # The joint angles, in radians.
24 | JOINT_POS = '{}_joint_pos'
25 | # The joint velocities, in rad/s.
26 | JOINT_VEL = '{}_joint_vel'
27 | # The joint torques of the arm.
28 | JOINT_TORQUES = '{}_joint_torques'
29 |
30 | def get_obs_key(self, name: str) -> str:
31 | """Returns the key to the observation in the observables dict."""
32 | return self.value.format(name)
33 |
--------------------------------------------------------------------------------
/py/moma/sensors/robot_tcp_sensor_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for robot_tcp_sensor."""
16 |
17 | from absl.testing import absltest
18 | from dm_robotics.moma.models.end_effectors.robot_hands import robotiq_2f85
19 | from dm_robotics.moma.sensors import robot_tcp_sensor
20 |
21 |
22 | class RobotArmSensorTest(absltest.TestCase):
23 |
24 | def setUp(self):
25 | super().setUp()
26 | self._gripper = robotiq_2f85.Robotiq2F85(name='gripper')
27 | self._name = 'gripper'
28 |
29 | def test_sensor_has_all_observables(self):
30 | sensor = robot_tcp_sensor.RobotTCPSensor(self._gripper, self._name)
31 | for obs in robot_tcp_sensor.Observations:
32 | self.assertIn(sensor.get_obs_key(obs), sensor.observables)
33 |
34 |
35 | if __name__ == '__main__':
36 | absltest.main()
37 |
--------------------------------------------------------------------------------
/py/moma/sensors/robot_wrist_ft_sensor_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for robot_wrist_ft_sensor."""
16 |
17 | from absl.testing import absltest
18 | from dm_robotics.moma.models.end_effectors.wrist_sensors import robotiq_fts300
19 | from dm_robotics.moma.sensors import robot_wrist_ft_sensor
20 | from dm_robotics.moma.sensors import wrench_observations
21 |
22 |
23 | class RobotWristFTSensorTest(absltest.TestCase):
24 |
25 | def test_sensor_has_all_observables(self):
26 | wrist_ft_sensor = robotiq_fts300.RobotiqFTS300()
27 | sensor = robot_wrist_ft_sensor.RobotWristFTSensor(
28 | wrist_ft_sensor=wrist_ft_sensor, name='ft_sensor')
29 | for obs in wrench_observations.Observations:
30 | self.assertIn(sensor.get_obs_key(obs), sensor.observables)
31 |
32 |
33 | if __name__ == '__main__':
34 | absltest.main()
35 |
--------------------------------------------------------------------------------
/py/moma/sensors/robotiq_gripper_sensor_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for robotiq_gripper_sensor."""
16 |
17 | from absl.testing import absltest
18 | from dm_robotics.moma.models.end_effectors.robot_hands import robotiq_2f85
19 | from dm_robotics.moma.sensors import robotiq_gripper_observations
20 | from dm_robotics.moma.sensors import robotiq_gripper_sensor
21 |
22 | # Absolute tolerance parameter.
23 | _A_TOL = 5e-03
24 | # Relative tolerance parameter.
25 | _R_TOL = 0.01
26 |
27 |
28 | class RobotiqGripperSensorTest(absltest.TestCase):
29 |
30 | def test_sensor_has_all_observables(self):
31 | name = 'gripper'
32 | gripper = robotiq_2f85.Robotiq2F85(name=name)
33 | sensor = robotiq_gripper_sensor.RobotiqGripperSensor(
34 | gripper=gripper, name=name)
35 | sensor.initialize_for_task(0.1, 0.001, 100)
36 | expected_observable_names = set(
37 | sensor.get_obs_key(obs)
38 | for obs in robotiq_gripper_observations.Observations)
39 | actual_observable_names = set(sensor.observables.keys())
40 | self.assertSameElements(expected_observable_names, actual_observable_names)
41 |
42 |
43 | if __name__ == '__main__':
44 | absltest.main()
45 |
--------------------------------------------------------------------------------
/py/moma/sensors/wrench_observations.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """The observation enum used by all wrench sensors."""
16 |
17 | import enum
18 |
19 |
20 | @enum.unique
21 | class Observations(enum.Enum):
22 | """Observations exposed by a wrench sensor."""
23 | # The 3D force sensed by the sensor.
24 | FORCE = '{}_force'
25 | # The 3D torque sensed by the sensor.
26 | TORQUE = '{}_torque'
27 |
28 | def get_obs_key(self, name: str) -> str:
29 | """Returns the key to the observation in the observables dict."""
30 | return self.value.format(name)
31 |
--------------------------------------------------------------------------------
/py/moma/tasks/README:
--------------------------------------------------------------------------------
1 | Directory for manipulation tasks built with MoMa. Fork `example_task/` to get started.
2 |
--------------------------------------------------------------------------------
/py/moma/tasks/example_task/example_task_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for example_task.example_task."""
16 |
17 | from absl.testing import absltest
18 | from dm_robotics.moma.tasks.example_task import example_task
19 | import numpy as np
20 |
21 |
22 | class ExampleTaskTest(absltest.TestCase):
23 |
24 | def test_environment_stepping(self):
25 | np.random.seed(42)
26 | with example_task.build_task_environment() as env:
27 | action = np.zeros(env.action_spec().shape)
28 | env.step(action)
29 |
30 |
31 | if __name__ == '__main__':
32 | absltest.main()
33 |
--------------------------------------------------------------------------------
/py/moma/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | envlist = build,test
3 | distshare = ../dist
4 |
5 | [testenv:build]
6 | deps =
7 | {distshare}/dm_robotics*transformations-*.zip
8 | {distshare}/dm_robotics*geometry-*.zip
9 | {distshare}/dm_robotics*agentflow-*.zip
10 | {distshare}/dm_robotics*controllers-*manylinux2014_x86_64.whl
11 | -r requirements_external.txt
12 | setuptools
13 | passenv = MJLIB_PATH
14 | commands =
15 | python setup.py sdist bdist_wheel
16 |
17 | # Tox must first run the build env to deploy the moma.zip to the distshare dir.
18 | # external_wheels prevents tox installing the package in the virtualenv, so instead
19 | # it's built and then installed into the virtualenv as a dep in the test virtualenv
20 |
21 | [testenv:test]
22 | whitelist_externals = /bin/sh
23 | deps =
24 | {distshare}/dm_robotics*transformations-*.zip
25 | {distshare}/dm_robotics*geometry-*.zip
26 | {distshare}/dm_robotics*agentflow-*.zip
27 | {distshare}/dm_robotics*controllers-*manylinux2014_x86_64.whl
28 | -r requirements_external.txt
29 | passenv = MJLIB_PATH
30 | setenv =
31 | MUJOCO_GL = osmesa
32 | commands = python run_tests.py .
33 |
34 |
35 |
--------------------------------------------------------------------------------
/py/moma/utils/pose_utils.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Util functions for dealing with poses."""
16 |
17 | import numpy as np
18 |
19 |
20 | def positive_leading_quat(quat: np.ndarray) -> np.ndarray:
21 | """Returns the quaternion with a positive leading scalar (wxyz)."""
22 | quat = np.copy(quat)
23 | if quat[0] < 0:
24 | quat *= -1
25 | return quat
26 |
--------------------------------------------------------------------------------
/py/moma/utils/pose_utils_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | """Tests for pose_utils."""
16 |
17 |
18 | from absl.testing import absltest
19 | from dm_robotics.moma.utils import pose_utils
20 | import numpy as np
21 |
22 |
23 | class PoseUtilsTest(absltest.TestCase):
24 |
25 | def test_positive_leading_quat(self):
26 | # Should not change a quaternion with a positive leading scalar.
27 | input_quat = [1., 2., 3., 4.] # unnormalized, but doesn't matter.
28 | expected_quat = input_quat
29 | np.testing.assert_almost_equal(
30 | pose_utils.positive_leading_quat(np.array(input_quat)),
31 | expected_quat, decimal=3)
32 | # But it should change a quaternion with a negative leading scalar.
33 | input_quat = [-1., 2., 3., 4.] # unnormalized, but doesn't matter.
34 | expected_quat = [1., -2., -3., -4.]
35 | np.testing.assert_almost_equal(
36 | pose_utils.positive_leading_quat(np.array(input_quat)),
37 | expected_quat, decimal=3)
38 |
39 |
40 | if __name__ == '__main__':
41 | absltest.main()
42 |
--------------------------------------------------------------------------------
/py/transformations/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include requirements.txt
2 |
3 |
--------------------------------------------------------------------------------
/py/transformations/README.md:
--------------------------------------------------------------------------------
1 | # DeepMind Robotics Transformations
2 |
3 | Transformations is a pure python library for rigid-body transformations
4 | including velocities and forces.
5 |
6 | The objectives for this library are **simplicity** and **comprehensiveness**
7 | across all canonical representations (euler, axis-angle, quaternion,
8 | homogeneous matrices).
9 |
10 |
11 | ## Supported conversions:
12 | * Quaternion to Rotation matrix, Axis-angle and Euler-angle
13 | * Axis-angle to Quaternion, Rotation matrix and Euler-angle
14 | * Rotation matrix to Quaternion, Axis-angle and Euler-angle
15 | * Euler-angle to Quaternion, Rotation matrix and Axis-angle
16 |
17 | ## Quaternions:
18 | Quaternions are represented with the scalar part (w) first, e.g.
19 |
20 | ```python
21 | identity_quaternion = np.asarray([1, 0, 0, 0]) # w, i, j, k
22 | ```
23 |
24 | Supported quaternion operations:
25 |
26 | * Difference
27 | * Distance
28 | * Multiplication
29 | * Inverse
30 | * Conjugate
31 | * Logarithm and Exponent
32 | * Slerp (spherical linear interpolation)
33 | * Rotation of a vector by a quaternion.
34 |
35 | ## Euler-angles
36 | All 24 from-euler orderings are supported.
37 | 7 of 24 to-euler orderings are supported.
38 |
39 | ## Transforms
40 | This library supports force and velocity transforms.
41 |
42 | ## Usage Example
43 |
44 | ```python
45 | from dm_robotics.transformations import transformations as tr
46 |
47 | # Convert a pose, euler angle into a homogeneous matrix (a 4x4 matrix):
48 | hmat = tr.poseuler_to_hmat(
49 | np.array([x, y, z, rot_x, rot_y, rot_z]), 'XYZ')
50 |
51 | # Convert the homogeneous matrix to a twist (a 6 vector):
52 | twist = tr.hmat_to_twist(hmat)
53 | ```
54 |
55 |
--------------------------------------------------------------------------------
/py/transformations/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
--------------------------------------------------------------------------------
/py/transformations/requirements.txt:
--------------------------------------------------------------------------------
1 | # dm_transformations pip dependencies.
2 | # It's preferable to:
3 | # (a) have a set of possible versions for each package that is limited, to
4 | # reduce the set of valid configurations and reduce the probability that one
5 | # is failing.
6 | # (b) be resilient to library changes. In particular, we do not want to bump to
7 | # the next major version of a library without knowing.
8 | # (c) get the bug-fixes. However, it's dependent on each package versionning
9 | # scheme (e.g. it would be safe to upgrade the patch version in
10 | # [major].[minor].[patch] for https://semver.org/).
11 | #
12 | # Thus, prefer "==". If you do want (c), you can use the ~= construct.
13 | # See https://www.python.org/dev/peps/pep-0440/#compatible-release
14 |
15 | pip >= 20.0.2
16 | absl-py >= 0.9.0
17 | numpy >= 1.16.0, < 2.0
18 | jax >= 0.4.13 # Last ver w/ py3.8; TODO(jscholz) split dep to a sub-package.
19 |
--------------------------------------------------------------------------------
/py/transformations/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | envlist=build,test
3 | distshare=../dist
4 |
5 | [testenv:build]
6 | deps =
7 | -r requirements.txt
8 | setuptools
9 | commands = python setup.py sdist bdist_wheel
10 |
11 | [testenv:test]
12 | deps =
13 | -r requirements.txt
14 | commands = python -m unittest discover -p '*_test.py'
15 |
--------------------------------------------------------------------------------
/py/vision/__init__.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 |
--------------------------------------------------------------------------------
/py/vision/blob_tracker_object_defs.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | """Common definitions of blob detector based objects."""
15 |
16 | import enum
17 |
18 | from dmr_vision import types
19 | import numpy as np
20 |
21 |
22 | @enum.unique
23 | class Props(enum.Enum):
24 | RED = "red"
25 | GREEN = "green"
26 | BLUE = "blue"
27 |
28 |
29 | PROP_SPEC = {
30 | Props.RED:
31 | types.ColorRange(
32 | lower=np.array([0., 0., 0.669]), upper=np.array([1., 0.518, 1.])),
33 | Props.GREEN:
34 | types.ColorRange(
35 | lower=np.array([0., 0., 0.]), upper=np.array([1., 0.427, 0.479])),
36 | Props.BLUE:
37 | types.ColorRange(
38 | lower=np.array([0., 0.568, 0.]), upper=np.array([1., 1., 0.590])),
39 | }
40 |
41 | ROS_PROPS = {
42 | Props.RED: "/blob/red/pose",
43 | Props.GREEN: "/blob/green/pose",
44 | Props.BLUE: "/blob/blue/pose",
45 | }
46 |
--------------------------------------------------------------------------------
/py/vision/detector.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | """Module defining the interface for an image detector."""
15 |
16 | import abc
17 | from typing import Callable, Tuple
18 |
19 | from dmr_vision import types
20 | import numpy as np
21 |
22 | Signature = Callable[[np.ndarray], Tuple[types.Centers, types.Detections]]
23 |
24 |
25 | class ImageDetector(abc.ABC):
26 | """Image-based blob detector."""
27 |
28 | @abc.abstractmethod
29 | def __call__(self,
30 | image: np.ndarray) -> Tuple[types.Centers, types.Detections]:
31 | """Detects something of interest in an image.
32 |
33 | Args:
34 | image: the input image.
35 |
36 | Returns:
37 | A dictionary mapping a detection name with
38 | - the (u, v) coordinate of its barycenter, if found;
39 | - `None`, otherwise or other conditions are met;
40 | and a dictionary mapping a detection name with
41 | - its contour superimposed on the input image;
42 | - `None`, otherwise or other conditions are met;
43 | """
44 | raise NotImplementedError
45 |
--------------------------------------------------------------------------------
/py/vision/ros_utils_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | """Tests for `ros_utils.py`."""
15 |
16 | from unittest import mock
17 |
18 | from absl.testing import absltest
19 | from dmr_vision import ros_utils
20 | import rospy
21 |
22 |
23 | class RosUtilsTest(absltest.TestCase):
24 | def test_image_handler_times_out_waiting_for_initial_message(self):
25 | mock_wait_for_message = self.enter_context(
26 | mock.patch.object(rospy, "wait_for_message", autospec=True)
27 | )
28 | mock_wait_for_message.side_effect = rospy.exceptions.ROSException()
29 | with self.assertRaises(TimeoutError):
30 | ros_utils.ImageHandler(topic="/test/foo")
31 |
32 | def test_point_handler_times_out_waiting_for_initial_message(self):
33 | mock_wait_for_message = self.enter_context(
34 | mock.patch.object(rospy, "wait_for_message", autospec=True)
35 | )
36 | mock_wait_for_message.side_effect = rospy.exceptions.ROSException()
37 | with self.assertRaises(TimeoutError):
38 | ros_utils.PointHandler(topic="/test/foo")
39 |
40 |
41 | if __name__ == "__main__":
42 | absltest.main()
43 |
--------------------------------------------------------------------------------
/py/vision/utils_test.py:
--------------------------------------------------------------------------------
1 | # Copyright 2020 DeepMind Technologies Limited.
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 | """Tests for `utils.py`."""
15 |
16 | from absl.testing import absltest
17 | from dmr_vision import robot_config
18 | from dmr_vision import types
19 | from dmr_vision import utils
20 | import numpy as np
21 |
22 |
23 | class PoseValidatorTest(absltest.TestCase):
24 |
25 | def setUp(self):
26 | super().setUp()
27 | r_config = robot_config.get_robot_config("STANDARD_SAWYER")
28 | center = np.append(r_config.basket_center, r_config.basket_height)
29 | self.limits = types.PositionLimit(
30 | upper=center + np.array([0.45, 0.45, 0.20]),
31 | lower=center + np.array([-0.45, -0.45, -0.02]),
32 | )
33 | self.pose_validator = utils.PoseValidator(self.limits)
34 |
35 | def testIsValid(self):
36 | eps = np.array([1e-4, 0., 0.])
37 | pos_slightly_above = self.limits.upper + eps
38 | self.assertFalse(self.pose_validator.is_valid(pos_slightly_above))
39 | pos_slightly_below = self.limits.lower - eps
40 | self.assertFalse(self.pose_validator.is_valid(pos_slightly_below))
41 | pos_in_limits = self.limits.upper - eps
42 | self.assertTrue(self.pose_validator.is_valid(pos_in_limits))
43 |
44 |
45 | if __name__ == "__main__":
46 | absltest.main()
47 |
--------------------------------------------------------------------------------