Ubuntu 20.04 部署 CARLA 9.14 与 ROS 桥接实战:从环境配置到联合仿真
1. 环境准备与基础配置在Ubuntu 20.04上部署CARLA 9.14需要特别注意Python版本和系统依赖的兼容性。实测发现Python 3.7是最稳定的选择这里推荐使用Anaconda进行环境管理。我遇到过直接使用系统Python导致库冲突的问题用虚拟环境能完美避开这些坑。首先从清华镜像站下载Anaconda最新版速度比官网快很多。安装完成后立即创建专用环境conda create -n carla_py37 python3.7 conda activate carla_py37CARLA本体建议从南方科技大学镜像站获取预编译版本下载时注意要同时获取AdditionalMaps地图包。有次我忘了下地图包结果仿真场景只有空荡荡的马路排查了半天才发现问题。系统级依赖安装这些就够了sudo apt-get install -y libgeographic-dev python3-pip pip install --upgrade pip2. CARLA核心安装与验证解压下载的CARLA包后需要将地图包内容复制到Import目录然后执行导入脚本cp AdditionalMaps_0.9.14.tar.gz /opt/carla-simulator/Import/ cd /opt/carla-simulator/Import/ ./ImportAssets.sh测试运行建议先用低画质模式能显著降低GPU负载./CarlaUE4.sh -prefernvidia -quality-levelLow -RenderOffScreen这时候打开另一个终端可以运行PythonAPI示例测试基础功能。记得先安装示例依赖cd PythonAPI/examples pip install -r requirements.txt python3 manual_control.py如果看到车辆模型能正常渲染且可以通过键盘控制说明基础环境已经OK。我遇到过OpenGL版本不兼容导致的黑屏问题更新NVIDIA驱动后解决。3. ROS桥接深度配置ROS桥接是联合仿真的关键需要特别注意版本匹配。实测CARLA 9.14对应melodic/noetic都可以但Python版本必须统一。建议在conda环境外单独创建ROS工作空间mkdir -p ~/carla_ros_ws/src cd ~/carla_ros_ws catkin_make克隆官方ros-bridge源码后修改CARLA_VERSION文件确保版本号正确。这个细节坑过我两次版本不匹配会导致奇怪的段错误echo 0.9.14 src/ros-bridge/carla_ros_bridge/src/carla_ros_bridge/CARLA_VERSION编译前必须安装这些ROS依赖sudo apt install ros-noetic-ackermann-msgs ros-noetic-derived-object-msgs pip install transforms3d pyyaml opencv-python4. 联合仿真实战技巧启动顺序非常关键正确的流程应该是先启动CARLA服务端再启动ROS bridge最后加载控制节点# 终端1 ./CarlaUE4.sh -carla-rpc-port2000 # 终端2 roslaunch carla_ros_bridge carla_ros_bridge.launch # 终端3 roslaunch carla_spawn_objects carla_spawn_objects.launch调试时建议关注这几个关键topic/carla/ego_vehicle/vehicle_status查看车辆状态/carla/ego_vehicle/lidar检查传感器数据/tf确认坐标系关系遇到过bridge连接超时的问题后来发现是防火墙阻止了端口2000。如果遇到类似情况可以先用telnet localhost 2000测试端口连通性。5. 性能优化与常见问题在笔记本上运行时这些参数能提升流畅度./CarlaUE4.sh -quality-levelLow -benchmark -fps20内存泄漏是个常见问题建议每2小时重启一次服务。可以通过htop观察内存占用情况超过80%就需要警惕了。这些错误我踩过坑libp11-kit.so.0: undefined symbol→ 重新安装opensslUnable to find UE4 game→ 检查CARLA安装路径Sensor data timeout→ 调整fixed_delta_seconds参数对于自动驾驶算法开发建议先用carla_manual_control测试基础功能再逐步接入自己的算法模块。记得在launch文件中设置synchronous_mode为True以保证数据同步。