[Carla,Autoware,Zenoh] CARLA + Autoware Integration Guide for Multi Client Simulation using Zenoh

DDOKKON·2025년 8월 25일
0
post-thumbnail

REF

https://autoware-carla-launch.readthedocs.io/en/latest/build.html
https://github.com/woojeong-J/autoware_carla_launch
https://autoware-carla-launch.readthedocs.io/en/latest/scenarios/multiple_autowares.html
https://autoware-carla-launch.readthedocs.io/en/latest/faq.html


0️⃣Prerequisites

https://autoware-carla-launch.readthedocs.io/en/latest/prerequisites.html

ubuntu 22.04
Carla 0.9.14 (Docker or source build)
rocker 및 docker, Cuda container toolkit 등.

  • rocker 설치
    (도커는 이미 설치되어있다고 가정.)
sudo apt install python3-rocker
  • Carla 0.9.14 docker 설치

https://carla.readthedocs.io/en/latest/build_docker/

docker pull carlasim/carla:0.9.14

1️⃣ Autoware, Zenoh 가 포함된 깃허브 클론

https://github.com/woojeong-J/autoware_carla_launch

cd ~
mkdir Zenoh
cd Zenoh
git clone https://github.com/woojeong-J/autoware_carla_launch.git

2️⃣ Build the container for Carla bridge

https://autoware-carla-launch.readthedocs.io/en/latest/build.html

  • Enter into docker
cd ~/Zenoh
sudo ./container/run-bridge-docker.sh #안되면 sudo 빼보기
  • Build Zenoh+Autoware
cd ~/autoware_carla_launch
source env.sh
# Note it will take some time first time initialize models used in Autoware
make prepare_bridge
make build_bridge

3️⃣Build the container for Zenoh+Autoware

https://autoware-carla-launch.readthedocs.io/en/latest/build.html

  • Enter into docker
cd ~/Zenoh
./container/run-autoware-docker.sh
  • Build Zenoh+Autoware
cd ~/autoware_carla_launch
source env.sh
# Note it will take some time first time initialize models used in Autoware
make prepare_autoware
make build_autoware

💡 Autoware 소스빌드나 빌드 clean 방법은 ref참고


4️⃣Run Carla with multiple Autowares

  • Carla 0.9.14 실행
#Carla Non gui (Headless) 모드로 실행
sudo docker run -it --rm \
  --gpus all \
  --net=host \
  --privileged \
  -e ROS_DOMAIN_ID=0 \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  --device=/dev/dri \
  carlasim/carla:0.9.14 \
  bash -c "./CarlaUE4.sh -quality-level=Epic -world-port=2000 -RenderOffScreen -prefernvidia"
  • Run zenoh_carla_bridge and Python Agent (In Carla bridge container)
cd ~/Zenoh
# Go inside "Carla bridge container"
sudo ./container/run-bridge-docker.sh #안되면 sudo 빼보기
# Run zenoh_carla_bridge and Python Agent
cd ~/autoware_carla_launch
source env.sh
./script/bridge_ros2dds/run-bridge-two-vehicles.sh
  • Run zenoh-bridge-ros2dds and Autoware for 1st vehicle (In Autoware container)
    (1번 차량 소환 V1)
cd ~/Zenoh
# Go inside "Autoware container"
sudo ./container/run-autoware-docker.sh #안되면 sudo 빼보기
# Run zenoh-bridge-ros2dds and Autoware
cd ~/autoware_carla_launch
source env.sh
./script/autoware_ros2dds/run-autoware.sh v1

# Optional: If you want to assign Carla IP and FMS IP
./script/autoware_ros2dds/run-autoware.sh v1 127.0.0.1:7447 127.0.0.1:7887
  • Run zenoh-bridge-ros2dds and Autoware for 2nd vehicle (In Autoware container)
    (2번 차량 소환 V2)
cd ~/Zenoh
# Go inside "Autoware container"
sudo ./container/run-autoware-docker.sh
# Run zenoh-bridge-ros2dds and Autoware
cd ~/autoware_carla_launch
source env.sh
./script/autoware_ros2dds/run-autoware.sh v2

