[Carla,Autoware] CARLA + Autoware Integration Guide for Autonomous Driving Simulation

DDOKKON·2025년 7월 14일
0
post-thumbnail

0️⃣ 개발환경 및 레퍼런스

  • Ubuntu 22.04
  • ROS2 Humble
  • Carla 0.9.15 (Docker install)
  • Autoware humble-2024.01-cuda-amd64 (Docker image for execution environment)
  • Autoware (release 2024.01)
  • Carla - Autoware bridge (TUMFTM)

REF :
https://github.com/TUMFTM/Carla-Autoware-Bridge?tab=readme-ov-file [Carla - Autoware bridge]

https://www.youtube.com/watch?v=OmnMnvz949Y [Carla -Autoware bridge, install guide video]

https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/ [Autoware install guide]

💡아래의 설치 과정 코드에서, user name이나 디렉토리 구조는 사람마다 다를 수 있음. 확인하고 사용바람






1️⃣ Autoware Docker image setup

Autoware가 필요한 의존성들을 담고있는 도커 컨테이너 이미지 다운로드.

docker pull ghcr.io/autowarefoundation/autoware:humble-2024.01-cuda-amd64

⚠️ 다운로드에 상당한 시간이 소요됨 (12시간 정도)






2️⃣ Autoware source install on Host (not container)

autoware (release 2024.01) 을 호스트에 설치하고, 1번에서 다운받은 도커 컨테이너 환경에 마운트하여 빌드 및 실행을 할것임.

#호스트에서 명령 입력
cd ~

mkdir carla_aw_bridge_video

cd carla_aw_bridge_video

git clone https://github.com/autowarefoundation/autoware.git

cd autoware

git checkout 2024.01





3️⃣ Autoware source Build & Carla-Autoware sensor kit install on Docker container

호스트에 다운받은 Autoware를 도커 컨테이너에 마운트하고, 컨테이너 위에서 빌드 해줄것이다.

⚠️ 1에서 다운받은 컨테이너 내부에서 빌드해야한다. 컨테이너 내부에 의존성들이 전부 설치되어있다.

#컨테이너 실행, 호스트에 설치된 Autoware 폴더 컨테이너에 마운트
#컨테이너 실행 안되고 다시 다운받는 경우 아래의 🛠️ 참조
sudo docker run -it --rm \
  --gpus all \
  --net=host \
  --privileged \
  -e DISPLAY=$DISPLAY \
  -e ROS_DOMAIN_ID=30 \
  -e QT_X11_NO_MITSHM=1 \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -v /home/ddokkon/carla_aw_bridge_video:/mnt/carla_aw_bridge_video \
  --device=/dev/dri \
  ghcr.io/autowarefoundation/autoware:humble-2024.01-cuda-amd64
#Autoware source file download
cd /mnt/carla_aw_bridge_video/autoware
mkdir src
vcs import src < autoware.repos
#Carla-Autoware Sensor kit (t2) install
cd src
git clone https://github.com/TUMFTM/Carla_t2.git
#build
cd ..
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

🛠️ 만약 Autoware 컨테이너 이미지를 다 다운 받았고, docker images 결과에도 autoware:humble-2024.01-cuda-amd64 이미지가 잘뜨지만, 컨테이너 실행시 이미지를 찾지 못하여 다시 다운로드 하려고 할 경우, 아래의 명령어 실행후 다시 컨테이너 실행

save <autoware 이미지 ID> | sudo docker load





4️⃣ Carla_autoware_bridge install on Host (not container) & Carla_Autoware_bridge docker image build

호스트에 Carla_Autoware_bridge를 설치하고, Carla_Autoware_Bridge를 위한 docker image를 직접 build하여 사용할것이다.
(즉 실제 bridge는 도커 컨테이너 위에서 실행된다.)

#Carla_Autoware_Bridge install & docker image build
#호스트에서 명령 입력
cd ~/carla_aw_bridge_video
git clone https://github.com/TUMFTM/Carla-Autoware-Bridge.git
cd Carla-Autoware-Bridge
./docker/build_docker.sh






5️⃣ Carla 0.9.15 image pull

Carla 0.9.15 docker image를 설치할것이다.
해당 이미지 내부에는 Carla가 이미 설치되어있다.

#호스트에서 명령 입력
docker pull carlasim/carla:0.9.15






6️⃣ Modify Autoware launch file

  • Carla_Autoware_Bridge (TUMFTM) 를 이용하여 Carla, Autoware를 연동하기위해선, Autoware 런치파일 수정이 필요하다.
  • 아래의 이미지는 수정이 완료된 코드이다.
  • 수정한 부분을 강조하였다.
  • Autoware.launch.xml



  • tier4_localization_component.launch.xml






7️⃣ Autoware Rebuild (because of launch modification)

Autoware launch 파일을 수정했기때문에, autoware 를 재빌드 해줘야한다.
⚠️ 1에서 다운받은 컨테이너 내부에서 빌드해야한다. 컨테이너 내부에 의존성들이 전부 설치되어있다.

#컨테이너 진입후 빌드
cd /mnt/carla_aw_bridge_video/autoware
colcon build --packages-select autoware_launch






