mani-skill-nightly 2025.9.5.2334__py3-none-any.whl → 2025.9.14.2255__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mani-skill-nightly might be problematic. Click here for more details.

Files changed (37) hide show
  1. mani_skill/envs/tasks/drawing/draw_svg.py +1 -1
  2. mani_skill/envs/tasks/drawing/draw_triangle.py +1 -1
  3. mani_skill/envs/tasks/tabletop/lift_peg_upright.py +1 -1
  4. mani_skill/envs/tasks/tabletop/poke_cube.py +1 -1
  5. mani_skill/examples/motionplanning/base_motionplanner/__init__.py +0 -0
  6. mani_skill/examples/motionplanning/base_motionplanner/motionplanner.py +195 -0
  7. mani_skill/examples/motionplanning/panda/motionplanner.py +7 -247
  8. mani_skill/examples/motionplanning/panda/motionplanner_stick.py +6 -145
  9. mani_skill/examples/motionplanning/panda/solutions/lift_peg_upright.py +1 -1
  10. mani_skill/examples/motionplanning/panda/solutions/peg_insertion_side.py +1 -1
  11. mani_skill/examples/motionplanning/panda/solutions/pick_cube.py +1 -1
  12. mani_skill/examples/motionplanning/panda/solutions/place_sphere.py +1 -1
  13. mani_skill/examples/motionplanning/panda/solutions/plug_charger.py +1 -1
  14. mani_skill/examples/motionplanning/panda/solutions/pull_cube_tool.py +1 -1
  15. mani_skill/examples/motionplanning/panda/solutions/stack_cube.py +1 -1
  16. mani_skill/examples/motionplanning/panda/solutions/stack_pyramid.py +1 -1
  17. mani_skill/examples/motionplanning/so100/__init__.py +0 -0
  18. mani_skill/examples/motionplanning/so100/motionplanner.py +40 -0
  19. mani_skill/examples/motionplanning/so100/run.py +142 -0
  20. mani_skill/examples/motionplanning/so100/solutions/__init__.py +1 -0
  21. mani_skill/examples/motionplanning/so100/solutions/pick_cube.py +70 -0
  22. mani_skill/examples/motionplanning/two_finger_gripper/__init__.py +0 -0
  23. mani_skill/examples/motionplanning/two_finger_gripper/motionplanner.py +149 -0
  24. mani_skill/examples/motionplanning/xarm6/motionplanner.py +14 -103
  25. mani_skill/examples/motionplanning/xarm6/solutions/pick_cube.py +2 -4
  26. mani_skill/examples/motionplanning/xarm6/solutions/plug_charger.py +2 -4
  27. mani_skill/examples/motionplanning/xarm6/solutions/push_cube.py +1 -3
  28. mani_skill/examples/motionplanning/xarm6/solutions/stack_cube.py +2 -4
  29. mani_skill/examples/teleoperation/interactive_panda.py +2 -0
  30. mani_skill/examples/teleoperation/interactive_so100.py +216 -0
  31. mani_skill/examples/teleoperation/interactive_xarm6.py +216 -0
  32. {mani_skill_nightly-2025.9.5.2334.dist-info → mani_skill_nightly-2025.9.14.2255.dist-info}/METADATA +1 -1
  33. {mani_skill_nightly-2025.9.5.2334.dist-info → mani_skill_nightly-2025.9.14.2255.dist-info}/RECORD +37 -26
  34. /mani_skill/examples/motionplanning/{panda → base_motionplanner}/utils.py +0 -0
  35. {mani_skill_nightly-2025.9.5.2334.dist-info → mani_skill_nightly-2025.9.14.2255.dist-info}/LICENSE +0 -0
  36. {mani_skill_nightly-2025.9.5.2334.dist-info → mani_skill_nightly-2025.9.14.2255.dist-info}/WHEEL +0 -0
  37. {mani_skill_nightly-2025.9.5.2334.dist-info → mani_skill_nightly-2025.9.14.2255.dist-info}/top_level.txt +0 -0
@@ -6,8 +6,8 @@ from transforms3d.euler import euler2quat
6
6
 
7
7
  from mani_skill.envs.tasks import StackCubeEnv
8
8
  from mani_skill.examples.motionplanning.xarm6.motionplanner import \
9
- XArm6RobotiqMotionPlanningSolver, XArm6PandaGripperMotionPlanningSolver
10
- from mani_skill.examples.motionplanning.panda.utils import (
9
+ XArm6RobotiqMotionPlanningSolver
10
+ from mani_skill.examples.motionplanning.base_motionplanner.utils import (
11
11
  compute_grasp_info_by_obb, get_actor_obb)
12
12
  from mani_skill.utils.wrappers.record import RecordEpisode
13
13
 
@@ -19,8 +19,6 @@ def solve(env: StackCubeEnv, seed=None, debug=False, vis=False):
19
19
  ], env.unwrapped.control_mode
20
20
  if env.unwrapped.robot_uids == "xarm6_robotiq":
21
21
  planner_cls = XArm6RobotiqMotionPlanningSolver
22
- elif env.unwrapped.robot_uids == "xarm6_pandagripper":
23
- planner_cls = XArm6PandaGripperMotionPlanningSolver
24
22
  else:
25
23
  raise ValueError(f"Unsupported robot uid: {env.robot_uid}")
26
24
  planner = planner_cls(
@@ -45,6 +45,7 @@ def main(args: Args):
45
45
  control_mode="pd_joint_pos",
46
46
  render_mode="rgb_array",
47
47
  reward_mode="none",
48
+ robot_uids=args.robot_uid,
48
49
  enable_shadow=True,
49
50
  viewer_camera_configs=dict(shader_pack=args.viewer_shader)
50
51
  )
