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 등.
sudo apt install python3-rocker
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
cd ~/Zenoh
sudo ./container/run-bridge-docker.sh #안되면 sudo 빼보기
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
cd ~/Zenoh
./container/run-autoware-docker.sh
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 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"
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
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
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️⃣ 토픽 확인 및 각 개별 차량 제어.
- 각 차량 (V1, V2)는 각자의 Autoware 컨테이너에서 명령을 내리면 해당 차량이 움직이게 된다.
- 각 차량의 Autoware 컨테이너에 접속하여 이동명령 토픽을 발행하면 각 차량이 독립적으로 제어가 된다.
- 차량 소환시 (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
TownXX 폴더 내부에 lanelet2_map.osm, pointcloud_map.pcd 파일을 넣어준다
(본 필자는 주차장 환경이 필요했고, Town05 내부의 주차장을 이용하였다. PCD는 커스텀 PCD를 사용하였다. 커스텀 PCD를 생성하는 방법은 위의 벨로그 링크를 참고하자.)
cd ~/Zenoh/autoware_carla_launch/carla_map
mkdir <TownXX>
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상의 좌표를 알아내는 방법.
- 해당 포스팅을 참고하여 Carla-ros-bridge를 실행하여, 원하는 위치로 차량을 이동한다.
- Location 값을 읽어서, y값에만 -를 붙여준다.
아래 사진의 경우, Autoware상의 좌표는 (18.9 27.7) , Carla 상의 좌표는 (18.9 -27.7)- 좌표의 순서는 (x,y,z,roll,pitch,yaw) .... 내 생각에는 x,y,z,roll,yaw,pitch 인듯
- 아니면 그냥 Carla의 Python API를 이용해서 소환된 액터 좌표정보 가져와도 된다.
기타 명령어
#호스트에 소스빌드한 Carla 실행 명령어. 헤드리스
./CarlaUE4.sh -quality-level=Epic -world-port=2000 -RenderOffScreen -prefernvidia
#호스트에 소스빌드한 Carla 실행 명령어.
./CarlaUE4.sh -quality-level=Epic -world-port=2000 -prefernvidia