[Carla,Autoware] PCD Map Generation in Carla Using ROS Bag and TF Transformations (without slam)

DDOKKON·2025년 7월 3일

Carla simulator의 map에서 PCD file을 추출하는 방법에 대한 글

Carla에서 기본 제공하는 PCL recorder는 Roadrunner로 만든 custom map에서 적용하기 불편한것 같음
SLAM을 하는 방식도, 각 SLAM 패키지마다 원하는 tf 트리 형태들이 다르기에, 복잡함.
현재 글에 소개된 명령어들은, 전부 필자 기준의 디렉토리임. 본인의 디렉토리에 맞게 수정해서 사용






🟢개발환경

Carla 0.9.15 (Docker)

💡Roadrunner 를 이용하여 Custom map을 Carla에 올리려면 Carla 0.9.15 (source build)필요

Carla-ros-bridge (client로 동작하는 호스트는 3.10 whl 파일 설치)

⚠️파이썬 가상환경venv 이용

ubuntu 22.04

ROS2 humble








🟢아키텍처 소개

  1. Carla 서버 실행
  2. carla-ros-bridge, carla_ros_bridge_with_example_ego_vehicle.launch.py 실행 (기본맵 변경이나, Custom map으로 변경시, 런치 내부 파라미터 수정)
  3. PCD를 얻고 싶은 원하는 위치로 이동
  4. rosbag record -a (반드시 /tf까지 포함되도록 기록)
  5. BagProcessor.py 실행 (Carla 메시지들을 인식할 수 있도록, Carla whl (py 3.10 버전) 등록된 파이썬 가상환경에서 실행!
  6. SLAM없이 Carla map의 원하는 부분 PCD파일을 얻을 수 있음. (BagProcessor.py 에서 Carla차량 - map 좌표계간 변환을 수행하여, 차량의 이동을 반영한 PCD파일을 얻을 수 있음)






1️⃣Carla 0.9.15, Docker install

source build는 Carla 공식 document 참조

# Pull CARLA 0.9.15
docker pull carlasim/carla:0.9.15






2️⃣Carla ros bridge, Carla client python API install

REF: https://github.com/ttgamage/carla-ros-bridge


1.⚠️client(호스트)에서 python3.10 가상환경 만들기

python3.10 -m venv carla_env  (처음 1)
source carla_env/bin/activate  (가상환경 활성화, ~디렉토리에서 해야함)




2.whl 파일 다운로드 (⚠️carla-0.9.15-cp310-cp310-linux_x86_64.whl)
REF: https://github.com/gezp/carla_ros/releases/



3.휠파일 설치

pip install carla-0.9.15-cp310-cp310-linux_x86_64.whl
python -c "import carla; print(carla.__file__)"




4.bridge 설치 (⚠️파이썬 가상환경에서)

mkdir -p ~/Workspace/ros-bridge && cd ~/Workspace/ros-bridge
git clone --recurse-submodules https://github.com/ttgamage/carla-ros-bridge.git
mv carla-ros-bridge src
source /opt/ros/humble/setup.bash
rosdep update
rosdep install --from-paths src --ignore-src -r
pip install transform3d  (tramsform3d 오류 발생시)

rosdep install --from-paths src --ignore-src -r

pip install empy==3.3.4 pyyaml setuptools colcon-common-extensions  (em 관련 에러, colcon depend없어서 그럼)
pip install jinja2 typeguard
pip install lark-parser
pip install pygame
pip install numpy==1.24.3

colcon build --symlink-install





⚠️환경변수 등록 (ros bridge 패키지 인식 + 파이썬 가상환경 인식)

파이썬 가상환경 환경변수로 등록안해두면, 모듈 못찾는다고 계속 뜸
ros-bridge 패키지도 source 해주자

source ~/Workspace/ros-bridge/install/setup.bash
export PYTHONPATH=/home/ddokkon/carla_env/lib/python3.10/site-packages:$PYTHONPATH






3️⃣Carla, Carla-ros-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 \
  --device=/dev/dri \
  carlasim/carla:0.9.15

cd ~
source carla_env/bin/activate
export PYTHONPATH=/home/ddokkon/carla_env/lib/python3.10/site-packages:$PYTHONPATH
ros2 launch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch.py 




💡다른맵(carla 다른맵 or custom map) 으로 하고 싶으면 아래 부분 수정

gedit carla_ros_bridge_with_example_ego_vehicle.launch.py







4️⃣ ROS bag record

명령어 입력후, PCD 따고 싶은 구역을 돌아다니면됨

rosbag record -a






5️⃣ ROS bag play and Point Cloud TF transform & merge

github: https://github.com/Lee-seokgwon/slamless-pcd-generator

ros2 bag play /home/ddokkon/rosbag/rosbag2_2025_07_03-10_44_16 --clock --rate 0.2

rosbag 실행후 10초 정도뒤에 아래 파이썬 파일 실행하자. (tf정보 충분히 버퍼에 쌓이고 난뒤)

python3 BagProcessor.py #위 github 주소 참고



⚠️ 코드 내부의 디렉토리 본인에 맞게 수정



이후 해당 pcd 파일을 Autoware Map builder에 넣어서 이용 가능.
필요하다면 다운샘플링도 할것 (github 레포에 포함되어있음)

profile
School of Electronic Engineering. KNU

0개의 댓글