@@ -90,6 +91,7 @@ def main(args: Args):
90
91
  control_mode="pd_joint_pos",
91
92
  render_mode="rgb_array",
92
93
  reward_mode="none",
94
+ robot_uids=args.robot_uid,
93
95
  human_render_camera_configs=dict(shader_pack=args.video_saving_shader),
94
96
  )
95
97
  env = RecordEpisode(
@@ -0,0 +1,216 @@
1
+ import argparse
2
+ from ast import parse
3
+ from typing import Annotated
4
+ import gymnasium as gym
5
+ import numpy as np
6
+ import sapien.core as sapien
7
+ from mani_skill.envs.sapien_env import BaseEnv
8
+
9
+ from mani_skill.examples.motionplanning.so100.motionplanner import \
10
+ SO100ArmMotionPlanningSolver
11
+ import sapien.utils.viewer
12
+ import h5py
13
+ import json
14
+ import mani_skill.trajectory.utils as trajectory_utils
15
+ from mani_skill.utils import sapien_utils
16
+ from mani_skill.utils.wrappers.record import RecordEpisode
17
+ import tyro
18
+ from dataclasses import dataclass
19
+
20
+ @dataclass
21
+ class Args:
22
+ env_id: Annotated[str, tyro.conf.arg(aliases=["-e"])] = "PickCube-v1"
23
+ obs_mode: str = "none"
24
+ robot_uid: Annotated[str, tyro.conf.arg(aliases=["-r"])] = "so100"
25
+ """The robot to use. Robot setups supported for teleop in this script is so100"""
26
+ record_dir: str = "demos"
27
+ """directory to record the demonstration data and optionally videos"""
28
+ save_video: bool = False
29
+ """whether to save the videos of the demonstrations after collecting them all"""
30
+ viewer_shader: str = "rt-fast"
31
+ """the shader to use for the viewer. 'default' is fast but lower-quality shader, 'rt' and 'rt-fast' are the ray tracing shaders"""
32
+ video_saving_shader: str = "rt-fast"
33
+ """the shader to use for the videos of the demonstrations. 'minimal' is the fast shader, 'rt' and 'rt-fast' are the ray tracing shaders"""
34
+
35
+ def parse_args() -> Args:
36
+ return tyro.cli(Args)
37
+
38
+ def main(args: Args):
39
+ output_dir = f"{args.record_dir}/{args.env_id}/teleop/"
40
+ env = gym.make(
41
+ args.env_id,
42
+ obs_mode=args.obs_mode,
43
+ control_mode="pd_joint_pos",
44
+ render_mode="rgb_array",
45
+ reward_mode="none",
46
+ robot_uids=args.robot_uid,
47
+ enable_shadow=True,
48
+ viewer_camera_configs=dict(shader_pack=args.viewer_shader)
49
+ )
50
+
51
+ env = RecordEpisode(
52
+ env,
53
+ output_dir=output_dir,
54
+ trajectory_name="trajectory",
55
+ save_video=True,
56
+ info_on_video=False,
57
+ source_type="teleoperation",
58
+ source_desc="teleoperation via the click+drag system"
59
+ )
60
+ num_trajs = 0
61
+ seed = 0
62
+ env.reset(seed=seed)
63
+ while True:
64
+ print(f"Collecting trajectory {num_trajs+1}, seed={seed}")
65
+ code = solve(env, debug=False, vis=True)
66
+ if code == "quit":
67
+ num_trajs += 1
68
+ break
69
+ elif code == "continue":
70
+ seed += 1
71
+ num_trajs += 1
72
+ env.reset(seed=seed)
73
+ continue
74
+ elif code == "restart":
75
+ env.reset(seed=seed, options=dict(save_trajectory=False))
76
+ h5_file_path = env._h5_file.filename
77
+ json_file_path = env._json_path
78
+ env.close()
79
+ del env
80
+ print(f"Trajectories saved to {h5_file_path}")
81
+ if args.save_video:
82
+ print(f"Saving videos to {output_dir}")
83
+
84
+ trajectory_data = h5py.File(h5_file_path)
85
+ with open(json_file_path, "r") as f:
86
+ json_data = json.load(f)
87
+ env = gym.make(
88
+ args.env_id,
89
+ obs_mode=args.obs_mode,
90
+ control_mode="pd_joint_pos",
91
+ render_mode="rgb_array",
92
+ reward_mode="none",
93
+ robot_uids=args.robot_uid,
94
+ human_render_camera_configs=dict(shader_pack=args.video_saving_shader),
95
+ )
96
+ env = RecordEpisode(
97
+ env,
98
+ output_dir=output_dir,
99
+ trajectory_name="trajectory",
100
+ save_video=True,
101
+ info_on_video=False,
102
+ save_trajectory=False,
103
+ video_fps=30
104
+ )
105
+ for episode in json_data["episodes"]:
106
+ traj_id = f"traj_{episode['episode_id']}"
107
+ data = trajectory_data[traj_id]
108
+ env.reset(**episode["reset_kwargs"])
109
+ env_states_list = trajectory_utils.dict_to_list_of_dicts(data["env_states"])
110
+
111
+ env.base_env.set_state_dict(env_states_list[0])
112
+ for action in np.array(data["actions"]):
113
+ env.step(action)
114
+
115
+ trajectory_data.close()
116
+ env.close()
117
+ del env
118
+
119
+
120
+ def solve(env: BaseEnv, debug=False, vis=False):
121
+ assert env.unwrapped.control_mode in [
122
+ "pd_joint_pos",
123
+ "pd_joint_pos_vel",
124
+ ], env.unwrapped.control_mode
125
+ robot_has_gripper = True
126
+ planner = SO100ArmMotionPlanningSolver(
127
+ env,
128
+ debug=debug,
129
+ vis=vis,
130
+ base_pose=env.unwrapped.agent.robot.pose,
131
+ visualize_target_grasp_pose=False,
132
+ print_env_info=False,
133
+ joint_acc_limits=0.5,
134
+ joint_vel_limits=0.5,
135
+ )
136
+ viewer = env.render_human()
137
+
138
+ last_checkpoint_state = None
139
+ gripper_open = True
140
+ def select_so100_hand():
141
+ viewer.select_entity(sapien_utils.get_obj_by_name(env.agent.robot.links, "Fixed_Jaw")._objs[0].entity)
142
+ select_so100_hand()
143
+ for plugin in viewer.plugins:
144
+ if isinstance(plugin, sapien.utils.viewer.viewer.TransformWindow):
145
+ transform_window = plugin
146
+ while True:
147
+ transform_window.enabled = True
148
+
149
+ env.render_human()
150
+ execute_current_pose = False
151
+ if viewer.window.key_press("h"):
152
+ print("""Available commands:
153
+ h: print this help menu
154
+ g: toggle gripper to close/open (if there is a gripper)
155
+ u: move the so100 hand up
156
+ j: move the so100 hand down
157
+ arrow_keys: move the so100 hand in the direction of the arrow keys
158
+ n: execute command via motion planning to make the robot move to the target pose indicated by the ghost so100 arm
159
+ c: stop this episode and record the trajectory and move on to a new episode
160
+ q: quit the script and stop collecting data. Save trajectories and optionally videos.
161
+ """)
162
+ pass
163
+ elif viewer.window.key_press("q"):
164
+ return "quit"
165
+ elif viewer.window.key_press("c"):
166
+ return "continue"
167
+ elif viewer.window.key_press("n"):
168
+ execute_current_pose = True
169
+ elif viewer.window.key_press("g") and robot_has_gripper:
170
+ if gripper_open:
171
+ gripper_open = False
172
+ _, reward, _ ,_, info = planner.close_gripper()
173
+ else:
174
+ gripper_open = True
175
+ _, reward, _ ,_, info = planner.open_gripper()
176
+ print(f"Reward: {reward}, Info: {info}")
177
+ elif viewer.window.key_press("u"):
178
+ select_so100_hand()
179
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, 0, -0.01])).to_transformation_matrix()
180
+ transform_window.update_ghost_objects()
181
+ elif viewer.window.key_press("j"):
182
+ select_so100_hand()
183
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, 0, +0.01])).to_transformation_matrix()
184
+ transform_window.update_ghost_objects()
185
+ elif viewer.window.key_press("down"):
186
+ select_so100_hand()
187
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[+0.01, 0, 0])).to_transformation_matrix()
188
+ transform_window.update_ghost_objects()
189
+ elif viewer.window.key_press("up"):
190
+ select_so100_hand()
191
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[-0.01, 0, 0])).to_transformation_matrix()
192
+ transform_window.update_ghost_objects()
193
+ elif viewer.window.key_press("right"):
194
+ select_so100_hand()
195
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, -0.01, 0])).to_transformation_matrix()
196
+ transform_window.update_ghost_objects()
197
+ elif viewer.window.key_press("left"):
198
+ select_so100_hand()
199
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, +0.01, 0])).to_transformation_matrix()
200
+ transform_window.update_ghost_objects()
201
+ if execute_current_pose:
202
+ fixed_jaw_tip_position = transform_window._gizmo_pose * sapien.Pose(p=[0.01, -0.097, 0])
203
+ target_pose = sapien.Pose(p=fixed_jaw_tip_position.p - planner._so_100_grasp_pose_tcp_transform.p, q=fixed_jaw_tip_position.q)
204
+
205
+ result = planner.move_to_pose_with_screw(target_pose, dry_run=True)
206
+ if result != -1 and len(result["position"]) < 150:
207
+ _, reward, _ ,_, info = planner.follow_path(result)
208
+ print(f"Reward: {reward}, Info: {info}")
209
+ else:
210
+ if result == -1: print("Plan failed")
211
+ else: print("Generated motion plan was too long. Try a closer sub-goal")
212
+ execute_current_pose = False
213
+
214
+
215
+ if __name__ == "__main__":
216
+ main(parse_args())
@@ -0,0 +1,216 @@
1
+ import argparse
2
+ from ast import parse
3
+ from typing import Annotated
4
+ import gymnasium as gym
5
+ import numpy as np
6
+ import sapien.core as sapien
7
+ from mani_skill.envs.sapien_env import BaseEnv
8
+
9
+ from mani_skill.examples.motionplanning.xarm6.motionplanner import \
10
+ XArm6RobotiqMotionPlanningSolver
11
+ import sapien.utils.viewer
12
+ import h5py
13
+ import json
14
+ import mani_skill.trajectory.utils as trajectory_utils
15
+ from mani_skill.utils import sapien_utils
16
+ from mani_skill.utils.wrappers.record import RecordEpisode
17
+ import tyro
18
+ from dataclasses import dataclass
19
+
20
+ @dataclass
21
+ class Args:
22
+ env_id: Annotated[str, tyro.conf.arg(aliases=["-e"])] = "PickCube-v1"
23
+ obs_mode: str = "none"
24
+ robot_uid: Annotated[str, tyro.conf.arg(aliases=["-r"])] = "xarm6_robotiq"
25
+ """The robot to use. Robot setups supported for teleop in this script is xarm6"""
26
+ record_dir: str = "demos"
27
+ """directory to record the demonstration data and optionally videos"""
28
+ save_video: bool = False
29
+ """whether to save the videos of the demonstrations after collecting them all"""
30
+ viewer_shader: str = "rt-fast"
31
+ """the shader to use for the viewer. 'default' is fast but lower-quality shader, 'rt' and 'rt-fast' are the ray tracing shaders"""
32
+ video_saving_shader: str = "rt-fast"
33
+ """the shader to use for the videos of the demonstrations. 'minimal' is the fast shader, 'rt' and 'rt-fast' are the ray tracing shaders"""
34
+
35
+ def parse_args() -> Args:
36
+ return tyro.cli(Args)
37
+
38
+ def main(args: Args):
39
+ output_dir = f"{args.record_dir}/{args.env_id}/teleop/"
40
+ env = gym.make(
41
+ args.env_id,
42
+ obs_mode=args.obs_mode,
43
+ control_mode="pd_joint_pos",
44
+ render_mode="rgb_array",
45
+ reward_mode="none",
46
+ robot_uids=args.robot_uid,
47
+ enable_shadow=True,
48
+ viewer_camera_configs=dict(shader_pack=args.viewer_shader)
49
+ )
50
+
51
+ env = RecordEpisode(
52
+ env,
53
+ output_dir=output_dir,
54
+ trajectory_name="trajectory",
55
+ save_video=True,
56
+ info_on_video=False,
57
+ source_type="teleoperation",
58
+ source_desc="teleoperation via the click+drag system"
59
+ )
60
+ num_trajs = 0
61
+ seed = 0
62
+ env.reset(seed=seed)
63
+ while True:
64
+ print(f"Collecting trajectory {num_trajs+1}, seed={seed}")
65
+ code = solve(env, debug=False, vis=True)
66
+ if code == "quit":
67
+ num_trajs += 1
68
+ break
69
+ elif code == "continue":
70
+ seed += 1
71
+ num_trajs += 1
72
+ env.reset(seed=seed)
73
+ continue
74
+ elif code == "restart":
75
+ env.reset(seed=seed, options=dict(save_trajectory=False))
76
+ h5_file_path = env._h5_file.filename
77
+ json_file_path = env._json_path
78
+ env.close()
79
+ del env
80
+ print(f"Trajectories saved to {h5_file_path}")
81
+ if args.save_video:
82
+ print(f"Saving videos to {output_dir}")
83
+
84
+ trajectory_data = h5py.File(h5_file_path)
85
+ with open(json_file_path, "r") as f:
86
+ json_data = json.load(f)
87
+ env = gym.make(
88
+ args.env_id,
89
+ obs_mode=args.obs_mode,
90
+ control_mode="pd_joint_pos",
91
+ render_mode="rgb_array",
92
+ reward_mode="none",
93
+ robot_uids=args.robot_uid,
94
+ human_render_camera_configs=dict(shader_pack=args.video_saving_shader),
95
+ )
96
+ env = RecordEpisode(
97
+ env,
98
+ output_dir=output_dir,
99
+ trajectory_name="trajectory",
100
+ save_video=True,
101
+ info_on_video=False,
102
+ save_trajectory=False,
103
+ video_fps=30
104
+ )
105
+ for episode in json_data["episodes"]:
106
+ traj_id = f"traj_{episode['episode_id']}"
107
+ data = trajectory_data[traj_id]
108
+ env.reset(**episode["reset_kwargs"])
109
+ env_states_list = trajectory_utils.dict_to_list_of_dicts(data["env_states"])
110
+
111
+ env.base_env.set_state_dict(env_states_list[0])
112
+ for action in np.array(data["actions"]):
113
+ env.step(action)
114
+
115
+ trajectory_data.close()
116
+ env.close()
117
+ del env
118
+
119
+
120
+ def solve(env: BaseEnv, debug=False, vis=False):
121
+ assert env.unwrapped.control_mode in [
122
+ "pd_joint_pos",
123
+ "pd_joint_pos_vel",
124
+ ], env.unwrapped.control_mode
125
+ robot_has_gripper = True
126
+ planner = XArm6RobotiqMotionPlanningSolver(
127
+ env,
128
+ debug=debug,
129
+ vis=vis,
130
+ base_pose=env.unwrapped.agent.robot.pose,
131
+ visualize_target_grasp_pose=False,
132
+ print_env_info=False,
133
+ joint_acc_limits=0.5,
134
+ joint_vel_limits=0.5,
135
+ )
136
+ viewer = env.render_human()
137
+
138
+ last_checkpoint_state = None
139
+ gripper_open = True
140
+ def select_xarm6_hand():
141
+ viewer.select_entity(sapien_utils.get_obj_by_name(env.agent.robot.links, "robotiq_arg2f_base_link")._objs[0].entity)
142
+ select_xarm6_hand()
143
+ for plugin in viewer.plugins:
144
+ if isinstance(plugin, sapien.utils.viewer.viewer.TransformWindow):
145
+ transform_window = plugin
146
+ while True:
147
+ transform_window.enabled = True
148
+
149
+ env.render_human()
150
+ execute_current_pose = False
151
+ if viewer.window.key_press("h"):
152
+ print("""Available commands:
153
+ h: print this help menu
154
+ g: toggle gripper to close/open (if there is a gripper)
155
+ u: move the xarm6 hand up
156
+ j: move the xarm6 hand down
157
+ arrow_keys: move the xarm6 hand in the direction of the arrow keys
158
+ n: execute command via motion planning to make the robot move to the target pose indicated by the ghost xarm6 arm
159
+ c: stop this episode and record the trajectory and move on to a new episode
160
+ q: quit the script and stop collecting data. Save trajectories and optionally videos.
161
+ """)
162
+ pass
163
+ elif viewer.window.key_press("q"):
164
+ return "quit"
165
+ elif viewer.window.key_press("c"):
166
+ return "continue"
167
+ elif viewer.window.key_press("n"):
168
+ execute_current_pose = True
169
+ elif viewer.window.key_press("g") and robot_has_gripper:
170
+ if gripper_open:
171
+ gripper_open = False
172
+ _, reward, _ ,_, info = planner.close_gripper()
173
+ else:
174
+ gripper_open = True
175
+ _, reward, _ ,_, info = planner.open_gripper()
176
+ print(f"Reward: {reward}, Info: {info}")
177
+ elif viewer.window.key_press("u"):
178
+ select_xarm6_hand()
179
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, 0, -0.01])).to_transformation_matrix()
180
+ transform_window.update_ghost_objects()
181
+ elif viewer.window.key_press("j"):
182
+ select_xarm6_hand()
183
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, 0, +0.01])).to_transformation_matrix()
184
+ transform_window.update_ghost_objects()
185
+ elif viewer.window.key_press("down"):
186
+ select_xarm6_hand()
187
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[+0.01, 0, 0])).to_transformation_matrix()
188
+ transform_window.update_ghost_objects()
189
+ elif viewer.window.key_press("up"):
190
+ select_xarm6_hand()
191
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[-0.01, 0, 0])).to_transformation_matrix()
192
+ transform_window.update_ghost_objects()
193
+ elif viewer.window.key_press("right"):
194
+ select_xarm6_hand()
195
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, -0.01, 0])).to_transformation_matrix()
196
+ transform_window.update_ghost_objects()
197
+ elif viewer.window.key_press("left"):
198
+ select_xarm6_hand()
199
+ transform_window.gizmo_matrix = (transform_window._gizmo_pose * sapien.Pose(p=[0, +0.01, 0])).to_transformation_matrix()
200
+ transform_window.update_ghost_objects()
201
+ if execute_current_pose:
202
+ # z-offset of end-effector gizmo to TCP position is hardcoded for the xarm6 robot here
203
+ target_pose = transform_window._gizmo_pose * sapien.Pose([0, 0, 0.15])
204
+
205
+ result = planner.move_to_pose_with_RRTStar(target_pose, dry_run=True)
206
+ if result != -1 and len(result["position"]) < 150:
207
+ _, reward, _ ,_, info = planner.follow_path(result)
208
+ print(f"Reward: {reward}, Info: {info}")
209
+ else:
210
+ if result == -1: print("Plan failed")
211
+ else: print("Generated motion plan was too long. Try a closer sub-goal")
212
+ execute_current_pose = False
213
+
214
+
215
+ if __name__ == "__main__":
216
+ main(parse_args())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mani-skill-nightly
3
- Version: 2025.9.5.2334
3
+ Version: 2025.9.14.2255
4
4
  Summary: ManiSkill3: A Unified Benchmark for Generalizable Manipulation Skills
