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 python=3.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-level=Low -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-port=2000 # 终端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-level=Low -benchmark -fps=20内存泄漏是个常见问题,建议每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以保证数据同步。
