Spaces:
Sleeping
Sleeping
| # Copyright (c) 2022 NVIDIA CORPORATION. All rights reserved. | |
| # NVIDIA CORPORATION and its licensors retain all intellectual property | |
| # and proprietary rights in and to this software, related documentation | |
| # and any modifications thereto. Any use, reproduction, disclosure or | |
| # distribution of this software and related documentation without an express | |
| # license agreement from NVIDIA CORPORATION is strictly prohibited. | |
| ########################################################################### | |
| # USD Environment | |
| # | |
| # Shows how to load a USD file containing USD Physics schema definitions. | |
| # | |
| ########################################################################### | |
| import warp as wp | |
| import warp.sim | |
| from environment import Environment, run_env | |
| class UsdEnvironment(Environment): | |
| sim_name = "env_usd" | |
| opengl_render_settings = dict(scaling=10.0, draw_grid=True) | |
| usd_render_settings = dict(scaling=100.0) | |
| episode_duration = 2.0 | |
| sim_substeps_euler = 64 | |
| sim_substeps_xpbd = 8 | |
| xpbd_settings = dict( | |
| iterations=10, | |
| enable_restitution=True, | |
| joint_linear_relaxation=0.8, | |
| joint_angular_relaxation=0.45, | |
| rigid_contact_relaxation=1.0, | |
| rigid_contact_con_weighting=True, | |
| ) | |
| # USD files define their own ground plane if necessary | |
| activate_ground_plane = False | |
| num_envs = 1 | |
| plot_body_coords = False | |
| def create_articulation(self, builder): | |
| usd_filename = wp.sim.resolve_usd_from_url( | |
| "http://omniverse-content-staging.s3-us-west-2.amazonaws.com/Assets/Isaac/2022.2.1/Isaac/Robots/Franka/franka_instanceable.usd", | |
| target_folder_name=".panda_usd_files") | |
| settings = wp.sim.parse_usd( | |
| usd_filename, | |
| builder, | |
| default_thickness=0.01, | |
| # ignore collision meshes from Franka robot | |
| ignore_paths=[".*collisions.*"], | |
| default_ke=1e6, | |
| ) | |
| self.frame_dt = 1.0 / settings["fps"] | |
| if settings["duration"] > 0.0: | |
| self.episode_duration = settings["duration"] | |
| self.sim_substeps = 10 | |
| self.sim_dt = self.frame_dt / self.sim_substeps | |
| self.episode_frames = int(self.episode_duration / self.frame_dt) | |
| self.sim_steps = int(self.episode_duration / self.sim_dt) | |
| self.sim_time = 0.0 | |
| self.render_time = 0.0 | |
| self.up_axis = settings["up_axis"] | |
| def before_simulate(self): | |
| # print some information about the loaded model | |
| if self.model.shape_count > 0: | |
| print("shape_transform", self.model.shape_transform.numpy()) | |
| print("geo_scale", self.model.shape_geo.scale.numpy()) | |
| if self.model.joint_count > 0: | |
| print("joint parent", self.model.joint_parent.numpy()) | |
| print("joint child", self.model.joint_child.numpy()) | |
| if len(self.model.joint_q) > 0: | |
| print("joint q", self.model.joint_q.numpy()) | |
| if len(self.model.joint_axis) > 0: | |
| print("joint axis", self.model.joint_axis.numpy()) | |
| print("joint target", self.model.joint_target.numpy()) | |
| print("joint target ke", self.model.joint_target_ke.numpy()) | |
| print("joint target kd", self.model.joint_target_kd.numpy()) | |
| print("joint limit lower", self.model.joint_limit_lower.numpy()) | |
| print("joint limit upper", self.model.joint_limit_upper.numpy()) | |
| print("joint_X_p", self.model.joint_X_p.numpy()) | |
| print("joint_X_c", self.model.joint_X_c.numpy()) | |
| if self.model.body_count > 0: | |
| print("COM", self.model.body_com.numpy()) | |
| print("Mass", self.model.body_mass.numpy()) | |
| print("Inertia", self.model.body_inertia.numpy()) | |
| print("body_q", self.state.body_q.numpy()) | |
| if __name__ == "__main__": | |
| run_env(UsdEnvironment) | |