5
5
  Home-page: https://github.com/haosulab/ManiSkill
6
6
  Author: ManiSkill contributors
@@ -572,8 +572,8 @@ mani_skill/envs/tasks/digital_twins/so100_arm/__init__.py,sha256=uehHSCaHoZDB9aw
572
572
  mani_skill/envs/tasks/digital_twins/so100_arm/grasp_cube.py,sha256=Uv2wTMUyfh8ygG4g6WfPj5E8jaDUyBZ789lPPCRBJjM,22386
573
573
  mani_skill/envs/tasks/drawing/__init__.py,sha256=b2HaUu5UwcWHetjcn6hKlKFokUMd1ZGIljOg-kPeo54,114
574
574
  mani_skill/envs/tasks/drawing/draw.py,sha256=WlhxJjt0-DlkxC3t-o0M8BoOwdwWpM9reupFg5OqiZc,8146
575
- mani_skill/envs/tasks/drawing/draw_svg.py,sha256=UKnVl_tMfUNHmOg24Ny-wFynb5CaZC0uIHvW9sBxbyo,16206
576
- mani_skill/envs/tasks/drawing/draw_triangle.py,sha256=aOSc37tHZrU_96W_Pj0mNpxOTopHyMvCVps-gihE0qc,15528
575
+ mani_skill/envs/tasks/drawing/draw_svg.py,sha256=vk8E1l2EYqT_9zPkwk1heEGyfT8ydGaiyM01DpWqM4w,16207
576
+ mani_skill/envs/tasks/drawing/draw_triangle.py,sha256=l51EbCckQzjtn8TAlUmXQIC30D5Ikqrzouoy5Q7_iC0,15529
577
577
  mani_skill/envs/tasks/fmb/__init__.py,sha256=bTIxwBIDcQcGyu_KR27QwRbG9ud_myEBQGXiK4Fu1CQ,33
