[IsaacLab] 01. 환경 설정

IsaacLab
Docker
Setting
RL
WebRTC
Docker를 활용한 IsaacLab 환경 설정
Author

Jinwon Kim

Published

April 19, 2025

Main image

이 문서에서는 Docker를 활용하여 IsaacLab 환경을 설정하고, WebRTC를 통해 같은 네트워크 내에서 시각화하는 방법을 설명합니다.

사전 준비사항

IsaacLab 설치 방법

IsaacLab 설치는 Docker를 통해 세 가지 방법으로 가능합니다:

  1. IsaacSim Docker에서 직접 설치
  2. IsaacLab의 Docker-compose 파일 활용 (추천)
  3. 사전 빌드된 IsaacLab Docker 이미지 활용

각 방법을 자세히 설명하겠습니다.

1. IsaacSim Docker에서 직접 설치

  1. Isaac-sim 컨테이너 생성

    메모리 누수 문제를 방지하기 위해 메모리와 CPU를 제한합니다. 컴퓨터 사양에 맞게 조절하세요.

    docker run --name isaac-sim-4.5.0 --entrypoint bash -it --runtime=nvidia --gpus all \
        --memory=20g --cpus=12 \
        -e "ACCEPT_EULA=Y" --network=host --ipc=host --pid=host --privileged -e DISPLAY=$DISPLAY  \
        -e "PRIVACY_CONSENT=Y" \
        -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
        -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
        -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
        -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \
        -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \
        -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
        -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
        -v ~/docker/isaac-sim/documents:/root/Documents:rw \
        nvcr.io/nvidia/isaac-sim:4.5.0
  2. 컨테이너 내부에서 IsaacSim 실행

    아래 환경변수 설정하면 알아서 webrtc 모드로 사용하게 만들어줍니다. export LIVESTREAM=2

    ./runheadless.sh -v
  3. ROS 2 활용

    docker cotainer에서 ros2를 또 설치하는 것은 꽤나 귀찮은 일입니다. 이 때문에 isaac에서 기본적으로 지원해주는 ROS 2 라이브러리를 사용하고자 합니다. 이를 위해서는 아래의 환경변수를 추가해줘야합니다.

    export ISAACSIM_PATH=/isaac-sim
    
    export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
    
    # Can only be set once per terminal.
    # Setting this command multiple times will append the internal library path again potentially leading to conflicts
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ISAACSIM_PATH/exts/isaacsim.ros2.bridge/humble/lib
  4. IsaacLab 설치

    export ISAACSIM_PYTHON_EXE="${ISAACSIM_PATH}/python.sh"
    cd /
    apt-get update && apt-get install git cmake build-essential
    git clone https://github.com/isaac-sim/IsaacLab.git -b v2.0.2
    cd IsaacLab
    ln -s ${ISAACSIM_PATH} _isaac_sim
    /IsaacLab/_isaac_sim/kit/python/bin/python3 -m pip install --upgrade pip
    ./isaaclab.sh --install
  5. 요약

    • 위 과정을 자동화한 스크립트를 setup.bash로 저장하여 실행할 수 있습니다.

      #!/bin/bash
      BASHRC="/root/.bashrc"
      echo 'export RMW_IMPLEMENTATION=rmw_fastrtps_cpp' >> $BASHRC
      echo 'export ROS_DOMAIN_ID=26' >> $BASHRC
      echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ISAACSIM_PATH/exts/isaacsim.ros2.bridge/humble/lib' >> $BASHRC
      echo 'export ISAACSIM_PYTHON_EXE="${ISAACSIM_PATH}/python.sh"' >> $BASHRC
      echo 'export LIVESTREAM=2' >> $BASHRC
      source $BASHRC
      apt-get update && apt-get install -y git cmake build-essential
      git clone https://github.com/isaac-sim/IsaacLab.git -b v2.0.2
      cd /IsaacLab && ln -s ${ISAACSIM_PATH} _isaac_sim
      ${ISAACSIM_PATH}/kit/python/bin/python3 -m pip install --upgrade pip
      cd /IsaacLab && ./isaaclab.sh --install

2. IsaacLab의 Docker-compose 파일 활용

  1. IsaacLab repo 설치 (version 2.0.2 사용)

    git clone <https://github.com/isaac-sim/IsaacLab.git> -b v2.0.2
  2. WebRTC 환경변수 설정

    docker/.env.base에 IP와 livestream 설정을 추가합니다.

    # webrtc streaming variable
    LIVESTREAM=2
    
    # public ip address
    PUBLIC_IP=${송출하고 싶은 IP 주소}

    원리 설명…

    아래 코드를 보면, 초기에 환경변수를 가져오고, 이를 LIVESTREAM=2일 때 활용해서, 송출을 시작한다.

    코드 참조 링크 1

    코드 참조 링크 2

    참고: 포트는 아래와 같이 사용한다. 즉 아래의 포트를 열어놔야 외부에서 접근이 가능하다.

    The following ports need to be opened: TCP/UDP 47995:48012, TCP/UDP 49000:49007, and TCP 49100.

  3. 자원관리를 위한 설정

    자원관리를 위하여, 아래의 코드를 docker/docker-compose.yaml 에 추가해준다.

    services:
      isaac-lab-base:    
        ...
    
        mem_limit: 20g
        cpus: 12
    
        ...
    
     # This service adds a ROS2 Humble
      # installation on top of the base image
      isaac-lab-ros2:
       ...
    
        mem_limit: 20g
        cpus: 12
    
        ...

    도커 빌드 방법

    ./docker/container.py start

3. 사전 빌드된 IsaacLab Docker 이미지 활용

사전 빌드된 컨테이너를 사용하여 로컬 빌드 없이 NGC에서 직접 가져올 수 있습니다. 이 컨테이너는 헤드리스 실행 전용입니다.

  • docker pull 명령어

    docker pull nvcr.io/nvidia/isaac-lab:2.0.2
  • docker container 실행 방법

    docker run --name isaac-lab --entrypoint bash -it --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \
    -e "PRIVACY_CONSENT=Y" \
    -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
    -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
    -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
    -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \
    -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \
    -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
    -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
    -v ~/docker/isaac-sim/documents:/root/Documents:rw \
    nvcr.io/nvidia/isaac-lab:2.0.2

IsaacSim WebRTC을 활용한 Visualization

위 3가지 방법을 통하여 설치한 컨테이너에서 서버를 실행하게 되면, client에서는 이에 붙어 interaction을 수행할 수 있습니다.

  1. host에서 webrtc client를 실행합니다.WebRTC Client Image ​ host에서 webrtc client를 실행합니다. 서버에서 실행한 IP로 변경 후 연결 버튼을 누릅니다. 서버와 클라이언트가 같은 곳에서 실행 중이라면 localhost인 127.0.0.1을 사용합니다.

  2. 실행 화면image-20250419161441255 ​ 위와 같이 client가 서버에 붙는 것을 확인할 수 있습니다. 이 때, server에서는 main: thread_init: already added for thread라는 warning이 뜨게 됩니다.

버그: 현재 외부 인터넷을 통해서는 webrtc로 접속을 못하는 문제가 있음. 향후 버전에서 수정될 예정이라고 함.

Bug report image

Reference