9 minute read

Isaac Sim을 활용한 4족보행 시뮬레이션 및 강화학습 가이드

1. 시스템 요구사항 및 환경 설정

1.1. 하드웨어 요구사항

Isaac Sim은 고사양 시뮬레이션 도구이므로, 원활한 작동을 위해 충분한 하드웨어 자원이 필요합니다. RTX 5060 Ti 그래픽 카드는 Isaac Sim 사용에 적합하며, 다음은 일반적인 권장 사양입니다.

  • CPU: 4~8 코어 이상 (Intel i7 또는 AMD Ryzen 7 이상 권장)
  • RAM: 32GB 이상 (강화학습 등 복잡한 시뮬레이션의 경우 64GB 이상 권장)
  • 저장 공간: 50GB 이상의 SSD 여유 공간 (500GB 이상 권장)
  • GPU: NVIDIA GeForce RTX 4080 또는 RTX 5080 이상 권장. RTX 5060 Ti는 사용 가능하며, 최신 드라이버 설치가 필수입니다.

1.2. Ubuntu 환경 설정

RTX 5060 Ti 그래픽 카드를 Ubuntu에서 사용하기 위해서는 적절한 NVIDIA 드라이버 설치가 필수적입니다. 다음 단계를 따르세요.

  1. 기존 NVIDIA 드라이버 제거 (선택 사항): 새로운 드라이버 설치 전에 기존에 설치된 드라이버가 있다면 충돌을 방지하기 위해 제거하는 것이 좋습니다.
    sudo apt-get purge nvidia-*
    sudo apt-get autoremove
    sudo apt-get clean
    
  2. PPA (Personal Package Archive) 추가 및 업데이트: 최신 NVIDIA 드라이버를 제공하는 PPA를 추가합니다.
    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt-get update
    
  3. NVIDIA 드라이버 설치: RTX 5060 Ti를 지원하는 최신 드라이버를 설치합니다. 검색 결과에 따르면 570.153.02 또는 575.51.02 버전이 언급되었습니다. 다음 명령어를 사용하여 권장 드라이버를 설치하거나 특정 버전을 지정하여 설치할 수 있습니다.
    sudo apt-get install nvidia-driver-575  # 최신 권장 드라이버 설치
    # 또는 특정 버전 설치 (예시)
    # sudo apt-get install nvidia-driver-570
    
  4. CUDA Toolkit 설치 (선택 사항이나 Isaac Sim 사용에 필수): Isaac Sim은 NVIDIA CUDA를 활용하므로, CUDA Toolkit을 설치해야 합니다. NVIDIA 개발자 웹사이트에서 최신 CUDA Toolkit을 다운로드하여 설치하거나, 다음 명령어를 사용할 수 있습니다.
    sudo apt-get install nvidia-cuda-toolkit
    

    설치 후 nvcc --version 명령어로 CUDA가 제대로 설치되었는지 확인할 수 있습니다.

  5. 시스템 재부팅: 드라이버 설치를 완료한 후에는 시스템을 재부팅하여 변경 사항을 적용합니다.
    sudo reboot
    
  6. 드라이버 설치 확인: 재부팅 후 nvidia-smi 명령어를 실행하여 드라이버가 올바르게 설치되었고 GPU가 인식되는지 확인합니다.
    nvidia-smi
    

    이 명령어가 GPU 정보와 드라이버 버전 등을 출력하면 성공적으로 설치된 것입니다.

1.3. Docker 및 NVIDIA Container Toolkit 설치 (권장)

Isaac Sim은 Docker 컨테이너 환경에서 실행하는 것이 권장됩니다. 이를 위해 Docker와 NVIDIA Container Toolkit을 설치해야 합니다.

  1. Docker 설치:
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    echo \
      "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  2. Docker 그룹에 사용자 추가: Docker 명령어를 sudo 없이 사용하기 위해 현재 사용자를 docker 그룹에 추가합니다.
    sudo usermod -aG docker $USER
    newgrp docker  # 또는 시스템 재부팅
    
  3. NVIDIA Container Toolkit 설치:
    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/ubuntu22.04/libnvidia-container.list | \
        sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
        sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit
    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    

이제 시스템 요구사항을 충족하고 Isaac Sim을 실행할 준비가 되었습니다. 다음 단계에서는 Isaac Sim을 설치하고 설정하는 방법을 다룹니다.