578
578
  mani_skill/envs/tasks/fmb/fmb.py,sha256=yOQqQY6IHOVWIRTKVHzmE07nvMHMGgd48iyCyQp8vyo,7424
579
579
  mani_skill/envs/tasks/fmb/assets/blue_u.glb,sha256=yCYJvWA_8mOIlL_a_S_Tr3xHiBNQmaoQumNJImT71Jo,2380
@@ -606,7 +606,7 @@ mani_skill/envs/tasks/quadruped/quadruped_reach.py,sha256=IggZpOlncVy-runqcX9PmD
606
606
  mani_skill/envs/tasks/quadruped/quadruped_spin.py,sha256=F9HmJtZeLNpuFg3-VyO7Qdz8dBsJmCfiH0076npq4is,5205
607
607
  mani_skill/envs/tasks/tabletop/__init__.py,sha256=DJmoG6Z19yXPuLUv2mZ8UqgsMVethY_pzYspc4veRMw,791
608
608
  mani_skill/envs/tasks/tabletop/assembling_kits.py,sha256=piXxTybVKrRr92VqIFIQsbra4Q3njRxBTmOGvsribHI,11933
609
- mani_skill/envs/tasks/tabletop/lift_peg_upright.py,sha256=o6AmHyjyoT5U6IYn0tXz3MJ7PNCEqHPZf2jnFOFuW-Y,5857
609
+ mani_skill/envs/tasks/tabletop/lift_peg_upright.py,sha256=38D3uPWgh6ttw_E3vwJjoBsXPzbxlVUGQo-_0uNLS_Y,5858
610
610
  mani_skill/envs/tasks/tabletop/peg_insertion_side.py,sha256=3tf9eOI4PmNGKXooZUR81AXUPuUUTgG-V4DuYxtd5dg,14033
