본문 바로가기
번역/강화학습(RL)

[번역] Isaac Gym - docs 문서 살펴보기

by 붕붕=33 2024. 4. 30.

Isaac Gym을 다운로드 및 설치 후 파일을 열면 docs라는 이름의 폴더를 확인할 수 있다. 폴더 아래에는 html 형식의 파일들이 여러개 있는데 파일 하나를 선택하여 더블클릭하면 브라우저에서 GUI에서 Isaac Gym 관련 문서를 읽을 수 있다. 아래는 index.html 파일을 열었을 때의 결과이다.

Isaac Gym 다운로드 및 설치 후 index.html 파일 더블클릭

 

왼쪽 목록에서 보듯이 docs 문서는 크게 6개의 항목으로 이루어져 있다.

  • About Isaac Gym: Isaac Gym 개요
  • Installation: 설치
  • Realease Notes: 배포 기록
  • Examples: 예제
  • Programming: 프로그래밍 상세 설명
  • Frequently Asked Questions (FAQ): 자주 묻는 질문

 


About Isaac Gym

What is Isaac Gym? - Isaac Gym이란

Isaac Gym은 NVIDIA에서 강화 학습(Reinforcement Learing, RL) 연구를 위해 배포한 프로토타입의 물리 시뮬레이션 환경이다.

 

Isaac Gym을 사용하여 개발자들은 물리법칙에 기반한 GPU-가속 end-to-end RL을 실험할 수 있다. 다른 유사한 'gym' 스타일의 프로그램들과 달리, Isaac Gym에서는 시뮬레이션이 GPU에서 실행되므로 알고리즘의 연산 결과를 GPU에서 CPU 메모리에 다시 복사하는 대신 연산부터 시뮬레이션까지 계속해서 GPU 텐서에 저장할 수 있다. 이러한 결과에 액세스하기 위해 제공되는 텐서 기반 API는 RL의 observation 및 reward 계산도 GPU에서 수행될 수 있도록 한다.

 

이 조합을 사용하면 수천 개의 환경을 단일 GPU에서 동시에 시뮬레이션할 수 있으므로, 이전에는 전체 데이터 센터를 요구했던 실험을 단일 워크스테이션에서 돌아가게 할 수 있다.

 

Isaac Gym에는 기본적인 PPO 알고리즘 구현과 함께 사용할 수 있는 간단한 RL task 시스템이 포함되어 있지만, 사용자가 원하는 대로 task 시스템과 RL 알고리즘을 바꿀 수 있다.

 

Isaac Gym의 핵심 기능은 다음과 같다:

  • URDF 및 MJCF 파일 가져오기 지원
  • environment의 state를 평가(evaluate)하고 actions을 적용하기 위한 GPU-가속 텐서 API
  • 위치, 속도, 힘, 토크 등 다양한 environment 센서 지원
  • 물리 매개변수에 대한 런타임 domain randomization
  • Jacobian / inverse kinematics 지원

 

How does Isaac Gym relate to Omniverse and Isaac Sim? - Isaac Gym은 Omniverse와 Isaac Sim과 어떻게 연관되어 있는가

현재 Isaac Gym은 프로토타입 형태이며, 다른 NVIDIA 시뮬레이션 또는 로보틱스 제품들과 직접적으로는 상호작용하지 않는 독립 실행형 시스템이지만, 내부적으로 동일한 기본 PhysX 시뮬레이션 엔진을 사용한다.

 

Omniverse 및 Omniverse 기반 Isaac Sim은 Pixar의 USD(Universal Scene Description) 장면 설명 언어를 사용하여 시뮬레이션할 environments를 설명하는 반면, Isaac Gym의 environment setup에서는 Python 코드 및 사용자 정의 API를 사용하거나 URDF 및 MJCF 형식 파일에서 robot description을 가져올 수 있다.

 

Isaac Gym의 렌더링은 상대적으로 기본적인 것으로, Omniverse에서 제공되는 ray tracing이나 보다 정교한 synthetic data sensors를 지원하지 않는다.

 

The Future of Isaac Gym - Isaac Gym의 앞으로

Isaac Gym의 핵심인 물리 시뮬레이션을 위한 텐서 기반 API (tensor-based API for physics simulation)는 NVIDIA Omniverse 플랫폼의 향후 릴리스에서 제공될 예정이지만, environment setup에 사용되는 API들은 USD 기반으로 전환될 예정이다. Omniverse로 이전하는 과정에서 일부 기능과 API는 확실히 변경될 것이며, 고급 렌더링 및 soft body 시뮬레이션과 같은 추가적인 Omniverse 기능을 지원하는 새로운 API도 추가될 것이다.

 

Isaac Gym 기능의 Omniverse으로의 전환에 대한 자세한 내용은 가능해지는대로 NVIDIA Dev Talk 포럼에 공유될 예정이다.

 

