Files
gen_data_agent/data_gen_dependencies/action/slide.py
2025-09-24 11:11:24 +08:00

48 lines
1.7 KiB
Python

import numpy as np
from data_gen_dependencies.action.base import StageTemplate, pose_difference
class SlideStage(StageTemplate):
def __init__(self, active_obj_id, passive_obj_id, active_element=None, passive_element=None, target_pose=np.eye(4), active_obj=None, passive_obj=None, **kwargs):
super().__init__(active_obj_id, passive_obj_id, active_element, passive_element)
self.pre_distance = 0.0
self.move_distance = 0.08
vector_direction = passive_element['direction']
self.generate_substage(target_pose, vector_direction)
def generate_substage(self, target_pose, vector_direction):
vector_direction = vector_direction / np.linalg.norm(vector_direction)
# slide
move_pose = target_pose.copy()
move_pose[:3,3] += vector_direction * self.move_distance
self.sub_stages.append([move_pose, None, np.eye(4), 'Simple'])
# open gripper
self.sub_stages.append([None, 'open', np.eye(4), None])
def check_completion(self, objects):
if self.__len__()==0:
return True
sub_stage = self.sub_stages[self.step_id]
move_transform, gripper_action = sub_stage[0], sub_stage[1]
if gripper_action=='open':
self.step_id += 1
return True
last_pose = self.last_statement['objects'][self.passive_obj_id].obj_pose
target_obj_pose = last_pose @ move_transform
current_obj_pose = objects[self.passive_obj_id].obj_pose
pos_diff, _ = pose_difference(current_obj_pose, target_obj_pose)
succ = pos_diff < 0.04
#print(pos_diff, succ)
if succ:
self.step_id += 1
return succ