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 런치파일 수정이 필요하다.
- 아래의 이미지는 수정이 완료된 코드이다.
- 수정한 부분을 강조하였다.
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)]
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}"