IsaacSim 5.0이 릴리즈 되었습니다. https://github.com/isaac-sim/IsaacSim 아직 Preview Release 버전이긴 하지만, Ubuntu 24.04에서 실행이 된다는 점과 무엇보다도 ROS2 Jazzy 버전을 지원한다는게 저에겐 가장 큰 업데이트입니다.
기존 전체 릴리즈된 압축 파일을 받아서 실행하는 방법에서, github에서 소스를 받아 직접 빌드해야 하는 방법으로 설치 과정이 변경되었습니다. 오픈소스 버전으로 사용자가 소스를 변경할 수 있도록 되어 있고, 차후 생태계를 구축해서 다양한 방법으로 활용이 가능할 듯 합니다.
아직까진 공식 문서는 없지만, 설치 과정 중 CUDA 버전과 GCC 버전간의 호환성으로 인해 빌드가 되지 않는 현상이 발생합니다. 아래와 같은 에러 문구들이 쭈욱 나옵니다.
/usr/include/stdlib.h(141): error: identifier "_Float32" is undefined
해결방법은 GCC 버전을 낮추면 됩니다. 현재 GCC 13.x 버전이 NVCC와 호환이 되지 않아 발생하는 문제로, Ubuntu 24.04에서는 GCC 13.3.0이 Default로 설치됩니다. NVCC와 호환되는 GCC 버전을 설치해야 합니다. 이를 GCC 12.3.0 버전으로 변경합니다. Github의 이슈에서 논의된 대로, GCC 11 버전이 가장 호환성이 좋은것으로 논의되고 있습니다.
초기 버전은 다음과 같습니다.
$ gcc --version
gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
GCC-11 버전을 설치합니다.
$ sudo apt install gcc-11 g++-11
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 30
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 30
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 30
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 30
$ sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
$ sudo update-alternatives --set cc /usr/bin/gcc
$ sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
$ sudo update-alternatives --set c++ /usr/bin/g++
위와 같이 설치가 완료된 다음, 기본 버전을 GCC 11으로 설정합니다.
$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-12 30 auto mode
* 1 /usr/bin/gcc-12 30 manual mode
2 /usr/bin/gcc-13 30 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
$ sudo update-alternatives --config g++
There are 2 choices for the alternative g++ (providing /usr/bin/g++).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/g++-12 30 auto mode
* 1 /usr/bin/g++-12 30 manual mode
2 /usr/bin/g++-13 30 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
이제 터미널에서 gcc 버전을 확인해봅니다.
$ gcc --version
Using built-in specs.
COLLECT_GCC=gcc-11
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-9ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-ZcnBzW/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-ZcnBzW/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-9ubuntu1)
이제 isaacsim을 git repository에서 clone 하고 빌드를 진행합니다.
위와 같이 영구적으로 버전을 바꾸는 것보다는, 빌드할때만 임시로 버전을 전환하는것을 추천하고 있습니다.
$ export NVCC_PREPEND_FLAGS="-ccbin $(which gcc-11)"; export CC=gcc-11; export CXX=g++-11
$ ./build.sh -x
빌드가 정상적으로 완료되는 것을 확인할 수 있습니다.
...
IsaacRobotAPI, IsaacLinkAPI, IsaacReferencePointAPI, IsaacJointAPI, IsaacSurfaceGripper, IsaacAttachmentPointAPI
Loading Templates from /home/byeongkyu/.cache/packman/chk/usd.py311.manylinux_2_35_x86_64.stock.release/0.24.05.kit.6-gl.14415+d9efdd65/lib/usd/usd/resources/codegenTemplates
unchanged /home/byeongkyu/isaacsim/source/extensions/isaacsim.robot.schema/robot_schema/plugInfo.json
Generating Schematics:
wrote /home/byeongkyu/isaacsim/source/extensions/isaacsim.robot.schema/robot_schema/generatedSchema.usda
BUILD (RELEASE) SUCCEEDED (Took 216.14 seconds)
끝.!!