그 동안 우리는 GPU 기반 강화 학습의 잠재력을 탐구하고 사용자의 경험에 대한 피드백 제공을 위해 연구원과 학계를 초대한다!

 

Installation

Prerequisites

  • 우분투 18.04 또는 20.04
  • 파이썬 3.6, 3.7 또는 3.8
  • 최소한의 NVIDIA 드라이버 버전:
    • 리눅스: 470

Set up the Python package - 파이썬 패키지 설치

Gym을 설정하면 numpy 및 PyTorch를 포함한 모든 Python package depencencies가 자동으로 설치된다. 기존 Python 환경에 패키지들을 설치하거나 아예 새로운 conda 환경을 만들어 패키지들을 설치할 수 있다. 모든 패키지가 서로 잘 작동하는 것으로 알려진 버전으로 설치되고 호환되지 않는 패키지 버전으로 인해 기존 Python 환경이 엉망이 될 위험이 없기 때문에, 새 conda 환경을 만드는 것이 더 안전한 옵션이다.

 

● Install in an existing Python environment - 기존 파이썬 환경에 패키지 설치

    (설치에 대한 자세한 내용은 파일 원문을 참조하기 바란다.)

  Install in a new conda environment - 새로운 conda 환경 생성 및 설치

    (설치에 대한 자세한 내용은 파일 원문을 참조하기 바란다.)

  Install in a Docker container - 도커 컨테이너에 패키지 설치

    (설치에 대한 자세한 내용은 파일 원문을 참조하기 바란다.)

 

Testing the installation - 설치 확인

  Simple Example - 간단한 예제

설치를 확인하기 위해, python/examples 하위 디렉토리로 이동하여 아래와 같이 예제를 실행할 수 있다:

python joint_monkey.py

 

예제 스크립트에서는 해당 위치를 기준으로 assets을 찾을 수 있다고 가정하므로 해당 디렉터리에서 실행하는 것이 중요하다.

 

joint monkey 예제에서는 assets을 로드하고 전체 동작 범위의 모든 자유도를 애니메이션한다.

 

출처: Isaac Gym Preview 4 release docs의 install.html 내 joint monkey 예제

 

  Reinforcement learning example - 강화학습 예제

