├── 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 | ![Simple Example](./example_agentflow_controlflow_graph.png) 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 | --------------------------------------------------------------------------------