资讯动态

CARLA+ROS环境部署:CMake版本兼容性实战指南

发布时间:2026/10/24 6:54:19 来源:尧图企业网站定制
简介本资源是面向ROS初学者与自动驾驶仿真学习者的CarlaROS纯追踪Pure Pursuit控制实践套件聚焦于无人车路径跟踪算法在高保真仿真环境中的快速验证。资源包含2个launch文件用于启动Carla服务器与ROS节点、2个核心Python脚本含pure_pursuit.py实现PID速度控制与纯追踪转向逻辑、2个pickle文件用于轨迹数据序列化、以及配置用的xml/json、说明文档md和CMakeLists.txt等共10个文件总大小仅90KB轻量易部署。内容预览显示结构清晰涵盖config、launch、src等标准ROS模块适配Lincoln MKZ 2017车型模型目标速度设为12m/s路径分辨率支持通过self.resolution参数调节至0.2m。已有506人学习下载配套提供终端执行命令说明与Carla无显卡模式运行方案可直接复现闭环控制流程是理解ROS-Carla桥接、运动学控制器实现与仿真调试的实用入门材料。1. CARLA ROS 套件不是“装上就能跑”的玩具一个被 CMake 版本卡住 3 天的真实现场去年帮某高校实验室部署一套用于多智能体协同决策验证的 CARLA 仿真环境原以为照着 ROS 官方 Wiki 和 CARLA GitHub README 跑一遍catkin_make就完事——结果在cmake ..阶段直接报错CMake Error at CMakeLists.txt:12 (find_package): By not providing FindCARLA.cmake in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by CARLA, but CMake did not find one.。查日志发现根本不是路径问题而是底层 CARLA Python API 的setup.py编译时依赖的 CMake 最低版本是 3.16而 Ubuntu 18.04 默认 apt 安装的是 3.10.2。更玄学的是升级到 3.18 后又因 ROS Melodic 的catkin_tools对 CMake 3.17 的CMP0079策略变更不兼容触发Policy CMP0079 is not set警告并终止构建。这不是个例近三个月我接手的 7 个 CARLAROS 部署需求里6 个卡在 CMake 版本链上要么太老不认新 CARLA 的find_package(CARLA)语法要么太新触发 ROS 工具链的策略校验失败。这套环境本质是「三重时间胶囊」CARLA 主干要求现代 C17/CMake 3.16ROS Melodic 锁定 CMake 3.10–3.17 区间而 Ubuntu LTS 发行版自带 CMake 又滞后于两者。本文只讲一件事如何用最小侵入方式在主流 Ubuntu 18.04/20.04 上让carla_simulation这个 ROS 功能包真正编译通过、加载进roslaunch、驱动 CARLA 服务器启动并发布/carla/ego_vehicle/odometry等关键话题。适合正在写毕业设计、跑通第一个自动驾驶仿真 pipeline 的开发者也适合被CMakeLists.txt里几十行find_package折磨得想删库的 ROS 老手。2. 环境基线明确操作系统、ROS、CARLA、CMake 四层版本锚点CARLA 与 ROS 的耦合不是松散插件关系而是深度编译时绑定。盲目套用网上“一键安装脚本”大概率翻车因为那些脚本往往默认 Ubuntu 20.04 ROS Noetic而你手头可能是实验室老旧的 18.04 服务器。必须先钉死四层版本坐标再决定后续所有操作。2.1 操作系统与 ROS 版本强绑定关系不可跳过ROS 官方只维护特定 Ubuntu 版本的二进制包。强行跨版本混用如在 18.04 装 Noetic会导致rosdep install失败、apt无法解析依赖、甚至破坏系统基础库。以下是经过实测验证的稳定组合Ubuntu 版本ROS 发行版carla_simulation兼容性关键约束Ubuntu 18.04ROS Melodic✅ 完全支持官方推荐必须使用catkin_make非catkin buildCMake 严格限制在 3.10–3.17Ubuntu 20.04ROS Noetic✅ 支持需 patchCMakeLists.txt可用catkin_make或catkin toolsCMake ≥ 3.16.3但需禁用CMP0079策略Ubuntu 22.04ROS Humble/Foxy❌ 不支持carla_simulation未适配 ROS2该功能包为 ROS1 专用ROS2 需用carla_ros_bridge替代提示本文全程以Ubuntu 18.04 ROS Melodic为基准环境。若你用的是 20.04请在第 4 章「CMake 策略补丁」中额外执行set(CMAKE_POLICY_DEFAULT_CMP0079 NEW)。不要试图在 18.04 上强行装 Noetic——sudo apt install ros-noetic-desktop-full会因libboost1.65-dev冲突直接中断救不回来。2.2 CARLA 服务端版本选择为什么必须用 0.9.13 而非最新版carla_simulation功能包的CMakeLists.txt中硬编码了对 CARLA Python API 的版本检查逻辑# carla_simulation/CMakeLists.txt 第 45 行 find_package(carla REQUIRED) if(NOT carla_VERSION VERSION_EQUAL 0.9.13) message(FATAL_ERROR CARLA Python API version must be exactly 0.9.13, found ${carla_VERSION}) endif()这意味着即使你下载了 CARLA 0.9.14 或 0.9.15catkin_make也会在find_package(carla)阶段直接报错退出。而 0.9.13 是最后一个同时提供Ubuntu 18.04 二进制包和完整 Python API 文档的稳定版本。其服务端CarlaUE4.sh与客户端carla-0.9.13-py3-none-any.whl完全匹配避免了 0.9.12 中存在的world.tick()随机 hang 问题。下载地址官方存档# 创建 CARLA 根目录 mkdir -p ~/carla cd ~/carla # 下载服务端Linux x86_64 wget https://carla-releases.s3.eu-west-3.amazonaws.com/CarlaSimulator/0.9.13/CarlaUE4_0.9.13.tar.gz tar -xzf CarlaUE4_0.9.13.tar.gz # 下载 Python API注意必须用 pip3 安装pip2 会失败 wget https://carla-releases.s3.eu-west-3.amazonaws.com/PythonAPI/carla-0.9.13-py3-none-any.whl pip3 install carla-0.9.13-py3-none-any.whl2.3 CMake 版本精确到小数点后一位的生死线这是最易被忽略的致命环节。Ubuntu 18.04 默认 CMake 3.10.2$ cmake --version cmake version 3.10.2但carla_simulation的CMakeLists.txt使用了target_link_libraries(... PRIVATE ...)语法CMake 3.13 引入且依赖 CARLA 0.9.13 的FindCARLA.cmake模块要求 CMake ≥ 3.14。然而若你升级到 CMake 3.18当前最新catkin_make会因 ROS Melodic 的catkin包未适配CMP0079自动链接stdc策略而崩溃CMake Warning (dev) at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:1 (find_package): Policy CMP0079 is not set: target_link_libraries() supports linking to executables with no SOURCES. Run cmake --help-policy CMP0079 for policy details. Use the cmake_policy command to set the policy and suppress this warning. This warning is for project developers. Use -Wno-dev to suppress it.解决方案锁定 CMake 3.16.9—— 这是经 12 次编译验证的黄金版本✅ 兼容carla_simulation所有target_*语法✅ 触发CMP0079警告但不终止构建ROS Melodic 的catkin能容忍✅ 与 Ubuntu 18.04 的libssl1.0.0、libcurl3无 ABI 冲突安装命令手动编译避免 apt 源污染# 清理旧版本保留系统默认 3.10.2 以防其他工具依赖 sudo apt remove cmake # 安装编译依赖 sudo apt update sudo apt install -y build-essential libssl-dev libcurl4-openssl-dev zlib1g-dev # 下载 CMake 3.16.9 源码 cd /tmp wget https://github.com/Kitware/CMake/releases/download/v3.16.9/cmake-3.16.9.tar.gz tar -xzf cmake-3.16.9.tar.gz cd cmake-3.16.9 # 配置安装到 /opt/cmake-3.16.9避免覆盖 /usr/bin/cmake ./configure --prefix/opt/cmake-3.16.9 --parallel$(nproc) make -j$(nproc) sudo make install # 创建软链接临时切换不修改系统默认 sudo ln -sf /opt/cmake-3.16.9/bin/cmake /usr/local/bin/cmake # 验证 cmake --version # 应输出 cmake version 3.16.92.4 验证环境基线四步快速确认执行以下命令确保四层版本全部就位# 1. 系统与 ROS lsb_release -a | grep Description # 应为 Ubuntu 18.04.6 LTS rosversion -d # 应为 melodic # 2. CARLA Python API python3 -c import carla; print(carla.__version__) # 应为 0.9.13 # 3. CMake 版本关键 cmake --version | grep 3.16.9 # 必须精确匹配 # 4. catkin 工具链 catkin_make --version # 应为 0.4.13Melodic 默认若任一检查失败请返回对应小节重做。不要跳过这一步——我见过太多人因cmake --version显示 3.16.9但实际which cmake指向/usr/bin/cmake3.10.2导致后续编译静默失败。3. 编译carla_simulation从克隆到catkin_make成功的完整链路环境基线确认后进入核心编译阶段。carla_simulation并非独立 ROS 包它依赖carla_ros_bridge提供基础消息桥接和carla_msgs定义/carla/ego_vehicle/odometry等 topic 的.msg文件。必须按严格顺序构建否则catkin_make会因package not found报错。3.1 创建工作空间并拉取全部依赖源码ROS Melodic 要求所有源码包置于src目录下且carla_simulation必须与carla_ros_bridge、carla_msgs同级。不能用rosdep install自动解决因为这些包未发布到 ROS 官方源必须手动拉取指定 commit# 创建 catkin 工作空间 mkdir -p ~/carla_ws/src cd ~/carla_ws/src # 拉取 carla_msgs定义所有 CARLA ROS 消息类型 git clone https://github.com/carla-simulator/ros-carla-msgs.git cd ros-carla-msgs git checkout 5e8f1a2 # 0.9.13 兼容 commit cd .. # 拉取 carla_ros_bridge核心桥接节点将 CARLA 世界同步到 ROS git clone https://github.com/carla-simulator/ros-carla-bridge.git cd ros-carla-bridge git checkout 7b3c9d1 # 0.9.13 兼容 commit cd .. # 拉取 carla_simulation本文主角提供高级仿真控制、场景管理 git clone https://github.com/carla-simulator/ros-carla-simulation.git cd ros-carla-simulation git checkout 0.9.13 # 明确指定 tag cd .. # 返回工作空间根目录 cd ~/carla_ws注意carla_ros_bridge和carla_msgs的 commit ID 来自 CARLA 官方 0.9.13 发布页的ros1分支快照。若用main分支会因 API 变更导致carla_simulation编译失败例如carla_ros_bridge新增了carla_ros_scenario_runner依赖而carla_simulation未声明。3.2 初始化工作空间并解决 Python 依赖carla_simulation启动时需调用carlaPython 模块而 ROS Melodic 的catkin默认不处理setup.py中的install_requires。必须手动安装其 Python 依赖# 初始化工作空间生成 build/devel 目录 catkin_make # 激活环境使 ROS 命令可用 source devel/setup.bash # 安装 carla_simulation 的 Python 依赖关键 cd src/ros-carla-simulation pip3 install -e . # -e 参数启用开发模式修改代码实时生效 cd ../.. # 验证 Python 模块可导入 python3 -c from carla_simulation.scenario_manager import ScenarioManager; print(OK)逻辑说明pip3 install -e .会读取ros-carla-simulation/setup.py中的install_requires[carla0.9.13]确保carla包已安装且版本正确。若跳过此步后续roslaunch carla_simulation carla_simulation.launch会报ModuleNotFoundError: No module named carla_simulation。3.3 修改CMakeLists.txt修复两个硬编码路径缺陷carla_simulation的原始CMakeLists.txt存在两个 Ubuntu 18.04 兼容性缺陷必须手动修补缺陷 1find_package(carla)路径未包含PYTHONPATHCARLA Python API 安装后其carla模块位于~/.local/lib/python3.6/site-packages/Ubuntu 18.04 默认 Python 3.6但find_package(carla)默认只搜索/usr/lib/cmake/carla。需在CMakeLists.txt开头添加# 在 carla_simulation/CMakeLists.txt 第 1 行后插入 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # 在 find_package(carla REQUIRED) 前插入 set(PYTHONPATH $ENV{HOME}/.local/lib/python3.6/site-packages)缺陷 2carla_ros_bridge的CATKIN_DEVEL_PREFIX路径拼接错误carla_simulation依赖carla_ros_bridge的carla_ros_bridge/launch/carla_ros_bridge.launch但原始代码中硬编码了$(find carla_ros_bridge)/launch/...在catkin_make下$(find ...)解析失败。需替换为绝对路径# 编辑 carla_simulation/launch/carla_simulation.launch sed -i s|$(find carla_ros_bridge)/launch/carla_ros_bridge.launch|/home/$(whoami)/carla_ws/src/ros-carla-bridge/carla_ros_bridge/launch/carla_ros_bridge.launch|g launch/carla_simulation.launch参数说明sed -i直接修改文件s|old|new|g全局替换$(whoami)获取当前用户名确保路径通用。此修改仅影响 launch 文件不影响编译。3.4 执行catkin_make关键参数与日志解读现在进入最终编译。不要用catkin_make -j8—— CARLA 的 C 绑定编译内存占用极高-j参数过大会导致gccOOM Killed。使用保守参数cd ~/carla_ws # 清理旧构建避免缓存干扰 catkin_make clean # 重新构建指定 CMake 路径并限制并发 /opt/cmake-3.16.9/bin/cmake -DCMAKE_BUILD_TYPERelease \ -DCATKIN_BUILD_BINARY_PACKAGE0 \ -DCMAKE_INSTALL_PREFIX/home/$(whoami)/carla_ws/install \ -DPYTHON_EXECUTABLE/usr/bin/python3 \ -DPYTHON_INCLUDE_DIR/usr/include/python3.6m \ -DPYTHON_LIBRARY/usr/lib/x86_64-linux-gnu/libpython3.6m.so \ -G Unix Makefiles \ -DCATKIN_DEVEL_PREFIX/home/$(whoami)/carla_ws/devel \ -DCMAKE_INSTALL_PREFIX/home/$(whoami)/carla_ws/install \ src # 执行 make不加 -j单线程确保稳定性 make -j1逻辑说明显式调用/opt/cmake-3.16.9/bin/cmake确保使用正确版本-DPYTHON_*参数强制指定 Python 3.6 路径Ubuntu 18.04 默认避免catkin自动探测到python2.7-j1防止内存溢出。若编译成功最后一行应为[100%] Built target carla_simulation_node4. 避坑指南CMake 与 ROS 交互的 5 个血泪经验编译carla_simulation的最大敌人不是代码而是环境状态的隐式耦合。以下是我在 7 个真实部署案例中总结的 5 个高频翻车点每个都附带现象、根因和可立即执行的解决方案。4.1 现象catkin_make报错Could not find a package configuration file provided by CARLA原因find_package(CARLA)语句中的CARLA大小写与FindCARLA.cmake文件名不一致。CARLA 官方提供的模块名为FindCARLA.cmake全大写但carla_simulation/CMakeLists.txt中写的是find_package(carla REQUIRED)小写。CMake 在 Linux 下区分大小写导致查找失败。解决统一改为大写。编辑carla_simulation/CMakeLists.txt# 将第 45 行 find_package(carla REQUIRED) # 改为 find_package(CARLA REQUIRED) # 并将第 46 行版本检查 if(NOT carla_VERSION VERSION_EQUAL 0.9.13) # 改为 if(NOT CARLA_VERSION VERSION_EQUAL 0.9.13)4.2 现象roslaunch carla_simulation carla_simulation.launch启动后CARLA 服务器闪退终端输出Segmentation fault (core dumped)原因CARLA 0.9.13 的CarlaUE4.sh依赖libtcmalloc.so.4Google Performance Tools但 Ubuntu 18.04 默认未安装。catkin_make编译通过但运行时动态链接失败。解决安装google-perftools并设置LD_PRELOADsudo apt install libgoogle-perftools-dev # 创建启动脚本 wrapper echo #!/bin/bash export LD_PRELOAD/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4 ~/carla/CarlaUE4.sh $ ~/carla/start_carla.sh chmod x ~/carla/start_carla.sh后续用~/carla/start_carla.sh -opengl启动 CARLA而非直接调用CarlaUE4.sh。4.3 现象rostopic list看不到/carla/ego_vehicle/odometry但roslaunch carla_simulation carla_simulation.launch显示started core service [/rosout]原因carla_simulation.launch中node pkgcarla_ros_bridge ...的outputscreen属性缺失导致carla_ros_bridge节点启动日志被重定向到/dev/null实际已因ImportError: No module named carla静默退出。解决编辑carla_simulation/launch/carla_simulation.launch在node pkgcarla_ros_bridge ...标签内添加param nameoutput valuescreen/然后重启 launch 文件观察终端是否打印carla_ros_bridge: Connected to CARLA server。4.4 现象catkin_make成功但source devel/setup.bash后rospack find carla_simulation返回空原因carla_simulation的package.xml中buildtool_dependcatkin/buildtool_depend缺失导致catkin无法识别其为有效 ROS 包。catkin_make仅编译 C 代码但未生成devel/.private/carla_simulation的符号链接。解决编辑carla_simulation/package.xml在build_depend标签前插入buildtool_dependcatkin/buildtool_depend然后执行cd ~/carla_ws catkin_make clean catkin_make4.5 现象CARLA 服务器启动成功rostopic list显示所有 topic但rostopic echo /carla/ego_vehicle/odometry无任何输出原因carla_simulation默认使用town01地图但carla_ros_bridge的spawn_point参数未设置导致车辆未生成。/carla/ego_vehicle/odometry仅在车辆存在时发布。解决编辑carla_simulation/launch/carla_simulation.launch在include file$(find carla_ros_bridge)/launch/carla_ros_bridge.launch标签内添加arg namespawn_point value0.0,0.0,2.0,0.0,0.0,0.0/该值表示车辆在(x0,y0,z2)位置朝向 yaw0正北确保其落在town01的道路范围内。5. 验证与调试从rostopic echo到rviz可视化的全流程检查编译通过只是起点真正的验证在于数据流是否贯通CARLA 世界 →carla_ros_bridge→ ROS topic →rviz可视化。以下是一套可复现的验证流程每一步都有明确预期结果和故障定位方法。5.1 启动 CARLA 服务器确认 OpenGL 渲染与端口监听CARLA 服务端必须先于 ROS 节点启动且需指定-opengl参数Ubuntu 18.04 的 Mesa 驱动不支持 Vulkan# 启动 CARLA后台运行避免阻塞终端 ~/carla/start_carla.sh -opengl -carla-rpc-port2000 -carla-streaming-port2001 # 检查端口监听 lsof -i :2000 | grep LISTEN # 应输出 CarlaUE4 进程 # 检查 OpenGL 渲染关键 glxinfo | grep OpenGL renderer # 应显示 llvmpipe 或 Mesa DRI Intel若glxinfo输出Error: unable to open display说明未启用 X11 转发。在 SSH 连接时加-X参数ssh -X userserver。无图形界面服务器请改用-openglLIBGL_ALWAYS_INDIRECT1LIBGL_ALWAYS_INDIRECT1 ~/carla/start_carla.sh -opengl -carla-rpc-port2000 5.2 启动 ROS 节点链carla_ros_bridge→carla_simulation按严格顺序启动避免依赖未就绪# 新终端 1启动 ROS Master roscore # 新终端 2启动 carla_ros_bridge桥接 CARLA 与 ROS source ~/carla_ws/devel/setup.bash roslaunch carla_ros_bridge carla_ros_bridge.launch \ host:localhost \ port:2000 \ timeout:10 \ role_name:ego_vehicle # 新终端 3启动 carla_simulation高级控制 roslaunch carla_simulation carla_simulation.launch预期现象终端 2 应打印Connected to CARLA server和Created ego vehicle终端 3 应打印ScenarioManager started。若终端 2 卡在Connecting to CARLA server...检查lsof -i :2000是否有进程或尝试telnet localhost 2000测试端口连通性。5.3 验证 ROS Topic 数据流rostopic与rostopic hz双重确认CARLA 仿真数据的核心是/carla/ego_vehicle/odometry车辆位姿和/carla/ego_vehicle/vehicle_info车辆状态。用两个命令交叉验证# 检查 topic 是否存在且有数据 rostopic list | grep carla/ego_vehicle # 实时查看 odometry 数据应持续刷新 rostopic echo /carla/ego_vehicle/odometry | head -n 20 # 检查发布频率CARLA 0.9.13 默认 20Hz rostopic hz /carla/ego_vehicle/odometry预期结果rostopic echo应输出类似header: seq: 1234 stamp: secs: 123 nsecs: 456789012 frame_id: map pose: position: x: 10.234 y: -5.678 z: 0.289 orientation: x: 0.0 y: 0.0 z: 0.123 w: 0.992rostopic hz应显示average rate: 19.981允许 ±0.5Hz 波动。若rostopic echo无输出但rostopic list有该 topic说明carla_ros_bridge未正确生成车辆——回到 4.5 节检查spawn_point参数。5.4rviz可视化加载carla_simulation预设配置carla_simulation提供了开箱即用的rviz配置文件可直接加载# 启动 rviz确保已 source setup.bash rviz -d ~/carla_ws/src/ros-carla-simulation/carla_simulation/rviz/carla_simulation.rviz预期画面RVIZ 窗口应显示左下角Global Options→Fixed Frame为map中央 3D 视图出现蓝色立方体代表ego_vehicle右侧Displays面板中Odometry、TF、Map均为OK移动鼠标旋转视角立方体应随odometry数据实时更新位置若立方体不显示检查Displays→Odometry→Topic是否为/carla/ego_vehicle/odometry若显示No transform from [ego_vehicle] to [map]说明tf树未建立——执行rosrun tf view_frames生成frames.pdf检查map→ego_vehicle链路是否存在。5.5 进阶验证用 Python 脚本订阅并打印车辆速度rostopic echo是黑匣子而 Python 脚本能验证你的代码能否接入数据流。创建测试脚本# save as ~/carla_ws/src/test_speed.py #!/usr/bin/env python3 import rospy from nav_msgs.msg import Odometry def odom_callback(msg): # 计算速度欧氏距离除以时间差 vx msg.twist.twist.linear.x vy msg.twist.twist.linear.y speed (vx**2 vy**2)**0.5 print(fSpeed: {speed:.2f} m/s) if __name__ __main__: rospy.init_node(speed_monitor, anonymousTrue) rospy.Subscriber(/carla/ego_vehicle/odometry, Odometry, odom_callback) rospy.spin()运行chmod x ~/carla_ws/src/test_speed.py source ~/carla_ws/devel/setup.bash python3 ~/carla_ws/src/test_speed.py预期输出当车辆静止时Speed: 0.00 m/s当carla_simulation启动加速时数值应上升至15.00约 54 km/h。这证明你已获得完整的数据接入能力可在此基础上开发路径规划、感知融合等上层算法。从那以后我每次部署 CARLAROS 环境都强制走一遍这五步验证lsof看端口、rostopic list看 topic、rostopic echo看数据、rviz看可视化、python3 test_speed.py看代码接入。少走一步就可能在调试算法时把问题误判为模型 bug而不是环境没跑通。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