Associated code:
import argparse
from omni.isaac.lab.app import AppLauncher
parser = argparse.ArgumentParser(description="Contact Prior Data Collection")
AppLauncher.add_app_launcher_args(parser)
args_cli = parser.parse_args()
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app
import os
import torch
import omni.isaac.core.utils.prims as prim_utils
import omni.isaac.lab.sim as sim_utils
from omni.isaac.lab.actuators import ImplicitActuatorCfg
from omni.isaac.lab.assets import ArticulationCfg, AssetBaseCfg
from omni.isaac.lab.scene import InteractiveScene, InteractiveSceneCfg
from omni.isaac.lab.sim import SimulationCfg, SimulationContext
from omni.isaac.lab.sensors import CameraCfg, ContactSensorCfg, patterns
from omni.isaac.core.utils.rotations import euler_angles_to_quat
from omni.isaac.lab.utils import configclass
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
LEAP_HAND_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
activate_contact_sensors = True,
usd_path=f"{CURRENT_DIR}/assets/right_hand.usd",
rigid_props=sim_utils.RigidBodyPropertiesCfg(
rigid_body_enabled=True,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=100.0,
enable_gyroscopic_forces=True,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False,
solver_position_iteration_count=4,
solver_velocity_iteration_count=0,
sleep_threshold=0.005,
stabilization_threshold=0.001,
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 1.0),
rot=(0.0, 0.0, 1.0, 0.0)
),
actuators={
"all_joints": ImplicitActuatorCfg(
joint_names_expr=[".*"],
effort_limit=0.91,
velocity_limit=8.48,
stiffness=None,
damping=None,
),
},
)
qx, qy, qz, qw = euler_angles_to_quat((0.0, 0.0, torch.pi/2))
@configclass
class LeapHandSceneCfg(InteractiveSceneCfg):
ground = AssetBaseCfg(prim_path="/World/defaultGroundPlane", spawn=sim_utils.GroundPlaneCfg(color=(0.5, 0.5, 0.5)))
dome_light = AssetBaseCfg(
prim_path="/World/Light", spawn=sim_utils.DomeLightCfg(intensity=3000.0, color=(0.75, 0.75, 0.75))
)
leap_hand: ArticulationCfg = LEAP_HAND_CFG.replace(prim_path="/World/Robot")
cube = AssetBaseCfg(
prim_path="/World/Cube",
init_state=AssetBaseCfg.InitialStateCfg(
pos=(0.0, 0.0, 1.25),
rot=(0.0, 0.0, 0.0, 1.0)
),
spawn=sim_utils.MeshCuboidCfg(
activate_contact_sensors = True,
size=(0.075, 0.075, 0.075),
rigid_props=sim_utils.RigidBodyPropertiesCfg(),
mass_props=sim_utils.MassPropertiesCfg(mass=0.05),
collision_props=sim_utils.CollisionPropertiesCfg(),
visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0, 0.0, 1.0))
)
)
camera = CameraCfg(
prim_path="/World/Robot/palm_lower/front_cam",
update_period=0.1,
height=480,
width=640,
data_types=["rgb", "distance_to_image_plane"],
spawn=sim_utils.PinholeCameraCfg(
focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 1.0e5)
),
offset=CameraCfg.OffsetCfg(pos=(0.0, 0.0, -0.65), rot=(qx.item(), qy.item(), qz.item(), qw.item()), convention="ros"),
)
contact_forces = ContactSensorCfg(
prim_path="/World/Cube", update_period=0.0, history_length=6, debug_vis=True,
)
def main():
sim_cfg = SimulationCfg(device=args_cli.device)
sim = SimulationContext(sim_cfg)
sim.set_camera_view([0.25, -0.25, 1.40], [0.0, 0.0, torch.pi * 0.325])
scene_cfg = LeapHandSceneCfg(num_envs=1, env_spacing=2.0)
scene = InteractiveScene(scene_cfg)
sim.reset()
print("[INFO]: Setup complete...")
robot = scene["leap_hand"]
sim_dt = sim.get_physics_dt()
while simulation_app.is_running():
target_position = torch.tensor([
torch.pi * 0.0, #1
torch.pi * 0.0, #0
torch.pi * 0.0, #2
torch.pi * 0.0, #3
torch.pi * 0.0, #9
torch.pi * 0.0, #8
torch.pi * 0.0, #10
torch.pi * 0.0, #11
torch.pi * 0.0, #13
torch.pi * 0.0, #12
torch.pi * 0.0, #14
torch.pi * 0.0, #15
torch.pi * 0.0, #4
torch.pi * 0.0, #5
torch.pi * 0.0, #6
torch.pi * 0.0, #7
], device=robot.data.joint_pos.device)
joint_pos = target_position * torch.ones_like(robot.data.joint_pos)
robot.set_joint_position_target(joint_pos)
scene.write_data_to_sim()
sim.step()
scene.update(sim_dt)
if __name__ == "__main__":
main()
simulation_app.close()