Untitled

이번에 새롭게 추가된 패키지 코드 > etri_env

각 로봇팔 별로 민우가 만든 Roboti Rack 환경에 대해 custom pick and place controller + 각 로봇을 연동하는 예제들을 모두 만들어 두었다.

멀티 환경 코드의 재사용성을 높이기 위해 아래와 같은 상속 구조를 갖도록 코드를 구성했다.

MultiEnv

MultiRoboticRack

MultiRoboticRackFrankaBasic

MultiRoboticRackUR5

MultiRoboticRackUR10

MultiRoboticRackZeus

[나중에는 이렇게 환경이 추가될 것이다.] MultiSemiconductor

MultiRoboticRackFrankaBasic

MultiRoboticRackUR5

MultiRoboticRackUR10

MultiRoboticRackZeus

class MultiEnv(object):

class MultiRoboticRack(MultiEnv):

class MultiRoboticRackFrankaBasic(MultiRoboticRack):
class MultiRoboticRackUR5(MultiRoboticRack):
class MultiRoboticRackUR10(MultiRoboticRack):
class MultiRoboticRackZeus(MultiRoboticRack):

MultiRoboticRackZeus를 예를 들어 살펴보자.

로봇을 등장시키고, 로봇의 컨트롤러까지 모두 MultiRoboticRackZeus에서 구현되고 연동되도록 해두었다.

매개변수로 ROBOT_TYPE이라는 것을 받고 이것에 따라서 2지 / 3지 그리퍼를 다르게 달릴 수 있도록 하였다.

    def add_robot(self):

        robot = None

        if self._robot_type == "2f85":
            robot = self._world.scene.add(
                Zeus2F(
                    prim_path=f"/World/Env_{self._index}/robot_{self._index}",
                    usd_path=self.ROBOT_PATH,
                    name=f"robot_{self._index}",
                    position=self._robot_position + self._xyz_offset,
                    orientation=self._robot_orientation,
                    attach_gripper=True,
                )
            )
        elif self._robot_type == "3f":
            robot = self._world.scene.add(
                Zeus3F(
                    prim_path=f"/World/Env_{self._index}/robot_{self._index}",
                    usd_path=self.ROBOT_PATH,
                    name=f"robot_{self._index}",
                    position=self._robot_position + self._xyz_offset,
                    orientation=self._robot_orientation,
                    attach_gripper=True,
                )
            )

        controller = CustomPickPlaceController(
            name="pick_place_controller",
            gripper=robot.gripper,
            robot_articulation=robot,
            end_effector_initial_height=1.2,
            robot_type="zeus",
        )
        
        self._controllers.append(controller)

그리고 custom pick and place controller 또한 robot_type을 매개변수로 받아

각 로봇별로 알맞은 컨트롤러를 연동 가능하도록 설계해 두었다.

Untitled