# Optional: If you want to assign Carla IP and FMS IP
./script/autoware_ros2dds/run-autoware.sh v2 127.0.0.1:7447 127.0.0.1:7887


5️⃣ 토픽 확인 및 각 개별 차량 제어.

  1. 각 차량 (V1, V2)는 각자의 Autoware 컨테이너에서 명령을 내리면 해당 차량이 움직이게 된다.
  2. 각 차량의 Autoware 컨테이너에 접속하여 이동명령 토픽을 발행하면 각 차량이 독립적으로 제어가 된다.
  3. 차량 소환시 (Autoware 컨테이너 실행시, 이 글에서 4번 과정) Tmux를 이용하면 편리하다.

6️⃣ 맵 변경

맵을 변경하기 위해선, 해당맵의 PCD파일과 OSM(vector map builder lanelet) 이 필요하다.
Carla의 기본맵 이외의 커스텀 맵을 이용하는 방식은 본 포스팅에서 소개하지 않는다.

https://github.com/evshary/autoware_carla_launch/blob/humble/carla_map/README.md
https://velog.io/@pddj21/CarlaAutoware-PCD-Map-Generation-in-Carla-Using-ROS-Bag-and-TF-Transformations-without-slam

  • PCD파일 및 OSM파일 추가

TownXX 폴더 내부에 lanelet2_map.osm, pointcloud_map.pcd 파일을 넣어준다
(본 필자는 주차장 환경이 필요했고, Town05 내부의 주차장을 이용하였다. PCD는 커스텀 PCD를 사용하였다. 커스텀 PCD를 생성하는 방법은 위의 벨로그 링크를 참고하자.)

cd ~/Zenoh/autoware_carla_launch/carla_map
mkdir <TownXX>

  • env.sh 파일 수정

env.sh 내부에 CARLA_MAP_NAME 파라미터를 본인이 변경을 희망하는 Carla의 기본맵으로 수정해주자.
⚠️env.sh파일 수정 이후 반드시 각 터미널에서 다시 Source해줘야한다!


7️⃣ 차량 초기 소환 위치 수정

해당 파이프라인은 initialpose를 통해 차량을 강제 이동 시킬수 없기에, 내 pcd안에 차량이 위치하도록 차량 초기 소환 위치를 수정할 수 있다.
⚠️ 아래의 sh파일의 좌표는, Carla상의 좌표계이다. 즉, Autoware기준 좌표계에서 y축을 반전시켜야한다.
⚠️ Autoware상에서 명령을 내릴때는, 그냥 Autoware상의 좌표계를 사용하여 토픽을 보내면된다.
⚠️ --position 다음에 ="" 해서 따옴표 안에 좌표를 넣어줘야 숫자로서 잘 인식된다.

cd ~/Zenoh/script/bridge_ros2dds
gedit run-bridge-two-vehicles.sh #(혹은 1개의 차량만 생성하는 경우에는 run-bridge.sh 수정)


8️⃣ 차량 초기 소환 위치 수정 - 원하는 위치의 Carla상의 좌표를 알아내는 방법.

Ref : https://velog.io/@pddj21/CarlaAutoware-PCD-Map-Generation-in-Carla-Using-ROS-Bag-and-TF-Transformations-without-slam

  1. 해당 포스팅을 참고하여 Carla-ros-bridge를 실행하여, 원하는 위치로 차량을 이동한다.
  2. Location 값을 읽어서, y값에만 -를 붙여준다.
    아래 사진의 경우, Autoware상의 좌표는 (18.9 27.7) , Carla 상의 좌표는 (18.9 -27.7)
  3. 좌표의 순서는 (x,y,z,roll,pitch,yaw) .... 내 생각에는 x,y,z,roll,yaw,pitch 인듯
  1. 아니면 그냥 Carla의 Python API를 이용해서 소환된 액터 좌표정보 가져와도 된다.


기타 명령어

#호스트에 소스빌드한 Carla 실행 명령어. 헤드리스
./CarlaUE4.sh -quality-level=Epic -world-port=2000 -RenderOffScreen -prefernvidia

#호스트에 소스빌드한 Carla 실행 명령어.
./CarlaUE4.sh -quality-level=Epic -world-port=2000 -prefernvidia
profile
School of Electronic Engineering. KNU

0개의 댓글