Skip to content

Commit adb7bbc

Browse files
authored
autosim-examples & add debug_target_pose mode (#2)
* add debug_target_pose mode in curobo related skill. * autosim-examples finished.
1 parent 8f52a95 commit adb7bbc

9 files changed

Lines changed: 60 additions & 12 deletions

File tree

examples/run_autosim_example.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828

2929
def main():
3030
pipeline = make_pipeline(args_cli.pipeline_id)
31-
result = pipeline.run()
32-
print(result)
31+
pipeline.run()
3332

3433

3534
if __name__ == "__main__":

source/autosim/autosim/core/pipeline.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,8 @@ def _build_world_state(self) -> WorldState:
216216
yaw = torch.atan2(sin_yaw, cos_yaw)
217217
robot_base_pose = torch.stack((robot_base_pose[0], robot_base_pose[1], yaw)) # [x, y, yaw]
218218

219+
robot_root_pose = self._robot.data.root_pose_w[self._env_id]
220+
219221
sim_joint_names = self._robot.data.joint_names
220222

221223
objects_dict = dict()
@@ -229,6 +231,7 @@ def _build_world_state(self) -> WorldState:
229231
robot_joint_vel=robot_joint_vel,
230232
robot_ee_pose=robot_ee_pose,
231233
robot_base_pose=robot_base_pose,
234+
robot_root_pose=robot_root_pose,
232235
sim_joint_names=sim_joint_names,
233236
objects=objects_dict,
234237
)

source/autosim/autosim/core/types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ class WorldState:
123123
"""The end - effector pose of the robot in the world frame. [x, y, z, qw, qx, qy, qz]"""
124124
robot_base_pose: torch.Tensor
125125
"""The base pose of the robot in the world frame. [x, y, yaw]"""
126+
robot_root_pose: torch.Tensor
127+
"""The root pose of the robot in the world frame. [x, y, z, qw, qx, qy, qz]"""
126128
sim_joint_names: list[str]
127129
"""The joint names of the robot."""
128130
objects: dict[str, torch.Tensor] = field(default_factory=dict)

source/autosim/autosim/skills/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,13 @@ class AutoSimSkillsExtraCfg:
2828

2929
def get(cls, skill_name: str):
3030
"""Get the skill configuration by name."""
31+
3132
return getattr(cls, skill_name)
33+
34+
def debug_target_pose(self):
35+
"""Debug the target pose of the skills."""
36+
37+
self.lift.extra_cfg.debug_target_pose = True
38+
self.pull.extra_cfg.debug_target_pose = True
39+
self.push.extra_cfg.debug_target_pose = True
40+
self.reach.extra_cfg.debug_target_pose = True

source/autosim/autosim/skills/base_skill.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
SkillOutput,
1212
WorldState,
1313
)
14+
from autosim.utils.debug_util import create_marker, visualize_marker
1415

1516

1617
@configclass
@@ -84,10 +85,23 @@ class CuroboSkillExtraCfg(SkillExtraCfg):
8485
curobo_planner: CuroboPlanner | None = None
8586
"""The curobo planner for the skill."""
8687

88+
debug_target_pose: bool = False
89+
"""Whether to debug the target pose."""
90+
8791

8892
class CuroboSkillBase(Skill):
8993
"""Base class for skills dependent on curobo."""
9094

9195
def __init__(self, extra_cfg: CuroboSkillExtraCfg) -> None:
9296
super().__init__(extra_cfg)
9397
self._planner = extra_cfg.curobo_planner
98+
99+
self._target_poses = dict()
100+
if self.cfg.extra_cfg.debug_target_pose:
101+
create_marker("target_pose")
102+
103+
def visualize_debug_target_pose(self):
104+
"""Visualize the debug target pose."""
105+
106+
if self.cfg.extra_cfg.debug_target_pose:
107+
visualize_marker("target_pose", self._target_poses["target_pose"])

