【carla】Ubuntu 20.04 下 carla-ros-bridge 编译实战:从环境配置到常见报错全解析

张开发
2026/4/8 10:51:57 15 分钟阅读

分享文章

【carla】Ubuntu 20.04 下 carla-ros-bridge 编译实战:从环境配置到常见报错全解析
1. 环境准备从零搭建CARLA-ROS开发环境在Ubuntu 20.04上搭建CARLA-ROS桥接环境就像组装一台高性能赛车——每个零件都需要精准到位。我花了三天时间踩遍所有坑整理出这份保姆级指南。首先确认你的系统已经安装以下基础组件ROS Noetic这是官方推荐与Ubuntu 20.04匹配的ROS版本Python 3.7/3.8CARLA对Python版本极其敏感NVIDIA驱动建议使用470版本驱动使用nvidia-smi验证创建catkin工作空间时有个细节容易被忽略绝对不要使用sudo权限这会导致后续编译出现诡异的权限错误。正确的姿势应该是mkdir -p ~/carla-ros-bridge/catkin_ws/src cd ~/carla-ros-bridge git clone --recurse-submodules https://github.com/carla-simulator/ros-bridge.git catkin_ws/src/ros-bridge这里有个隐藏陷阱如果网络不好导致子模块克隆失败可以尝试git submodule update --init --recursive手动补全。我实测发现用SSH协议克隆比HTTPS成功率更高。2. 依赖安装那些官方文档没告诉你的细节ROS依赖安装看似简单实则暗藏杀机。官方推荐的rosdep install经常因为网络问题失败这时候就要祭出国内开发者神器rosdepcsudo pip install rosdepc sudo rosdepc init rosdepc update rosdepc install --from-paths src --ignore-src -rPython环境管理是另一个重灾区。强烈建议使用conda创建独立环境但要注意两个致命细节必须指定python3.73.8会有libffi兼容问题安装顺序影响依赖解析conda create -n carla python3.7 conda activate carla pip install carla0.9.12 # 必须指定版本 pip install transforms3d pyyaml numpy opencv-python pygame我曾因为没指定carla版本导致后续出现CARLA python module version mismatch错误浪费了两小时排查。3. 编译实战避开CMake的那些坑执行catkin_make时90%的错误都源于环境变量污染。这里分享我的终极解决方案conda deactivate # 退出conda环境 source /opt/ros/noetic/setup.bash cd ~/carla-ros-bridge/catkin_ws catkin_make -DPYTHON_EXECUTABLE/usr/bin/python3这个命令组合解决了三个典型问题避免conda环境干扰ROS的Python路径显式指定系统Python3解释器确保ROS环境变量正确加载如果遇到CMake报错找不到包先别急着改CMakeLists.txt。试试这个万能排查命令apt-cache search ros-noetic | grep 包名4. 高频报错全解析从根源解决问题4.1 Python库缺失类错误典型错误ModuleNotFoundError: No module named empy这个问题其实有四种解法在conda环境安装conda install -c conda-forge empy使用系统Python编译前文提到的catkin_make参数临时切换Python路径export PYTHONPATH/usr/lib/python3/dist-packages暴力但有效sudo apt install python3-empy4.2 ROS包缺失类错误当看到Could not find a package configuration file provided by...时记住这个诊断流程确认包名是否正确注意noetic/melodic版本差异查询可用包apt-cache search ros-noetic | grep ackermann安装命令要带版本后缀sudo apt install ros-noetic-ackermann-msgs特别提醒derived-object-msgs这个包比较特殊需要手动下载deb安装wget http://launchpadlibrarian.net/xxxxxx/ros-noetic-derived-object-msgs_3.3.0-1buster.deb sudo dpkg -i ros-noetic-derived-object-msgs_3.3.0-1buster.deb4.3 动态库冲突类错误经典错误libp11-kit.so.0: undefined symbol: ffi_type_pointer这是Python环境与系统库冲突导致的解决方法堪称魔幻cd ~/anaconda3/envs/carla/lib mv libffi.so.7 libffi.so.7.bak sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7 sudo ldconfig原理是用系统libffi替换conda环境的版本这个操作可能会影响其他conda环境建议操作前备份。5. 终极验证让仿真跑起来的最后一步编译通过不代表万事大吉还需要验证运行时环境。创建一个测试脚本test_ros_bridge.py#!/usr/bin/env python3 import carla import rospy try: client carla.Client(localhost, 2000) client.set_timeout(2.0) print(CARLA连接成功) rospy.init_node(test_node) print(ROS节点初始化成功) except Exception as e: print(f验证失败{str(e)})运行前切记先启动CARLA服务端./CarlaUE4.sh在新的终端激活环境conda activate carla source ~/carla-ros-bridge/catkin_ws/devel/setup.bash如果遇到ImportError: No module named carla八成是Python路径问题。用这个命令查看当前Python路径import sys; print(sys.path)确保输出中包含conda环境的site-packages路径carla的PythonAPI路径通常在~/carla/PythonAPI/carla/dist下

更多文章