8️⃣ Carla lanelet, pcd Download (Autoware vector map for carla)

Autoware에서 Carla world의 맵 정보를 담고있는 .pcd, .osm파일을 다운받아주자.

https://syncandshare.lrz.de/getlink/fiBgYSNkmsmRB28meoX3gZ/ [Carla Autoware vector map download (.osm + .pcd)]

  • 저장 위치는 Autoware가 설치된 폴더에 두면 된다.
    (컨테이너에 마운트한 호스트 폴더 내부)






9️⃣ Carla 실행

#rpc port 를 1403으로 열어서 실행함.
sudo docker run -it --rm   --gpus all   --net=host   --privileged   -e DISPLAY=$DISPLAY   -e ROS_DOMAIN_ID=30   -e QT_X11_NO_MITSHM=1   -e NVIDIA_DRIVER_CAPABILITIES=all   -v /tmp/.X11-unix:/tmp/.X11-unix:rw   --device=/dev/dri   carlasim/carla:0.9.15   bash -c "./CarlaUE4.sh -carla-rpc-port=1403"







🔟 Carla_Autoware Bridge 실행

#컨테이너랑 브릿지 동시 실행하는 명령어
sudo docker run -it --rm   --gpus all   --net=host   --privileged   -e DISPLAY=$DISPLAY   -e ROS_DOMAIN_ID=30   -e QT_X11_NO_MITSHM=1   -e NVIDIA_DRIVER_CAPABILITIES=all   -v /tmp/.X11-unix:/tmp/.X11-unix:rw   -v /home/ddokkon/carla_aw_bridge_video:/mnt/carla_aw_bridge_video   --device=/dev/dri   tumgeka/carla-autoware-bridge:latest   ros2 launch carla_autoware_bridge carla_aw_bridge.launch.py port:=1403 town:=Town10HD

브릿지 실행 결과가 아래와 같으면 성공이다







🔟1️⃣ Autoware 실행

  • ⚠️map_path(Carla .pcd .osm 파일이 있는 폴더) 디렉토리를 지정할때, 컨테이너 실행시 마운트한 경로로 해줘야한다!
  • 이 경우에는 컨테이너 실행시, 호스트 디렉토리를 컨테이너 내부에서 /mnt/carla_aw_bridge_video 로 접근하도록 했기에, map_path를 아래와 같이 지정했다.
#autoware 컨테이너 내부에서 실행
cd /mnt/carla_aw_bridge_video/autoware/install
source setup.bash

ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=carla_t2_vehicle sensor_model:=carla_t2_sensor_kit map_path:=/mnt/carla_aw_bridge_video/Town10

🟢 2d Goal pose를 통해 목적지를 지정해주고 나서, 2분정도 대기 (프로그램이 워낙 무거워서 오래걸림) 하면 좌측에 operation mode 의 auto가 활성화 됨. 그거 누르면 차가 이동함





🔟2️⃣ Traffic 생성

  • Carla는 자율주행하는 액터들을 소환하여, Traffic을 만들어 줄 수 있다.
#Carla-Autoware-Bridge 컨테이너 내부에서 명령 입력
cd src/carla_autoware_bridge/utils
python3 generate_traffic.py -p 1403

추가 명령어

#Carla Non gui (Headless) 모드로 실행
sudo docker run -it --rm \
  --gpus all \
  --net=host \
  --privileged \
  -e ROS_DOMAIN_ID=30 \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  --device=/dev/dri \
  carlasim/carla:0.9.15 \
  bash -c "./CarlaUE4.sh -carla-rpc-port=1403 -RenderOffScreen -nosound"
#2d pose estimate by topic
ros2 topic pub /initialpose geometry_msgs/msg/PoseWithCovarianceStamped "{
  header: {
    frame_id: 'map'
  },
  pose: {
    pose: {
      position: {
        x: -33.086097717285156,
        y: 28.541202545166016,
        z: 0.0
      },
      orientation: {
        x: 0.0,
        y: 0.0,
        z: 0.7071067811865475,
        w: 0.7071067811865476
      }
    },
    covariance: [
      0.25, 0.0, 0.0, 0.0, 0.0, 0.0,
      0.0, 0.25, 0.0, 0.0, 0.0, 0.0,
      0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
      0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
      0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
      0.0, 0.0, 0.0, 0.0, 0.0, 0.06853891909122467
    ]
  }
}"


#2d goal pose by topic
ros2 topic pub /planning/mission_planning/goal geometry_msgs/msg/PoseStamped "{
  header: {
    frame_id: 'map'
  },
  pose: {
    position: {
      x: -33.186100006103516,
      y: 36.441200256347656,
      z: 0.0
    },
    orientation: {
      x: 0.0,
      y: 0.0,
      z: 0.6794495526707728,
      w: 0.7337222263060366
    }
  }
}"


#operation mode set auto
ros2 service call /system/operation_mode/change_operation_mode tier4_system_msgs/srv/ChangeOperationMode "{mode: 2}"
profile
School of Electronic Engineering. KNU

0개의 댓글