# 여기에 환경 / 로봇 / 물체 / 컨트롤러 싹 다 들어있다.
from .multi_robotic_rack_2 import MultiRoboticRack

사용 예시

  1. self._pp_single_motion_dict를 수정하여 적절한 로봇의 offset, 물체의 이름으로 변경
        # 이건 물체마다 바꿔주어야 한다.
        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

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):