在自动驾驶和机器人仿真领域,ROS 2与Carla的集成环境搭建是个高频需求。最近我在Ubuntu 22.04系统上完整走通了这套环境配置流程,过程中踩了不少坑,也积累了些实战经验。本文将详细记录从零开始搭建ROS 2 Humble与Carla 0.9.13的全过程,包含那些官方文档没写清楚的细节问题。
这个环境特别适合做自动驾驶算法开发、传感器仿真和多机协同测试。相比单独使用ROS 2或Carla,二者的结合能实现:在Carla的高保真虚拟环境中运行ROS 2节点,用ROS 2工具链处理传感器数据,并通过RVIZ等工具实时可视化仿真结果。
注意:所有操作基于x86_64架构,若使用ARM设备(如NVIDIA Jetson)需额外处理依赖项
首先确保系统已更新至最新状态:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 software-properties-common
设置时区避免后续日志时间错乱:
bash复制sudo timedatectl set-timezone Asia/Shanghai
Carla对NVIDIA显卡有硬性要求,建议安装470以上版本的驱动:
bash复制sudo ubuntu-drivers autoinstall
验证驱动安装:
bash复制nvidia-smi # 应显示显卡型号和CUDA版本
安装CUDA Toolkit 11.7(Carla 0.9.13的兼容版本):
bash复制wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
sudo apt install -y cuda-11-7
配置环境变量到~/.bashrc:
bash复制echo 'export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
按官方推荐方式安装ROS 2 Humble:
bash复制sudo apt install -y locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
sudo apt install -y curl gnupg2
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install -y ros-humble-desktop
安装colcon等构建工具:
bash复制sudo apt install -y python3-colcon-common-extensions python3-rosdep2
sudo rosdep init
rosdep update
配置环境变量:
bash复制echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证安装:
bash复制ros2 doctor # 应显示所有检查项通过
下载Carla 0.9.13预编译包:
bash复制wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/CARLA_0.9.13.tar.gz
tar -xvf CARLA_0.9.13.tar.gz
安装Python依赖:
bash复制pip install pygame numpy
获取ros-bridge源码:
bash复制git clone --recurse-submodules https://github.com/carla-simulator/ros-bridge.git carla-ros-bridge
cd carla-ros-bridge
git checkout 0.9.13
安装依赖:
bash复制rosdep install --from-paths src --ignore-src -r
编译:
bash复制colcon build
配置环境变量:
bash复制echo "source `pwd`/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
bash复制./CarlaUE4.sh -vulkan -quality-level=Epic
新建终端:
bash复制source /opt/ros/humble/setup.bash
source ~/carla-ros-bridge/install/setup.bash
ros2 launch carla_ros_bridge carla_ros_bridge.launch.py
新建终端运行RVIZ2:
bash复制rviz2
添加以下显示项:
症状:报错"Vulkan not supported"
解决:
bash复制sudo apt install -y vulkan-utils
vulkaninfo | grep GPU # 确认显卡被识别
症状:持续输出"Waiting for CARLA server..."
检查:
-carla-port=2000参数启动sudo ufw allow 2000/tcp在Carla中手动添加传感器:
python复制# 在Carla PythonAPI终端执行
blueprint = world.get_blueprint_library().find('sensor.camera.rgb')
transform = carla.Transform(carla.Location(x=1.5, z=2.4))
camera = world.spawn_actor(blueprint, transform, attach_to=ego_vehicle)
渲染模式选择:
./CarlaUE4.sh -RenderOffScreen-quality-level=LowROS 2调优:
bash复制export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI=file://$HOME/cyclonedds.xml
创建cyclonedds.xml配置:
xml复制<CycloneDDS>
<Domain>
<General>
<NetworkInterfaceAddress>lo</NetworkInterfaceAddress>
</General>
</Domain>
</CycloneDDS>
内存管理:
定期重启Carla服务器(约每4小时),内存泄漏是已知问题。
这套环境搭建完成后,可以进一步开发:
我在实际使用中发现,将Carla的仿真帧率控制在10-20FPS时,ROS 2的数据处理延迟最为稳定。过高帧率会导致消息堆积,而过低帧率会影响控制算法的实时性。