# 여기에 환경 / 로봇 / 물체 / 컨트롤러 싹 다 들어있다.
from .multi_robotic_rack_2 import MultiRoboticRack
# 이건 물체마다 바꿔주어야 한다.
self._pp_single_motion_dict = {
"end_effector_offset": np.array([0, 0, 0]),
# 실제 멀티 환경에서는 Wine_Glass_1_0, Wine_Glass_1_1 이렇게 조회될 것임
"object_name": "Wine_Glass_1",
"picking_offset": np.array([0.15, 0, 0]),
"picking_object_offset": np.array([0.0, 0.0, 0.12]),
"picking_orientation": np.array([-0.7071068, 0, 0.7071068, 0]),
"placing_position": np.array([0.30996961, -0.1896723, 0.8235882]),
"placing_offset": np.array([0.15, 0, -0.05]),
"placing_object_offset": np.array([0, 0, 0]),
"placing_orientation": np.array([0, -0.7071068, 0, 0.7071068]),
}
이 작업을 해준 뒤, set_motion_dict을 통해 MultiRoboticRack에 전달하면 끝
def setup_scene(self):
self._world = self.get_world()
self._stage = omni.usd.get_context().get_stage()
self._multi_robotic_rack = MultiRoboticRack(
# TODO: 지금은 배경이 없는데, 배경과 더불어 배경 USD를 추가해서 불러보기
add_background=False,
bg_path="",
add_replicator=False,
env_offsets=self._env_offsets,
verbose=True,
)
self._multi_robotic_rack.set_motion_dict(self._pp_single_motion_dict)
self._multi_robotic_rack.set_world(self._world)
self._multi_robotic_rack.setup_scene()
return
forward라는 함수만 실행하면 알아서 PP가 동작한다.
def physics_step(self, step_size):
self._multi_robotic_rack.forward()
return
MultiRoboticRack는 MultiEnv의 상속을 받고 MultiEnv에는 이미 여러 함수들이 구현되어 있어서 반복 구현할 필요가 없다.
from omni.isaac.etri_env import create_aluminum_polished_material, create_iron_material, create_copper_material, create_glass_material
from omni.isaac.etri_env import add_physical_properties, add_material_to_prim
from omni.isaac.etri_env import add_object, add_semantic_data
from omni.isaac.etri_env import MultiEnv
from omni.isaac.custom_controller import CustomPickPlaceController
class MultiRoboticRack(MultiEnv):