
🔍Reference : https://qiita.com/ttanaka3/items/6ae5f8331d60b0454308
🔍Reference : https://tier4.github.io/AWSIM/GettingStarted/QuickStartDemo/
Requirements
Autoware Universe (awsim stable branch)
AWSIM V_1.1.0
ubuntu 22.04
ROS2 HUMBLE
AWSIM 1.1.0V
cuda 11.8
cudnn 8.x
tensor RT 8.6.1
🟢호스트환경
호스트 환경 (NVIDIA graphic driver , CUDA , CUDA TOOLKIT):
호스트의 그래픽 드라이버, 쿠다 버전은 본인 시스템에 맞는 최신버전을 설치하면 된다.
어차피 autoware와 awsim은 container환경에서 구동할것이다.
HOST-CONTAINER 간 그래픽 자원 연동을 해주는 NVIDIA TOOLKIT만 HOST의 Driver와 맞는 버전을 설치해주면된다!

cuda toolkit

(toolkit 설치는 관련 글 찾아보자. ACELAB NRD PMS 노션에도 올라와있다.)
🐋 컨테이너 환경(설치과정 설명)
1️⃣ 도커파일 빌드 및 컨테이너 이미지 생성
⚠️ Docker가 설치되어있지 않다면, Docker부터 설치하고 아래 과정 진행. 도커 설치 과정은 검색 바람
도커파일은 컨테이너에 필요한 의존성들을 미리 정의하여, 컨테이너 이미지 생성 과정(빌드)에서 한번에 같이 설치해준다.
아래의 도커파일은 22.04, ros2 humble, cuda 11.8, cudnn 8. 버전을 포함한 컨테이너 이미지를 만드는 도커파일이다.
tensorRT는 포함되지 않았다. 컨테이너 구동후 수동 설치할 예정이다.(해당 과정포스트에 포함되어있음)
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
# 비인터랙티브 설치 모드 설정
ENV DEBIAN_FRONTEND=noninteractive
# 필수 유틸리티 및 빌드 도구
RUN apt update && apt install -y \
lsb-release gnupg2 curl wget git vim sudo \
build-essential cmake unzip pkg-config \
libgl1-mesa-glx libglib2.0-0 locales \
&& rm -rf /var/lib/apt/lists/*
# 로케일 설정 (UTF-8)
RUN locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
# ROS 2 Humble 설치
RUN apt update && apt install -y \
software-properties-common && \
add-apt-repository universe && \
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | apt-key add - && \
echo "deb http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2.list && \
apt update && \
apt install -y ros-humble-desktop python3-colcon-common-extensions python3-rosdep python3-argcomplete && \
rosdep init && rosdep update
# ROS 2 환경 자동 로드
SHELL ["/bin/bash", "-c"]
RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
# Autoware/AWSIM 필수 의존성
RUN apt update && apt install -y \
python3-vcstool python3-pip libasio-dev \
libtinyxml2-dev libeigen3-dev \
&& pip3 install empy
# 일반 사용자 생성
RUN useradd -ms /bin/bash autoware && \
usermod -aG sudo autoware && \
echo 'autoware ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# 사용자 전환 및 환경 설정
USER autoware
WORKDIR /home/autoware
RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
docker build -t ros2-autoware:humble .
docker run -it --rm \
--gpus all \
--name autoware-container \
ros2-autoware:humble \
bash

2️⃣ 컨테이너 내부에 Tensor RT 8.6.1 설치
Autoware 내부에서 perception 관련 모듈에서 yolo등을 사용하는데, 이때 tensor 관련의존성이 필요하다. 현재 포스트에서 사용하는 autoware와 awsim 버전과 맞는 tensor RT 버전은 8.6.1이다.
tensorRT는 공식홈페이지에서 deb(원격저장소) , tar.gz(수동 인스톨) 이 있는데, deb설치시 최신버전이 계속 깔리게 되어, tar.gz 수동 설치방식으로 컨테이너에 설치한다.
https://developer.nvidia.com/tensorrt
TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz 파일 설치
(못찾겠으면 나중에 공유하겠음.)
(호스트에서 다운받아서 컨테이너 내부로 복사 명령어로 넘겨줄 수 있음. 반대도 되고)
아래는 컨테이너에서 해당 tar파일을 이용하여 설치하는 방법임.
# 설치 디렉토리 이동
cd /workspace
# 압축 해제
tar -xzf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
# 라이브러리 복사
cd TensorRT-8.6.1.6
cp -r lib/* /usr/lib/x86_64-linux-gnu/
#TensorRT 라이브러리 환경변수 설정
echo 'export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
🟢호스트-컨테이너간 파일 복사
#✅ 1. 로컬 → 컨테이너 복사
#docker cp <호스트_파일_또는_디렉토리_경로> <컨테이너_ID 또는 이름>:<컨테이너_내_경로>
docker cp ./TensorRT-8.6.1.6.tar.gz autoware_container:/workspace/
#✅ 2. 컨테이너 → 로컬 복사
#docker cp <컨테이너_ID 또는 이름>:<컨테이너_내_경로> <호스트_파일_또는_디렉토리_경로>
docker cp autoware_container:/workspace/TensorRT-8.6.1.6.tar.gz .
3️⃣ 컨테이너에 autoware(awsim-stable branch) 설치, 빌드
https://github.com/autowarefoundation/autoware/tree/awsim-stable
⚠️설치과정중
./setup-dev-env.sh universe --no-nvidia --no-cuda-drivers
이렇게 옵션을 추가로 넣어서
nvidia, cuda는 원격저장소에서 업데이트되는것을 막아야한다.
(우리는 이미 컨테이너 이미지와 수동설치로 특정버전들의 그래픽드라이버들을 다운받았다.)
$ git clone https://github.com/autowarefoundation/autoware.git
$ cd autoware
$ git checkout awsim-stable
$ ./setup-dev-env.sh universe --no-nvidia --no-cuda-drivers
$ mkdir src
$ vcs import src < autoware.repos
$ source /opt/ros/humble/setup.bash
$ rosdep update
$ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
$ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-w"
4️⃣ 컨테이너에 AWSIM V_1.1.0 설치

https://github.com/tier4/AWSIM/releases/download/v1.1.0/AWSIM_v1.1.0.zip
위 링크를 클릭하면 자동으로 awsim 1.1.0 버전 zip파일이 다운받아진다.
호스트에서 다운받고, 컨테이너로 복사해서 폴더를 넘겨주면된다.
cd <path_to_your_awsim_download_path>
unzip AWSIM_v1.1.0.zip
chmod +x <path to AWSIM folder>/AWSIM_demo.x86_64
./<path to AWSIM folder>/AWSIM_demo.x86_64 #(awsim 실행 명령어)
5️⃣ Cyclone DDS 설정
Autoware - AWSIM 간의 통신은 Cyclone DDS를 통해 정보를 주고 받는다.
컨테이너의 bashrc , profile 을 수정할거임.
🟢profile 내용추가(gedit ~/.profile)
export ROS_LOCALHOST_ONLY=1
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
🟢bashrc 내용추가 (gedit ~/.bashrc)
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
if [ ! -e /tmp/cycloneDDS_configured ]; then
sudo sysctl -w net.core.rmem_max=2147483647
sudo ip link set lo multicast on
touch /tmp/cycloneDDS_configured
fi
⚠️bash, profile 모두 수정후 source 해줘야한다.(관련 명령어는 검색 바람)
6️⃣ Awsim Lanenet map 다운로드
awsim 가상환경을 autoware lanenet map 으로 만들어둔 파일을 다운받아야한다.
호스트에서 다운받아서 컨테이너로 볼륨 마운트(도커 컨테이너 실행시 -v 옵션으로 볼륨마운트 가능) 해주면된다.
https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip
위 링크를 입력시 map을 다운받을수 있다. (awsim 켜자마자 나오는 디폴트 맵이 nisishinjuku map이다.)
⚠️호스트에 다운받아서 압축풀고, 압축 푼 폴더를 컨테이너와 볼륨 마운트 해주자. (컨테이너에서 호스트 파일을 참조하도록 하는게 볼륨 마운트)
7️⃣ awsim , autoware 실행


아래 명령어에서 경로들은 본인의 컨테이너 내부 디렉토리 구조에 맞게 수정하면 된다.
tmux나 terminator등 터미널 스플릿 프로그램 이용해서, 여러 명령어를 쉽게 실행 할 수 있다.
bash setup 먼저 무조건 해주자
source /opt/ros/humble/setup.bash
source ~/autoware/install/setup.bash
#awsim 실행
./<path to AWSIM folder>/AWSIM_demo.x86_64
#autoware 실행
ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit map_path:=/home/autoware/autoware_map/nishishinjuku_autoware_map

8️⃣ 기타
-도커 이미지 커밋
정상적으로 실행이 된다면, 이미지를 커밋하여 현재 상태를 저장해두자.
진행과정중에도 중간중간 커밋을 해둬야, 다음단계에서 꼬이더라도 쉽게 롤백이 된다.
커밋 관련 명령어는 gpt한테 물어보자
-도커 컨테이너 실행
GUI, Host-Container간 그래픽 호환, 통신등을 명시한 명령어임.
다른 조건들은 그대로 두되, 컨테이너 이름, 볼륨 마운트는 개인에 맞게 수정하여 아래 명령어를 사용하면됨.
sudo docker run -it --rm \
--gpus all \
--runtime=nvidia \
--net=host \
--privileged \
--env="DISPLAY=$DISPLAY" \
-e ROS_DOMAIN_ID=30 \
-e QT_X11_NO_MITSHM=1 \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-v /home/lee/autoware_map:/home/autoware/autoware_map \
--device=/dev/dri \
--name acelab_autoware_test \
autoware_awsim:perfect
-도커 이미지 확인
docker images
-현재 실행중인 컨테이너 정보 확인
docker ps
-tmux 명령어

---아래 내용부터는 본 포스트와 관련없음.---
-autoware main branch running code
$ sudo docker run -it --rm --gpus all
--runtime=nvidia --net=host --privileged --env="DISPLAY=$DISPLAY"
-e ROS_DOMAIN_ID=30 -e QT_X11_NO_MITSHM=1 -e NVIDIA_DRIVER_CAPABILITIES=all
-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR
-v /tmp/.X11-unix:/tmp/.X11-unix:rw
-v /mnt/data/autoware:/workspace --device=/dev/dri --name acelab_autoware_test
ghcr.io/autowarefoundation/autoware:universe-devel-cuda
ros2 launch autoware_launch planning_simulator.launch.xml map_path:=autoware_map/sample-map-planning
vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
AWSIM이 docker container안에서 화면이 열리나요?
도커 컨테이너 안에서 AWSIM 실행시 Segmentation fault (core dumped) 뜨면서 안열리는데
어떻게 해결하신지 궁금합니다!