611
611
  mani_skill/envs/tasks/tabletop/pick_clutter_ycb.py,sha256=uA-kMGMAODeNvL99K1kDBrtU7b7VEkbkzUip5dJzucM,7345
612
612
  mani_skill/envs/tasks/tabletop/pick_cube.py,sha256=MsrP5rlYB1TMWCgYBnE97iYUDkwrrXBCXF1vrcZJf7s,8691
@@ -614,7 +614,7 @@ mani_skill/envs/tasks/tabletop/pick_cube_cfgs.py,sha256=ns0bhw6nrJElSR9nGruGYECy
614
614
  mani_skill/envs/tasks/tabletop/pick_single_ycb.py,sha256=mrqEoOa9UVF34Z5fpsvjcr683diUffsKEjJ9Zh0qfFU,10409
615
615
  mani_skill/envs/tasks/tabletop/place_sphere.py,sha256=J3ReBFK7TyZQlleIFspz7Pl1wqAzaYoveGZfNNL5DVM,10101
616
616
  mani_skill/envs/tasks/tabletop/plug_charger.py,sha256=So0WttpXKU_1okVCgB00htqa_fxPcJZERhFSKqspA_o,10463
617
- mani_skill/envs/tasks/tabletop/poke_cube.py,sha256=KV6mp-Xgm9h4GYUcAUop2AZ4IECTdQKEMRRd9NThyBo,9343
617
+ mani_skill/envs/tasks/tabletop/poke_cube.py,sha256=GEv15eYd-OegiN4j9ciZw69Qj-q-tX_WCh75KJMHaPY,9344
618
618
  mani_skill/envs/tasks/tabletop/pull_cube.py,sha256=tyy9KOgBjQOHjFrVK2-hNQPCPDjJ7Y61ZtbwPX_6gvk,5548