강화 학습 task를 실행하여 GPU 시뮬레이션 및 Pytorch 통합을 테스트할 수도 있다. 이를 위해서는 IsaacGymEnvs repository (https://github.com/NVIDIA-Omniverse/IsaacGymEnvs)를 설치해야 한다. IsaacGymEnvs repository를 설치하고 강화 학습 테스크를 시작하려면 README의 지침을 따라하도록 한다. "Cartpole" task는 테스트하기에 좋은 간단한 예제 코드이며, headless 모드에서 5초 이내에 학습 가능할 것으로 예상된다.

 

출처: Isaac Gym Preview 4 release docs의 install.html 내 Cartpole 예제

 

Troubleshooting - 트러블슈팅

Isaac Gym은 집중적으로 개발 중에 있으며 가끔 문제가 발생한다.

 

예제를 실행할 때 충돌이나 기타 문제가 발생하는 경우:

  • 시스템이 상단에 나열된 요구 사항을 충족하는지 확인하기
  • 올바른 패키지가 사용되고 있는지 확인하기 (pip show isaacgym). 패키지가 두 번 이상 설치된 경우, 보고된 위치가 사용하려는 버전을 가리키는지 확인하기.
  • Intel 그래픽이 통합된 시스템이라면, NVIDIA GPU가 선택되어 있는지 확인하기. 예를 들어 Ubuntu 18.04에서는 sudo prime-select nvidia를 실행할 수 있다. vulkaninfo를 실행할 때 여러 Vulkan 장치가 표시되는 경우, 명시적으로 NVIDIA GPU를 강제로 사용해야 할 수도 있다: export VK\_ICD\_FILENAMES=/usr/share/vulkan/icd.d/nvidia\_icd.json

 

For Anaconda Users - 아나콘다 사용자들에게

다음과 같은 에러가 난다면:

ImportError: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

 

다음과 같이 대응되는 파이썬 라이브러리를 설치하는 것이 문제를 해결할 것이다:

sudo apt install libpython3.7

 

우분투 20.04에서 진행 중이라면, Ubuntu 20.04는 libpython3.7 패키지가 없기 때문에 대신 LD_LIBRARY_PATH 변수를 적절하게 설정해야 한다. Anaconda 3가 /home/xyz 아래에 설치되어 있고 rlgpu라는 이름의 아나콘다 환경을 생성한 경우:

export LD_LIBRARY_PATH=/home/xyz/anaconda3/envs/rlgpu/lib

 

아래와 같은 에러가 발생한 경우:

ImportError: /home/xyz/anaconda3/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.20` not found (required by /home/xyz/carbgym/python/isaacgym/_bindings/linux64/gym_36.so)

이는 Anaconda와 함께 배포되는 libstdc++ 버전이 Isaac Gym을 구축하기 위해 시스템에서 사용되는 버전과 다르다는 것을 의미한다. Anaconda는 libstdc++ 시스템을 설치된 시스템으로 마스킹하는 몇 가지 environment 속임수를 사용하지만, 시스템에 Isaac Gym이 구축된 방식과 호환되지 않을 수 있다. 이 문제를 해결할 수 있는 방법은 여러 가지가 있지만 그 중 어떤 것도 썩 좋지는 않다. 가장 간단한 방법은 Anaconda가 설치한 충돌하는 libstdc++ 파일을 다른 디렉터리로 이동하여 "숨기는" 것입니다:

mkdir ${YOUR_CONDA_ENV}/lib/_unused
mv ${YOUR_CONDA_ENV}/lib/libstdc++* ${YOUR_CONDA_ENV}/lib/_unused

 

 

Realease Notes

Release Notes 목록

(배포 버전에 대한 자세한 내용은 파일 원문을 참조하기 바란다.)

 

Examples

Programming Examples - 프로그래밍 예제

  Common Command Line Options - 공통으로 사용되는 명령어 옵션들

  (자세한 내용은 파일 원문을 참조하기 바란다.)

 

  List of Examples

  • Collision filtering (1080_balls_of_solitude.py)
  • Asset and Environment Info (asset_info.py)
  • Body physics properties example (body_physics_props.py)
  • Domain Randomization (domain_randomization.py)
  • Franka Attractor (franka_attractor.py)
  • Isaac Gym Graphics Example (graphics.py)
  • DOF Controls (dof_controls.py)
  • Joint Monkey (joint_monkey.py)
  • Gym Math API (maths.py)
  • Soft Body (soft_body.py)
  • Visualize Transforms (transforms.py)
  • Projectiles (projectiles.py)
  • Large mass ratio test (large_mass_ratio.py)
  • Kuka bin example (kuka_bin.py)
  • PyTorch Interop (interop_torch.py)
  • Franka IK Picking (franka_cube_ik.py)
  • Franka Operational Space Control (franka_osc.py)
  • Apply Forces (apply_forces.py)
  • Apply Forces at Positions (apply_forces_at_pos.py)
  • Multiple Cameras (multiple_camera_envs.py)
  • Graphics Up-Axis (test_graphics_up.py)
  • Graphics Materials Example (graphics_materials.py)
  • Actor Scaling (actor_scaling.py)
  • Terrain Creation (terrain_creation.py)
  • Spherical Joint (spherical_joint.py)

(자세한 내용은 파일 원문을 참조하기 바란다.)

 

Reinforcement Learning Examples - 강화학습 예제

다음 링크 방문: https://github.com/NVIDIA-Omniverse/IsaacGymEnvs.

 

Bundled Assets - 번들링된 assets

  Articulated Models

다음 color scheme은 아래 articulated models을 나타내는 데 사용된다:

출처: docs/examples/assets.html#articulated-models

  • MJCF Models
    • Ant (assets/mjcf/nv_ant.xml)
    • Humanoid (assets/mjcf/nv_humanoid.xml)
  • URDF Models
    • Anymal (assets/urdf/anymal_b_simple_description/urdf/anymal.urdf)
    • Franka Panda (assets/urdf/franka_description/robots/franka_panda.urdf)
    • Kinova Jaco (assets/urdf/kinova_description/urdf/kinova.urdf)
    • Cabinet (assets/urdf/sektion_cabinet_model/urdf/sektion_cabinet.urdf)

(각 asset에 대한 자세한 이미지는 파일 원문을 참조하기 바란다.)

 

  Textures

다음 texture assets은 visualization 및 domain randomization 목적으로 gym에서 사용할 수 있다:

  • background_texture_metal_rust.jpg
  • metal_wall_iron_fence.jpg
  • particle_board_paint_aged.jpg
  • pebble_stone_texture_nature.jpg
  • texture_background_wall_paint_2.jpg
  • texture_background_wall_paint_3.jpg
  • texture_license.txt
  • texture_stone_stone_texture_0.jpg
  • texture_wood_brown_1033760.jpg

 

Programming

Programming 하위 목록

(자세한 내용은 파일 원문을 참조하기 바란다: docs/programming/index.html#programming)

 

Frequently Asked Questions

  • What is the difference between dt and substep? - dt와 substep의 차이
  • What happens when you call gym.simulate()? - gum.simulate()를 호출하면 어떻게 되나
  • How do you handle multiple actors in one environment? - 한 environment에서 여러개의 actors를 다루는 방법
  • How do I move the pose, joints, velocity, etc. of an actor? - actor의 위치, 관절, 속도 등을 이동하는 방법

댓글