본문 바로가기

Others

MJCF 파일 분석(1) - 나만의 Manipulator task를 mujoco에서 만들자

작성자 : 김한결 / 석박통합과정 (gksruf621@postech.ac.kr)

 

 

MJCF에 대해 친절하게 다룬 글이 아닙니다. 대충 어떤 흐름으로 개발 하는지만 살펴주세요.

최종 목표: 나만의 Manipulator task를 mujoco에서 만들자

 

 

Baxter를 Mujoco 환경에서 사용해보고자 하는데 XML 파일을 mujoco로 simulator로 실행해보니 control이 되지 않는다. (만들어진 것만 쓴 폐해...)

MJCF와 mujoco environment에 대한 이해가 필요하다고 생각해 처음부터 차근차근 공부한다 생각하며 기록을 남기려고 한다.(robotsuite를 사용하는 방법도 있지만 최대한 library dependency를 줄이고자 한다)

 

이번글은 다음 영상을 축약한 내용이다.

https://www.youtube.com/watch?v=j1nCeqtfySQ 

 

준비 사항 : mujoco 설치

 

1. 디렉토리 이동 : /home/[컴퓨터 이름]/.mujoco/mujoco200/bin

2. 명령어 입력    : ./simulate

  - 아래와 같은 화면이 켜짐

 

3. xml file 만들기(아래 코드 복붙해서 만드시면 됩니다)

 

<mujoco>
    <worldbody>
      <light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
      <geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
      <body pos="0 0 1">
        <joint type="free"/>
      <geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
      </body>
    </worldbody>
</mujoco>

Joint="free" ->6DOF

geom type="box" -> 박스모양

참고로 plane은 size z축의 영향을 받지 않음

 

 

4. 3번에서 만든 xml을 2번에서 켜진 화면에 드래그앤드랍

 

5. XML reference document에서 추가할 수 있는것 테스트하기

 

예를들어 orientation을 바꾸고 싶다면 document에서 해당 부분을 찾은 후 적용해주자

 

<body pos="0 0 10" euler = "0 30 0">

위와 같이 해주면 30도 기울어진 상태에서 시뮬레이터가 실행된다.

 

 

 

mujoco는 angle defalut를 degree로 잡고 있는데 compiler를 radian로 바꿔주면 된다.

 

<mujoco>
    <compiler angle="radian"/>
    <worldbody>
      <light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
      <geom type="plane" size="1 1 0.1" rgba=".0 0.9 0 1"/>
      <body pos="0 0 1" euler = "0 -0.5 0">
        <joint type="free"/>
      <geom type="box" size=".1 .2 .3" rgba="0.9 .0 0 1"/>
      </body>
    </worldbody>
</mujoco>

여러가지 추가

<mujoco>
    <compiler angle="radian"/>
    <visual>
      <headlight ambient="0.5 0.5 0.5"/>
    </visual>
    <asset>
      <material name="white" rgba="1 1 1 1"/>
    </asset>
    <option gravity="0 0 -1"/>
    <worldbody>
      <light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
      <geom type="plane" size="1 1 0.1" rgba=".0 0.9 0 1"/>
      
      <!--Object 1-->
      <body pos="0 0 1" euler = "0 -0.5 0">
        <joint type="free"/>
        <inertial pos="0 0 0.3" mass="1" diaginertia="0.01 0.01 0.01"/>
      <!--geom type="box" size=".1 .2 .3" rgba="0.9 .0 0 1"/-->
      <geom type="box" size=".1 .2 .3" material="white"/>
      </body>
      
      <!--Object 2-->      
      <body pos="0 0 1.5" euler = "0 -0.5 0">
        <joint type="free"/>
        <inertial pos="0 0 0.0" mass="1" diaginertia="0.01 0.01 0.01"/>
      <!--geom type="box" size=".1 .2 .3" rgba="0.9 .0 0 1"/-->
      <geom type="sphere" size=".1" rgba=".5 0.5 0 1"/>
      </body>
      
      
    </worldbody>
</mujoco>

 

 

 

 

영상이 생각보다 딥하지 않아서 여기까지가 끝이다.

actuator나 stl을 load하는 방식에 대해서는 언급하지 않기 때문에 다른 영상이나 글을 참고해야할 것 같다.