[IsaacLab] 01. 환경 설정
이 문서에서는 Docker를 활용하여 IsaacLab 환경을 설정하고, WebRTC를 통해 같은 네트워크 내에서 시각화하는 방법을 설명합니다.
사전 준비사항
- Docker 및 NVIDIA Container Toolkit 설치
- IsaacSim WebRTC 설치
IsaacLab 설치 방법
IsaacLab 설치는 Docker를 통해 세 가지 방법으로 가능합니다:
각 방법을 자세히 설명하겠습니다.
1. IsaacSim Docker에서 직접 설치
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
컨테이너 내부에서 IsaacSim 실행
아래 환경변수 설정하면 알아서 webrtc 모드로 사용하게 만들어줍니다. export LIVESTREAM=2
./runheadless.sh -v
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
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
요약
위 과정을 자동화한 스크립트를
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 파일 활용
IsaacLab repo 설치 (version 2.0.2 사용)
git clone <https://github.com/isaac-sim/IsaacLab.git> -b v2.0.2
WebRTC 환경변수 설정
docker/.env.base
에 IP와 livestream 설정을 추가합니다.# webrtc streaming variable LIVESTREAM=2 # public ip address PUBLIC_IP=${송출하고 싶은 IP 주소}
원리 설명…
아래 코드를 보면, 초기에 환경변수를 가져오고, 이를
LIVESTREAM=2
일 때 활용해서, 송출을 시작한다.참고: 포트는 아래와 같이 사용한다. 즉 아래의 포트를 열어놔야 외부에서 접근이 가능하다.
The following ports need to be opened:
TCP/UDP 47995:48012
,TCP/UDP 49000:49007
, andTCP 49100
.자원관리를 위한 설정
자원관리를 위하여, 아래의 코드를
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 \ "PRIVACY_CONSENT=Y" \ -e \ -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을 수행할 수 있습니다.
host에서 webrtc client를 실행합니다.
host에서 webrtc client를 실행합니다. 서버에서 실행한 IP로 변경 후 연결 버튼을 누릅니다. 서버와 클라이언트가 같은 곳에서 실행 중이라면 localhost인 127.0.0.1을 사용합니다.
실행 화면
위와 같이 client가 서버에 붙는 것을 확인할 수 있습니다. 이 때, server에서는
main: thread_init: already added for thread
라는 warning이 뜨게 됩니다.
버그: 현재 외부 인터넷을 통해서는 webrtc로 접속을 못하는 문제가 있음. 향후 버전에서 수정될 예정이라고 함.