source/autosim/autosim/skills/reach.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def extract_goal_from_info(
5656
object_pos_in_env, object_quat_in_env = object_pose_in_env[:, :3], object_pose_in_env[:, 3:]
5757

5858
reach_target_pose = env_extra_info.get_next_reach_target_pose(target_object)
59+
reach_target_pose = reach_target_pose.to(env.device)
5960
reach_target_pose_in_object = reach_target_pose.unsqueeze(0)
6061
reach_target_pos_in_object, reach_target_quat_in_object = (
6162
reach_target_pose_in_object[:, :3],
@@ -67,6 +68,7 @@ def extract_goal_from_info(
6768
)
6869
self._logger.info(f"Reach target position in environment: {reach_target_pos_in_env}")
6970
self._logger.info(f"Reach target quaternion in environment: {reach_target_quat_in_env}")
71+
self._target_poses["target_pose"] = torch.cat((reach_target_pos_in_env, reach_target_quat_in_env), dim=-1)
7072

7173
robot_root_pose_in_env = robot.data.root_pose_w
7274
robot_root_pos_in_env, robot_root_quat_in_env = robot_root_pose_in_env[:, :3], robot_root_pose_in_env[:, 3:]
@@ -146,6 +148,8 @@ def step(self, state: WorldState) -> SkillOutput:
146148
action: The action to be applied to the environment. [joint_positions with isaaclab joint order]
147149
"""
148150

151+
self.visualize_debug_target_pose()
152+
149153
traj_positions = self._trajectory.position
150154
if self._step_idx >= len(self._trajectory.position):
151155
traj_pos = traj_positions[-1]

source/autosim/autosim/skills/relative_reach.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,19 @@ def execute_plan(self, state: WorldState, goal: SkillGoal) -> bool:
106106
f"target pos in robot root frame: {target_pos}, target quat in robot root frame: {target_quat}"
107107
)
108108

109+
reach_target_pos_in_robot_root = offset_pos_in_robot_root.clone()
110+
reach_target_quat_in_robot_root = offset_quat_in_robot_root.clone()
111+
robot_root_pos_in_env, robot_root_quat_in_env = state.robot_root_pose[None, :3], state.robot_root_pose[None, 3:]
112+
reach_target_pos_in_env, reach_target_quat_in_env = PoseUtils.combine_frame_transforms(
113+
robot_root_pos_in_env,
114+
robot_root_quat_in_env,
115+
reach_target_pos_in_robot_root,
116+
reach_target_quat_in_robot_root,
117+
)
118+
self._logger.info(f"reach target pos in environment: {reach_target_pos_in_env}")
119+
self._logger.info(f"reach target quat in environment: {reach_target_quat_in_env}")
120+
self._target_poses["target_pose"] = torch.cat((reach_target_pos_in_env, reach_target_quat_in_env), dim=-1)
121+
109122
self._trajectory = self._planner.plan_motion(
110123
target_pos,
111124
target_quat,

source/autosim/autosim/utils/debug_util.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@
22
from isaaclab.markers import VisualizationMarkers
33
from isaaclab.markers.config import FRAME_MARKER_CFG
44

5-
markers: list[VisualizationMarkers] = []
5+
markers: dict[str, VisualizationMarkers] = {}
66

77

8-
def create_replay_marker(marker_id: str | int = 0):
8+
def create_marker(marker_name: str):
9+
if marker_name in markers.keys():
10+
return
911
frame_marker_cfg = FRAME_MARKER_CFG.copy()
1012
frame_marker_cfg.markers["frame"].scale = (0.1, 0.1, 0.1)
11-
marker_cfg = frame_marker_cfg.replace(prim_path=f"/World/Visuals/replay_marker_{marker_id}")
13+
marker_cfg = frame_marker_cfg.replace(prim_path=f"/World/Visuals/replay_marker_{marker_name}")
1214
marker = VisualizationMarkers(marker_cfg)
13-
markers.append(marker)
15+
markers[marker_name] = marker
1416

1517

16-
def marker_visualize(marker_idx: int, pos: torch.Tensor, quat: torch.Tensor):
17-
markers[marker_idx].visualize(translations=pos, orientations=quat, marker_indices=[0])
18+
def visualize_marker(marker_name: str, pose: torch.Tensor):
19+
pos, quat = pose[:, :3], pose[:, 3:]
20+
markers[marker_name].visualize(translations=pos, orientations=quat, marker_indices=[0])

source/autosim_examples/autosim_examples/autosim/pipelines/franka_lift_cube.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class FrankaCubeLiftPipelineCfg(AutoSimPipelineCfg):
1818
action_adapter: FrankaAbsAdapterCfg = FrankaAbsAdapterCfg()
1919

2020
def __post_init__(self):
21-
self.skills.lift.extra_cfg.lift_offset = 0.20
21+
self.skills.lift.extra_cfg.move_axis = "-z"
22+
self.skills.lift.extra_cfg.lift_offset = 0.30
2223

2324
self.occupancy_map.floor_prim_suffix = "Table"
2425

@@ -38,7 +39,8 @@ def load_env(self) -> ManagerBasedEnv:
3839
from isaaclab_tasks.utils import parse_env_cfg
3940

4041
env_cfg = parse_env_cfg(self._task_name, device="cuda:0", num_envs=1, use_fabric=True)
41-
env_cfg.terminations.time_out = None
42+
env_cfg.terminations = None
43+
env_cfg.scene.robot.spawn.rigid_props.disable_gravity = True
4244

4345
env = gym.make(self._task_name, cfg=env_cfg).unwrapped
4446
return env
@@ -54,8 +56,7 @@ def get_env_extra_info(self) -> EnvExtraInfo:
5456
ee_link_name="panda_hand",
5557
object_reach_target_poses={
5658
"cube": [
57-
# torch.tensor([0.0, 0.0, 0.1, 0.0, 1.0, 0.0, 0.0]),
58-
torch.tensor([0.0, 0.0, 0.15, 0.0, 1.0, 0.0, 0.0]),
59+
torch.tensor([0.0, 0.0, 0.10, 0.0, 1.0, 0.0, 0.0]),
5960
],
6061
},
6162
)

0 commit comments

Comments
 (0)