619
619
  mani_skill/envs/tasks/tabletop/pull_cube_tool.py,sha256=NaZpdbYYL4zC41GVY__eq4uRIQpVXthzAqe5oSq8YWU,9951
620
620
  mani_skill/envs/tasks/tabletop/push_cube.py,sha256=WZ4k89f8inbwbomYtJAxodQDcGUYhDMrn9UHoaqYODQ,12701
@@ -663,34 +663,45 @@ mani_skill/examples/benchmarking/envs/maniskill/cartpole.py,sha256=nVYi4NpKIA6X4
663
663
  mani_skill/examples/benchmarking/envs/maniskill/franka_move.py,sha256=KHbPT69vwr2ijWPWjmnGK9vB5dpq4x9Jw5JWVwTV7MI,3333
664
664
  mani_skill/examples/benchmarking/envs/maniskill/franka_pick_cube.py,sha256=NcIIdSvZIYaBT6KhBfDWER321ECYvA8yJQRSeRUMwy8,4138
665
665
  mani_skill/examples/motionplanning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
666
+ mani_skill/examples/motionplanning/base_motionplanner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
667
+ mani_skill/examples/motionplanning/base_motionplanner/motionplanner.py,sha256=4Mo-vd6ZAemnaZhzlB9McukpP8tU8Qb93hRyAabQO_s,7218
668
+ mani_skill/examples/motionplanning/base_motionplanner/utils.py,sha256=ueS0b4-gX9lnsvqet361tEi8S5cv4Liq71BWN-feEZU,3058
666
669
  mani_skill/examples/motionplanning/panda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
667
- mani_skill/examples/motionplanning/panda/motionplanner.py,sha256=2GT2K2tXI9QVyhE1hOapr34vyCPRtBdOVm_MFH_OnGE,10314
668
- mani_skill/examples/motionplanning/panda/motionplanner_stick.py,sha256=o4qwJLL7rLFsPAu856UtbtBOu8nlKJo3SLI_bFcGzUM,6148
670
+ mani_skill/examples/motionplanning/panda/motionplanner.py,sha256=np-muWjjz1VanIfEttUYoAD_O9jyIDzK4thqDRhz1TE,848
671
+ mani_skill/examples/motionplanning/panda/motionplanner_stick.py,sha256=ix-XS6aAcwTmBhGnnAI3wJ-G2Cmp5Bv7Tsh1amPGIBc,797
669
672
  mani_skill/examples/motionplanning/panda/run.py,sha256=PM0p424MfA-wVcvXJWKlnITKGYNI_FC3CBZjIiCX37U,7438
670
- mani_skill/examples/motionplanning/panda/utils.py,sha256=ueS0b4-gX9lnsvqet361tEi8S5cv4Liq71BWN-feEZU,3058
671
673
  mani_skill/examples/motionplanning/panda/solutions/__init__.py,sha256=a3Pglv99wemA-TjqHGMV2FBEJnhJMEt8OTniwzeAO5c,618
672
674
  mani_skill/examples/motionplanning/panda/solutions/draw_svg.py,sha256=MF-THj9aAXefc6wpRJ44nk5Y_sF2P0PdWXKQhlR_pOE,1049
673
675
  mani_skill/examples/motionplanning/panda/solutions/draw_triangle.py,sha256=CeRhTdPep6vgVix6SfOEBx8DRDS9Kmpo3zALEg7sK7Q,1937
674
- mani_skill/examples/motionplanning/panda/solutions/lift_peg_upright.py,sha256=-wQ5DpT7dMffOgOkpboUNYg4odq-NuQgGUzJ0LWNIUg,3616
675
- mani_skill/examples/motionplanning/panda/solutions/peg_insertion_side.py,sha256=xjyH1THjtzZrnS6m_zURjKQ9vZgqCWbcKsa7RcbBg8g,3575
676
- mani_skill/examples/motionplanning/panda/solutions/pick_cube.py,sha256=STYpml582MlVq52ixxBcMIF6gwyCwSdpGd1SDioOZVQ,2243
677
- mani_skill/examples/motionplanning/panda/solutions/place_sphere.py,sha256=w8Q-IvPgGNgLd01AMB-tttPXr_fS10oAXuSmOXVrmSA,3282
678
- mani_skill/examples/motionplanning/panda/solutions/plug_charger.py,sha256=-4MoxBRGmWbJqFf1XxWWJ0CZsDxQVaZg6ft7NOLKGWs,3533
676
+ mani_skill/examples/motionplanning/panda/solutions/lift_peg_upright.py,sha256=jqOM_1OZzl1mCn_aQkzryGZvPC3HdNwQBR-qx_1C0SU,3629
677
+ mani_skill/examples/motionplanning/panda/solutions/peg_insertion_side.py,sha256=kw7KLsRTZLsB9u-MU_DAO-psmkDJblG4Dy9HNQkWj1Y,3588
678
+ mani_skill/examples/motionplanning/panda/solutions/pick_cube.py,sha256=dfbiYRimawVZJ-Nop81zso2ZdMbPAYEGnKVfj8sVBe0,2256
679
+ mani_skill/examples/motionplanning/panda/solutions/place_sphere.py,sha256=pzJIzwpYQ3Z6z3HpxszIVT7mCFlKyot59FHIMp1uxJs,3295
680
+ mani_skill/examples/motionplanning/panda/solutions/plug_charger.py,sha256=rYJ0WFOYIeJnTN4aJXAQG81q_BYI8axmp8TsbNx37so,3546
679
681
  mani_skill/examples/motionplanning/panda/solutions/pull_cube.py,sha256=rQkvCRYjVejEWC28mo6lbGRqjp9McZGjQEv4Wp1fMWE,1111
680
- mani_skill/examples/motionplanning/panda/solutions/pull_cube_tool.py,sha256=g6adx921V2SOVYYFlh_gLwV5I0tnz70qCLm81oA6YhA,3609
682
+ mani_skill/examples/motionplanning/panda/solutions/pull_cube_tool.py,sha256=tpr1xOA8d8Ha7XsHhD870PFfeoiEvZ8AHZy8nyZGZk0,3622
681
683
  mani_skill/examples/motionplanning/panda/solutions/push_cube.py,sha256=EynyseBJ_njMP74o9gVxqWOOqoC5j1rBc4XQzFug9EQ,1113
682
- mani_skill/examples/motionplanning/panda/solutions/stack_cube.py,sha256=QIa280jNOJfJqqgbb5WWEBxErFPE7Mv4-_ZL9TCsRos,3280
683
- mani_skill/examples/motionplanning/panda/solutions/stack_pyramid.py,sha256=s7IWytihZv4IvT2cuhLM0RAWoV1NEEoPKq5-E6ArA6s,5190
684
+ mani_skill/examples/motionplanning/panda/solutions/stack_cube.py,sha256=B6gYZYlV8L8w78V1TtbPkO2gWevnsV71FHF5QdAyNkM,3293
685
+ mani_skill/examples/motionplanning/panda/solutions/stack_pyramid.py,sha256=JcG8Hy-MPdA36il60eawB71--Yw4PmpPcMBTD2JfjLw,5203
686
+ mani_skill/examples/motionplanning/so100/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
687
+ mani_skill/examples/motionplanning/so100/motionplanner.py,sha256=0Q-7fgOC-yiAwZ0WwW1JP8n6oT2FJKF6sw7i3odbkWY,1610
688
+ mani_skill/examples/motionplanning/so100/run.py,sha256=oVrlbXag8iiRQDfNC4trWDPUt_hbZU2_5RdTkykASHs,6813
689
+ mani_skill/examples/motionplanning/so100/solutions/__init__.py,sha256=maeC_C4Xk5Ck0SLEjwQktA5SrFsTFW-SSBqmCKszKks,45
690
+ mani_skill/examples/motionplanning/so100/solutions/pick_cube.py,sha256=HzHAR7Em47jegAzNsWDvuBx-WJMQa0DhY4L3V-TiB-Y,2865
691
+ mani_skill/examples/motionplanning/two_finger_gripper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
692
+ mani_skill/examples/motionplanning/two_finger_gripper/motionplanner.py,sha256=pHl9_j9SEDxXALOgBmcqp4nLlt-29BT9i3t5nIT0dmc,6174
684
693
  mani_skill/examples/motionplanning/xarm6/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
685
- mani_skill/examples/motionplanning/xarm6/motionplanner.py,sha256=OcJ2OgY09j3kKl7tFa8GcuGGknF999I_bWZGHZF8lps,4751
694
+ mani_skill/examples/motionplanning/xarm6/motionplanner.py,sha256=cPvJer5iQPZqhXCroRynv8_YKYcqx1FF8nrAdS1aGcs,756
686
695
  mani_skill/examples/motionplanning/xarm6/run.py,sha256=yejnUUasyllXZYWpWD9ksvdjgM8o9TwGVfY24kXQxSI,7053
687
696
  mani_skill/examples/motionplanning/xarm6/solutions/__init__.py,sha256=csJg82Tjow5MsYEQEY86ETdPoR59s55KwSg4xaEVyy0,191
688
- mani_skill/examples/motionplanning/xarm6/solutions/pick_cube.py,sha256=7gKuTgGrQOuSQr32nZDg07IRk2Dp9jIRCl3TZ1xlPsc,2566
689
- mani_skill/examples/motionplanning/xarm6/solutions/plug_charger.py,sha256=myvHjl9Gc2RM2UYb12cOi56C3QbEbeNmvUBLMiHcHp0,3895
690
- mani_skill/examples/motionplanning/xarm6/solutions/push_cube.py,sha256=iiZHwvOGGAaxPkzE_sAN6WdTYfcxEMVx0Da3e2rzL48,1419
691
- mani_skill/examples/motionplanning/xarm6/solutions/stack_cube.py,sha256=zarkqZ2MSfBu-Uv7DNNiRmqyv_JLPiIWcpONGyfbf0Y,3595
697
+ mani_skill/examples/motionplanning/xarm6/solutions/pick_cube.py,sha256=V70JpqX1hmcxeiScPqWVHaqI9V1qiKHLDHYHhiESsYQ,2421
698
+ mani_skill/examples/motionplanning/xarm6/solutions/plug_charger.py,sha256=WE60jGpP8VRyePRcHxWvqxbi3XXxADs9peYXhXxxdY4,3750
699
+ mani_skill/examples/motionplanning/xarm6/solutions/push_cube.py,sha256=y9zFbczQVVm1ur4ohmTxmwfXXINVJueWQAx1FYGolE4,1261
700
+ mani_skill/examples/motionplanning/xarm6/solutions/stack_cube.py,sha256=-QaFTuZQQ89LJGP-mjuz1pLQLr4rpR6CmquE0Kd8L2Y,3450
692
701
  mani_skill/examples/teleoperation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
693
- mani_skill/examples/teleoperation/interactive_panda.py,sha256=NsGy_ghtXl3HPbwLjKINkizOXqX_rMr30lUfscmhyQ4,10423
702
+ mani_skill/examples/teleoperation/interactive_panda.py,sha256=w2YNABicqN10mU7eEhme6Pi9guv9QlbMhkLv4gr3Rjc,10497
703
+ mani_skill/examples/teleoperation/interactive_so100.py,sha256=E2xj-9CW0jG7K99il2MeRtwEXySdNugCGMoaKWAuFv8,8714
704
+ mani_skill/examples/teleoperation/interactive_xarm6.py,sha256=h27LlmGtEnAS8yIRjgRLRrcYY2s4rUvnlxCWvJwWxBw,8700
694
705
  mani_skill/render/__init__.py,sha256=Uy6h1bzammUO8QVPVCDcuCuhnuN3e5votaho45drAGw,118
695
706
  mani_skill/render/shaders.py,sha256=g2VcASiyrP7nVDv_MlmY9CeYbNr7QDvUBdCjuDMjqQ0,7103
696
707
  mani_skill/render/utils.py,sha256=l-Kt3LTACw6Q_A7jhss0Eoc5t2LfHaFmDiH55DhLMuU,638
@@ -826,8 +837,8 @@ mani_skill/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
826
837
  mani_skill/vector/wrappers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
827
838
  mani_skill/vector/wrappers/gymnasium.py,sha256=voHNmYg5Jyy-laMSC2Fd8VggQvhXw3NnfYLbD9QDXAc,7305
828
839
  mani_skill/vector/wrappers/sb3.py,sha256=SlXdiEPqcNHYMhJCzA29kBU6zK7DKTe1nc0L6Z3QQtY,4722
829
- mani_skill_nightly-2025.9.5.2334.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
830
- mani_skill_nightly-2025.9.5.2334.dist-info/METADATA,sha256=RM1fSPj1-LN1YEpYdhNJhjVFO15cX3SR-Jw43tt9oIs,9315
831
- mani_skill_nightly-2025.9.5.2334.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
832
- mani_skill_nightly-2025.9.5.2334.dist-info/top_level.txt,sha256=bkBgOVl_MZMoQx2aRFsSFEYlZLxjWlip5vtJ39FB3jA,11
833
- mani_skill_nightly-2025.9.5.2334.dist-info/RECORD,,
840
+ mani_skill_nightly-2025.9.14.2255.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
841
+ mani_skill_nightly-2025.9.14.2255.dist-info/METADATA,sha256=dK2CovaTVj80dQke6O6huyD1TMos18ivGR0V8KV-H-M,9316
842
+ mani_skill_nightly-2025.9.14.2255.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
843
+ mani_skill_nightly-2025.9.14.2255.dist-info/top_level.txt,sha256=bkBgOVl_MZMoQx2aRFsSFEYlZLxjWlip5vtJ39FB3jA,11
844
+ mani_skill_nightly-2025.9.14.2255.dist-info/RECORD,,