ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MuJoCo(Multi-Joint dynamics with Contact) 설명 및 정리 자료
    Engineering 2024. 11. 17. 19:30
    728x90

     

     

    사견으로는 무료인 만큼 생각보다 사전에 설정해야 할 부분들이 상당히 많은 것 같다. 

     

     

    MuJoCo(Multi-Joint dynamics with Contact)는 로보틱스 및 물리 기반 시뮬레이션 연구를 위해 개발된 물리 엔진으로, 빠르고 정확한 시뮬레이션 환경을 제공하는 것이 특징입니다. MuJoCo는 물리 기반 학습, 로봇 제어, 강화 학습, 의학 연구와 같은 다양한 분야에서 사용됩니다. OpenAI, DeepMind, Google Brain 등과 같은 연구소에서도 활용되고 있으며, 특히 강화 학습 환경에서 뛰어난 성능을 발휘합니다.

     

     

    주요 특징

    1. 정확하고 빠른 시뮬레이션
      • MuJoCo는 물리 시뮬레이션의 정밀도를 극대화하면서도 효율적인 계산이 가능하도록 설계되었습니다.
      • 강체, 유연체, 충돌 처리, 마찰 등을 물리적으로 정확하게 모델링합니다.
    2. 사용자 정의 가능
      • 사용자는 XML 형식의 파일로 로봇 및 환경을 자유롭게 정의할 수 있습니다.
      • 다양한 모델과 시뮬레이션을 유연하게 생성할 수 있어 연구 목적에 맞춘 환경 설계가 용이합니다.
    3. 다양한 활용 사례
      • 로보틱스: 로봇 동작 시뮬레이션, 제어 알고리즘 테스트
      • 강화 학습: OpenAI Gym 및 DeepMind Control Suite와의 통합
      • 생물학: 생체 역학 모델링, 인간 움직임 시뮬레이션
      • 기타: 물리 법칙 실험, 게임 개발
    4. 실시간 렌더링 및 시각화
      • 높은 수준의 그래픽을 제공하며, 실시간으로 시뮬레이션 환경을 시각적으로 확인할 수 있습니다.
    5. 오픈소스 및 접근성
      • MuJoCo는 2021년 10월 Google에 인수된 이후 무료로 공개되었습니다.
      • 현재 누구나 GitHub에서 무료로 다운로드하고 사용할 수 있습니다.

     

    MuJoCo의 구조

    1. 모델 정의
      • XML 파일로 모델의 구성 요소(링크, 조인트, 센서 등)를 정의합니다.
      • 힘, 속도, 마찰 계수 등의 물리적 속성도 포함됩니다.
    2. 물리 엔진
      • 강체 동역학과 접촉 역학의 계산을 처리하며, GPU 가속을 지원해 빠르게 실행됩니다.
    3. API
      • Python, C, C++와 같은 여러 언어에서 API를 제공해 사용자가 시뮬레이션을 제어하고 데이터를 분석할 수 있습니다.

    MuJoCo를 활용한 학습 환경

    MuJoCo는 대표적으로 강화 학습에서의 시뮬레이션 환경으로 널리 사용됩니다.

    • OpenAI Gym: MuJoCo와 통합된 강화 학습 테스트 환경 제공.
    • DeepMind Control Suite: MuJoCo 기반의 로봇 제어 문제 제공.

    이러한 플랫폼에서 MuJoCo의 정밀한 물리 엔진은 로봇의 실제 제어 환경을 학습하기 위한 이상적인 도구로 평가받습니다.


    MuJoCo 시작하기

    1. GitHub에서 다운로드.
    2. 설치 후 제공된 튜토리얼을 따라 기본적인 모델 정의와 시뮬레이션 실행 실습.
    3. OpenAI Gym이나 다른 프레임워크를 통해 MuJoCo 통합 학습 진행.

    MuJoCo는 물리 시뮬레이션의 정확성과 효율성을 필요로 하는 연구자와 개발자에게 최적의 도구입니다.

    더 많은 정보는 공식 홈페이지를 참고하세요.
    추가적으로 궁금한 점이 있다면 알려주세요!
    GPT Online에서 더 많은 정보를 확인하세요.

     
     
     

    MuJoCo의 주요 특징

    • 고성능 물리 시뮬레이션: 복잡한 로봇 시스템의 동역학을 정확하게 모델링하고 시뮬레이션합니다. 관절의 움직임, 마찰, 충돌 등 다양한 물리 현상을 실제와 매우 유사하게 구현합니다.
    • 강화 학습에 최적화: 다양한 강화 학습 알고리즘과의 호환성이 뛰어나 로봇 학습 연구에 많이 활용됩니다.
    • 빠른 시뮬레이션 속도: 실시간 시뮬레이션이 가능하여 빠른 알고리즘 개발과 테스트를 지원합니다.
    • 유연한 모델링: 다양한 형태의 로봇 모델을 생성하고 시뮬레이션할 수 있으며, 사용자 정의 모델을 만들 수도 있습니다.
    • 다양한 센서 모델: 카메라, 레이저 스캐너 등 다양한 센서 모델을 지원하여 실제 로봇 환경과 유사한 시뮬레이션을 구현합니다.
    • Python API: 파이썬을 기반으로 한 API를 제공하여 쉽게 사용할 수 있습니다.

    MuJoCo의 활용 분야

    • 로봇 학습: 강화 학습, 모방 학습 등을 통해 로봇에게 새로운 기술을 학습시키는 연구
    • 로봇 제어: 로봇의 움직임을 정밀하게 제어하기 위한 알고리즘 개발
    • 로봇 설계: 새로운 로봇 시스템을 설계하고 성능을 평가하기 위한 시뮬레이션
    • 자율주행: 자율주행 자동차의 알고리즘 개발 및 테스트

    MuJoCo의 장점

    • 정확한 물리 시뮬레이션: 실제 물리 현상을 정확하게 반영하여 신뢰성 있는 시뮬레이션 결과를 얻을 수 있습니다.
    • 높은 성능: 빠른 시뮬레이션 속도로 효율적인 연구를 지원합니다.
    • 활발한 커뮤니티: 많은 연구자들이 사용하고 있어 다양한 자료와 도움을 얻을 수 있습니다.

    MuJoCo의 단점

    • 학습 곡선: 다양한 기능을 제공하기 때문에 초보 사용자에게는 다소 복잡하게 느껴질 수 있습니다.
    • 시뮬레이션 환경 구축: 복잡한 시뮬레이션 환경을 구축하기 위해서는 많은 노력이 필요할 수 있습니다.

    결론

    MuJoCo는 로봇 연구 분야에서 가장 많이 사용되는 물리 엔진 중 하나입니다. 정확한 물리 시뮬레이션과 빠른 속도, 그리고 강력한 기능을 제공하여 로봇 학습, 제어, 설계 등 다양한 분야에서 활용될 수 있습니다. 하지만, 복잡한 시뮬레이션 환경을 구축하기 위해서는 많은 노력이 필요하다는 점을 고려해야 합니다.

     
     
     

    MuJoCoPermalink

    원래 MuJoCo를 파이썬에서 사용하려면 mujoco-py 라이브러리를 이용하여야 했다. 단순히 mujoco-py를 설치하면 쓸 수 있는 것이 아니라 MuJoCo 파일을 다운받아 특정 디렉토리로 옯기고 하는 복잡한 과정이 필요했다.

    근데 정말 다행히도 2.1.0. 버전 이후로는 바인딩이 되어서 단순히 mujoco 라이브러리를 설치하면 바로 사용할 수 있게 되었다. 또한 mujoco-py는 glfw 라이브러리가 충동하는 에러도 있었고 다양한 dependency 관련 에러가 많이 발생했는데, mujoco로 바인딩된 후에는 에러가 모두 사라졌다.

    !apt-get update
    !pip install mujoco
    

    렌더링Permalink

    참고 링크: [1] [2]

    Colab에는 GUI가 따로 없기 때문에 MuJoCo 환경을 렌더링하기 위해서는 pyvirtualdisplay가 필요하다. pyvirtualdisplay를 사용하기 위해서는 Xvfb (X virtual framebuffer) 파일이 필요하므로 xvfb와 xvfbwrapper를 추가로 설치해준다.

    !pip install pyvirtualdisplay
    !sudo apt-get install xvfb
    !pip install xvfbwrapper
    

    참고로 xvfb를 설치하지 않으면 해당 파일이 없다는 에러가 발생한다.

    FileNotFoundError: [Errno 2] No such file or directory: ‘Xvfb’

    렌더링을 위한 코드는 아래와 같다.

    import gym
    import glob
    import io
    import base64
    from IPython.display import HTML
    from IPython import display as ipythondisplay
    from gym.wrappers.record_video import RecordVideo
    from pyvirtualdisplay import Display
    
    display = Display(visible=0, size=(1400, 900))
    display.start()
    
    def show_video():
      mp4list = glob.glob('video/*.mp4')
      if len(mp4list) > 0:
        mp4 = mp4list[0]
        video = io.open(mp4, 'r+b').read()
        encoded = base64.b64encode(video)
        ipythondisplay.display(HTML(data='''<video alt="test" autoplay
                    loop controls style="height: 400px;">
                    <source src="data:video/mp4;base64,{0}" type="video/mp4" />
                 </video>'''.format(encoded.decode('ascii'))))
      else:
        print("Could not find video")
    
    
    env_name = 'Ant-v4'
    env = gym.make(env_name, render_mode="rgb_array")
    env = RecordVideo(env, './video',  episode_trigger = lambda episode_number: True)
    state = env.reset()
    
    while True:
      env.render()
    
      mu,sigma = agent.get_action(torch.from_numpy(state).float().to(device))
      dist = torch.distributions.Normal(mu,sigma[0])
      action = dist.sample()
      state, reward, done, info = env.step(action.cpu().numpy())
    
      if done: break
    
    env.close()
    show_video()
    

    gym.wrappers의 Monitor는 deprecated 되었기 때무에 gym.wrappers.record_video의 RecordVideo를 사용하였다. show_video 함수는 다음과 같이 작동한다.

    1. RecordVideo로 gym을 녹화 후 ‘./video’ 디렉토리에 mp4로 저장
    2. glob으로 저장된 mp4의 이름을 검색
    3. io와 base64로 동영상을 불러와 인코딩
    4. Colab output에 HTML로 띄워줌

    while 루프는 단순하게 렌더링과 action을 반복하는 과정이므로, 강화학습 환경과 에이전트에 따라 수정하면 된다.

     

     

    참고 : 

    https://kimjy99.github.io/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/mujoco/

     

    [MuJoCo] Google Colab에서 MuJoCo 렌더링하기

    Google Colab에서 MuJoCo 렌더링하기

    kimjy99.github.io

     

    반응형
Designed by Tistory.