2. Isaac Sim 설치 및 설정

Isaac Sim은 NVIDIA Omniverse 플랫폼의 일부이며, Docker 컨테이너를 사용하여 설치하는 것이 권장됩니다. 이는 환경 설정의 복잡성을 줄이고 종속성 문제를 피하는 데 도움이 됩니다.

2.1. Omniverse Launcher를 통한 설치 (권장)

가장 일반적이고 편리한 방법은 NVIDIA Omniverse Launcher를 사용하는 것입니다. Omniverse Launcher는 Isaac Sim을 포함한 다양한 Omniverse 애플리케이션을 관리하고 설치할 수 있는 GUI 도구입니다.

  1. NVIDIA Omniverse Launcher 다운로드 및 설치: NVIDIA Omniverse 웹사이트 (https://developer.nvidia.com/nvidia-omniverse-platform)에서 Linux용 Omniverse Launcher를 다운로드합니다. 다운로드한 .AppImage 파일을 실행 가능하게 만들고 실행합니다.
    chmod +x ~/Downloads/omniverse-launcher-linux.AppImage
    ~/Downloads/omniverse-launcher-linux.AppImage
    
  2. Omniverse 계정 로그인: Launcher를 실행한 후 NVIDIA 계정으로 로그인합니다. 계정이 없다면 새로 생성해야 합니다.

  3. Isaac Sim 설치: Launcher 내에서 ‘Exchange’ 탭으로 이동하여 ‘Isaac Sim’을 검색합니다. ‘Install’ 버튼을 클릭하여 Isaac Sim을 다운로드하고 설치합니다. 설치 경로는 기본값을 따르거나 원하는 위치로 변경할 수 있습니다.

  4. Isaac Sim 실행: 설치가 완료되면 ‘Library’ 탭에서 Isaac Sim을 찾아 ‘Launch’ 버튼을 클릭하여 실행합니다. 첫 실행 시 필요한 추가 구성 요소가 다운로드될 수 있습니다.

2.2. Docker 컨테이너를 통한 설치 (대안)

Omniverse Launcher를 사용하지 않거나, headless 환경에서 Isaac Sim을 실행해야 하는 경우 Docker 컨테이너를 직접 사용할 수 있습니다. 이 방법은 더 많은 수동 설정이 필요하지만, 유연성을 제공합니다.

  1. Isaac Sim Docker 이미지 다운로드: NVIDIA NGC (NVIDIA GPU Cloud)에서 Isaac Sim Docker 이미지를 다운로드합니다. Docker Hub와 유사하게 docker pull 명령어를 사용합니다.
    docker pull nvcr.io/nvidia/isaac-sim:2023.1.1 # 최신 버전 확인 필요
    

    참고: 2023.1.1은 예시 버전입니다. NVIDIA Omniverse Isaac Sim 문서에서 최신 버전을 확인하세요.

  2. Isaac Sim 컨테이너 실행: 다운로드한 Docker 이미지를 사용하여 Isaac Sim 컨테이너를 실행합니다. GPU 가속을 위해 nvidia-container-toolkit이 올바르게 설정되어 있어야 합니다. ```bash docker run –name isaac-sim –gpus all -e

ACCEPT_EULA=Y -e “PRIVACY_CONSENT=Y” -v ~/isaac-sim:/isaac-sim nvcr.io/nvidia/isaac-sim:2023.1.1 ``` * --name isaac-sim: 컨테이너 이름을 지정합니다. * --gpus all: 모든 GPU를 컨테이너에 할당합니다. * -e ACCEPT_EULA=Y -e "PRIVACY_CONSENT=Y": NVIDIA EULA 및 개인정보 보호 동의를 자동으로 수락합니다. * -v ~/isaac-sim:/isaac-sim: 호스트의 ~/isaac-sim 디렉토리를 컨테이너의 /isaac-sim에 마운트합니다. 이는 작업 공간 및 데이터를 유지하는 데 중요합니다.

  1. 컨테이너 내부에서 Isaac Sim 실행: 컨테이너가 실행되면, 컨테이너 내부에서 Isaac Sim을 시작합니다. 이는 일반적으로 컨테이너에 접속한 후 실행 스크립트를 통해 이루어집니다.
    docker exec -it isaac-sim /bin/bash
    # 컨테이너 내부에서 Isaac Sim 실행 스크립트 실행 (예시)
    ./run_app.sh
    

2.3. Python 환경 설정

Isaac Sim은 Python을 기반으로 하며, 시뮬레이션 제어 및 강화학습을 위해 Python 환경 설정이 중요합니다.

  1. Isaac Sim Python 환경 활성화: Isaac Sim은 자체 Python 환경을 제공합니다. Omniverse Launcher를 통해 설치했다면, Isaac Sim 설치 디렉토리 내에 Python 환경이 있습니다. Docker 컨테이너를 사용한다면, 컨테이너 내부에 이미 설정되어 있습니다.
    # Isaac Sim 설치 디렉토리 내의 Python 환경 활성화 (예시)
    cd /path/to/isaac-sim/kit
    ./python.sh
    
  2. 필요한 Python 패키지 설치: 강화학습 라이브러리 (예: Stable Baselines3, Ray RLlib) 및 기타 필요한 패키지를 설치합니다.
    pip install stable-baselines3 gymnasium
    

이제 Isaac Sim 설치 및 기본 설정이 완료되었습니다. 다음 단계에서는 4족보행 로봇 시뮬레이션을 구현하는 방법을 다룹니다.

3. 4족보행 로봇 시뮬레이션 구현

Isaac Sim에서 4족보행 로봇을 시뮬레이션하기 위해서는 로봇 모델을 불러오고, 물리적 특성을 설정하며, 제어 스크립트를 작성해야 합니다.

3.1. 로봇 모델 임포트 (URDF/USD)

Isaac Sim은 USD (Universal Scene Description) 형식을 기본으로 사용하지만, 로봇 모델링에 널리 사용되는 URDF (Unified Robot Description Format) 파일도 임포트할 수 있습니다. 대부분의 4족보행 로봇 모델은 URDF 형태로 제공됩니다.

  1. URDF 임포터 확장 기능 활성화: Isaac Sim에서 URDF 파일을 임포트하려면 omni.importer.urdf 확장 기능을 활성화해야 합니다. Isaac Sim UI에서 Window -> Extensions로 이동하여 검색 후 활성화할 수 있습니다.

  2. URDF 파일 임포트: 활성화된 임포터 확장 기능을 통해 URDF 파일을 Isaac Sim으로 불러올 수 있습니다. 일반적으로 File -> Import 메뉴를 통해 URDF 파일을 선택하거나, Python 스크립트를 통해 임포트할 수 있습니다.

    from omni.importer.urdf import UrdfImporter
    
    # URDF 파일 경로
    urdf_path = "/path/to/your/quadruped_robot.urdf"
    
    # 임포터 생성 및 설정
    importer = UrdfImporter()
    importer.parse(urdf_path)
    
    # 로봇 모델 스테이지에 추가
    prim_path = importer.import_robot(urdf_path, "/World/Quadruped")
    print(f"Robot imported to: {prim_path}")
    
    • USD 변환: URDF 파일을 임포트하면 Isaac Sim 내부적으로 USD 형식으로 변환됩니다. 변환된 USD 파일을 저장하여 다음부터는 USD 파일을 직접 불러올 수 있습니다.

3.2. 물리 시뮬레이션 설정

임포트된 로봇 모델이 실제처럼 움직이려면 물리적 특성(질량, 관성, 마찰 등)이 정확하게 설정되어야 합니다. URDF 파일에 이러한 정보가 포함되어 있다면 자동으로 적용되지만, 필요한 경우 Isaac Sim UI나 Python 스크립트를 통해 수정할 수 있습니다.

  • 강체 속성: 각 링크(link)의 질량, 관성 텐서 등을 확인하고 필요에 따라 조정합니다.
  • 조인트 속성: 각 조인트(joint)의 제한(limit), 감쇠(damping), 강성(stiffness) 등을 설정하여 로봇의 움직임을 제어합니다.
  • 충돌 속성: 로봇의 각 부분이 환경과 상호작용할 때의 충돌 속성을 정의합니다.

3.3. 로봇 제어 스크립트 작성

Isaac Sim에서 로봇을 제어하는 방법은 다양합니다. Python API를 사용하여 로봇의 조인트에 직접 명령을 내리거나, 고수준의 컨트롤러를 구현할 수 있습니다.

  1. Python API를 이용한 조인트 제어: Isaac Sim의 omni.isaac.core 라이브러리를 사용하여 로봇의 조인트 위치, 속도, 토크 등을 제어할 수 있습니다.
    from omni.isaac.core.articulations import Articulation
    from omni.isaac.core.utils.nucleus import get_assets_root_path
    import omni.usd
    import carb
    
    # 시뮬레이션 환경 초기화
    from omni.isaac.kit import SimulationApp
    kit = SimulationApp()
    
    from omni.isaac.core import World
    world = World(stage_units_in_meters=1.0)
    world.scene.add_default_ground_plane()
    
    # 로봇 모델 불러오기 (예시: Isaac Sim에 내장된 ANYmal 로봇)
    assets_root_path = get_assets_root_path()
    if assets_root_path is None:
        carb.log_error("Could not find Isaac Sim assets folder")
    
    anymal_asset_path = assets_root_path + "/Isaac/Robots/ANYmal/anymal_c.usd"
    anymal = world.scene.add_articulation(anymal_asset_path, prim_path="/World/Anymal", position=[0.0, 0.0, 0.5])
    
    world.reset()
    
    # 로봇 조인트 제어 예시
    for i in range(1000):
        world.step(render=True)
        if world.is_playing():
            joint_positions = anymal.get_joint_positions()
            # 예시: 특정 조인트의 위치를 변경
            # joint_positions[0] = 0.5
            # anymal.set_joint_positions(joint_positions)
    
            # 또는 조인트 속도 제어
            # joint_velocities = anymal.get_joint_velocities()
            # joint_velocities[0] = 1.0
            # anymal.set_joint_velocities(joint_velocities)
    
    kit.close()
    
  2. ROS/ROS 2 연동: Isaac Sim은 ROS/ROS 2와 강력하게 연동됩니다. ROS/ROS 2 노드를 사용하여 로봇의 센서 데이터를 발행하고, 액추에이터 명령을 구독하여 로봇을 제어할 수 있습니다. 이는 실제 로봇 시스템과의 연동을 용이하게 합니다.

  3. 고수준 컨트롤러 개발: 보행 패턴 생성, 균형 유지, 장애물 회피 등 복잡한 4족보행을 위해서는 PID 제어, 모델 예측 제어(MPC) 또는 유한 상태 기계(FSM)와 같은 고수준 컨트롤러를 개발해야 합니다. 이러한 컨트롤러는 Python 스크립트 내에서 구현되거나 외부 라이브러리를 통해 통합될 수 있습니다.

이제 4족보행 로봇 시뮬레이션의 기본을 다루었습니다. 다음 단계에서는 강화학습 환경을 구축하고 로봇의 보행 패턴을 훈련하는 방법을 설명합니다.

4. 강화학습 환경 구축 및 훈련

Isaac Sim은 강화학습(Reinforcement Learning, RL)을 위한 강력한 시뮬레이션 환경을 제공하며, 특히 NVIDIA Isaac Lab은 로봇 학습을 위한 통합 프레임워크입니다. 4족보행 로봇의 보행 패턴을 강화학습으로 훈련하는 방법을 설명합니다.

4.1. Isaac Lab 소개 및 설치

Isaac Lab은 Isaac Sim을 기반으로 로봇 학습 워크플로우를 간소화하도록 설계된 오픈소스 프레임워크입니다. 강화학습 환경 설정, 에이전트 훈련, 결과 분석 등을 효율적으로 수행할 수 있도록 돕습니다.

  1. Isaac Lab 저장소 클론: Isaac Lab은 GitHub에서 소스 코드를 제공합니다. 다음 명령어를 사용하여 저장소를 클론합니다.
    git clone https://github.com/NVIDIA-Omniverse/IsaacLab.git
    cd IsaacLab
    
  2. Isaac Lab 환경 설정: Isaac Lab은 자체적인 설정 스크립트를 제공합니다. 일반적으로 setup.sh 스크립트를 실행하여 필요한 종속성을 설치하고 환경을 설정합니다.
    ./setup.sh
    
    • Docker 사용: Isaac Lab도 Docker 컨테이너 내에서 실행하는 것을 지원합니다. IsaacLab/docker 디렉토리에 있는 Dockerfile을 사용하여 컨테이너를 빌드하고 실행할 수 있습니다.

4.2. 강화학습 환경 정의

강화학습을 위해서는 환경(Environment), 상태(State), 행동(Action), 보상(Reward)을 정의해야 합니다. Isaac Lab은 이러한 요소를 쉽게 구성할 수 있는 API를 제공합니다.

  1. 환경 구성: Isaac Lab은 다양한 로봇 및 작업에 대한 예제 환경을 제공합니다. 4족보행 로봇의 경우, 이미 구현된 예제 환경(예: ANYmal, Unitree Go2)을 참고하거나 커스텀 환경을 생성할 수 있습니다.
    • 관찰 공간(Observation Space): 로봇의 관절 각도, 각속도, IMU 데이터(자세, 각속도), 발 접지 센서 정보 등이 포함될 수 있습니다.
    • 행동 공간(Action Space): 로봇의 각 관절에 대한 목표 위치, 토크 또는 속도 명령이 될 수 있습니다.
  2. 보상 함수 설계: 로봇이 원하는 보행 패턴을 학습하도록 유도하는 보상 함수를 설계하는 것이 중요합니다. 예를 들어:
    • 전진 보상: 로봇이 목표 방향으로 전진할 때 양의 보상
    • 자세 유지 보상: 로봇의 몸체가 안정적인 자세를 유지할 때 보상
    • 에너지 효율 보상: 적은 에너지로 움직일 때 보상 (음의 보상)
    • 충돌 페널티: 로봇이 환경과 충돌할 때 음의 보상

4.3. 강화학습 에이전트 훈련

Isaac Lab은 Stable Baselines3, Ray RLlib 등 다양한 강화학습 라이브러리와 연동됩니다. PPO(Proximal Policy Optimization)는 로봇 보행 학습에 널리 사용되는 알고리즘입니다.

  1. 훈련 스크립트 실행: Isaac Lab은 예제 훈련 스크립트를 제공합니다. 예를 들어, PPO 알고리즘을 사용하여 4족보행 로봇을 훈련하는 스크립트를 실행할 수 있습니다.
    # Isaac Lab 디렉토리 내에서
    python train.py --task quadruped_walk --algo ppo
    
    • --task: 훈련할 작업(환경)을 지정합니다. (예: quadruped_walk)
    • --algo: 사용할 강화학습 알고리즘을 지정합니다. (예: ppo, sac)
  2. 훈련 과정 모니터링: 훈련 중에는 TensorBoard와 같은 도구를 사용하여 보상 그래프, 에피소드 길이 등 훈련 진행 상황을 모니터링할 수 있습니다.
    tensorboard --logdir runs
    
  3. 하이퍼파라미터 튜닝: 강화학습의 성능은 하이퍼파라미터(학습률, 배치 크기, 할인율 등)에 크게 영향을 받습니다. 최적의 성능을 위해 하이퍼파라미터를 튜닝하는 과정이 필요할 수 있습니다.

4.4. 학습된 정책 배포 및 평가

훈련이 완료되면 학습된 정책(Policy)을 Isaac Sim 환경에 배포하여 로봇의 보행 패턴을 시뮬레이션하고 평가할 수 있습니다.

  1. 학습된 모델 로드: 훈련된 모델 파일(예: .zip 또는 .pt 파일)을 로드하여 시뮬레이션에 적용합니다.

  2. 시뮬레이션 실행: Isaac Sim에서 로봇을 로드하고 학습된 정책을 사용하여 제어합니다. 로봇이 다양한 지형에서 안정적으로 보행하는지, 장애물을 회피하는지 등을 평가합니다.

  3. Sim-to-Real Transfer: 시뮬레이션에서 학습된 정책을 실제 로봇에 적용하는 것을 Sim-to-Real Transfer라고 합니다. Isaac Sim과 Isaac Lab은 물리 기반 시뮬레이션을 통해 Sim-to-Real Gap을 줄이는 데 중점을 둡니다. 실제 로봇에 적용하기 전에 시뮬레이션 환경에서 충분히 검증하는 것이 중요합니다.

이제 Isaac Sim을 활용한 4족보행 시뮬레이션 및 강화학습의 전반적인 과정에 대한 설명이 완료되었습니다. 다음 단계에서는 이 모든 내용을 종합하여 가이드 문서를 작성합니다.

Tags:

Categories:

Updated: