保姆级教程:在Ubuntu 22.04上用Docker搞定Carla 0.9.15与Autoware.humble的联合仿真

保姆级教程:在Ubuntu 22.04上用Docker搞定Carla 0.9.15与Autoware.humble的联合仿真 自动驾驶仿真实战Ubuntu 22.04下Docker部署Carla与Autoware全流程指南自动驾驶技术的学习离不开高质量的仿真环境。本文将带你从零开始在Ubuntu 22.04系统上使用Docker搭建Carla 0.9.15与Autoware.humble的联合仿真平台。不同于简单的环境搭建教程我们将深入每个关键步骤的技术细节确保你能避开常见陷阱一次性成功部署这个强大的自动驾驶开发环境。1. 环境准备与系统配置在开始之前确保你的系统满足以下最低要求操作系统Ubuntu 22.04 LTS推荐使用纯净安装硬件配置CPUIntel i7或同等性能的AMD处理器至少4核内存16GB以上显卡NVIDIA GTX 1080或更高必须支持CUDA存储空间至少50GB可用空间1.1 NVIDIA驱动安装正确的显卡驱动是保证Carla流畅运行的关键。执行以下步骤安装最新驱动# 添加官方PPA源 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update # 查看推荐的驱动版本 ubuntu-drivers devices # 安装推荐驱动示例为nvidia-driver-535 sudo apt install nvidia-driver-535 # 重启系统 sudo reboot安装完成后验证驱动是否正常工作nvidia-smi你应该能看到类似如下的输出显示显卡信息和驱动版本----------------------------------------------------------------------------- | NVIDIA-SMI 535.86.05 Driver Version: 535.86.05 CUDA Version: 12.2 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | || | 0 NVIDIA GeForce ... On | 00000000:01:00.0 On | N/A | | 0% 43C P8 10W / 250W | 387MiB / 11264MiB | 0% Default | | | | N/A | ---------------------------------------------------------------------------1.2 Docker与NVIDIA容器工具包安装我们将使用Docker来管理复杂的依赖关系。首先安装Docker CE# 卸载旧版本 sudo apt remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt update sudo apt install ca-certificates curl gnupg # 添加Docker官方GPG密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg # 设置仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 sudo docker run hello-world接下来安装NVIDIA容器工具包使Docker能够使用GPU# 添加NVIDIA容器工具包仓库 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed s#deb https://#deb [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list # 安装工具包 sudo apt update sudo apt install -y nvidia-container-toolkit # 配置Docker使用NVIDIA运行时 sudo nvidia-ctk runtime configure --runtimedocker sudo systemctl restart docker # 验证GPU访问 sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi2. 获取仿真环境镜像我们将使用两个关键Docker镜像Autoware.humble和Carla-Autoware桥接器。2.1 拉取Autoware镜像Autoware基金会提供了官方Docker镜像大大简化了环境配置docker pull ghcr.io/autowarefoundation/autoware:humble-2024.01-cuda-amd64这个镜像包含了ROS 2 HumbleAutoware.universe核心组件CUDA支持所有必要的依赖项注意镜像大小约为8GB下载时间取决于你的网络速度。建议在网络稳定的环境下操作。2.2 拉取Carla-Autoware桥接器桥接器负责在Carla和Autoware之间传输数据docker pull tumgeka/carla-autoware-bridge:latest这个桥接器实现了传感器数据转换LiDAR、相机等车辆状态同步控制命令传递3. 项目结构与源码准备合理的项目结构能让你更轻松地管理仿真环境。我们建议如下目录布局~/autoware_sim/ ├── autoware/ # Autoware源码 ├── carla-maps/ # Carla地图数据 └── carla_0.9.15/ # Carla二进制文件3.1 初始化Autoware工作空间mkdir -p ~/autoware_sim/autoware/src cd ~/autoware_sim/autoware git clone https://github.com/autowarefoundation/autoware.git -b 2024.01导入Autoware的依赖仓库vcs import src autoware.repos3.2 添加Carla桥接组件我们需要添加TUM开发的Carla桥接功能包cd ~/autoware_sim/autoware/src git clone https://github.com/TUMFTM/Carla_t2.git3.3 下载Carla地图Carla仿真需要特定的地图数据。我们使用Town10HD作为示例mkdir -p ~/autoware_sim/carla-maps/Town10 # 假设地图文件已下载并放置在正确位置提示可以从Carla官方或社区资源获取地图文件确保格式与版本兼容。4. 配置与编译4.1 修改Autoware启动配置为了使Autoware能够与Carla协同工作需要调整几个关键配置文件修改autoware_launch/launch/autoware.launch.xmlarg nameconfig_dir value$(find-pkg-share carla_t2_sensor_kit_description)/config//更新tier4_localization_component.launch.xml中的点云话题input_pointcloud arg nameinput_pointcloud default/sensor/lidar/front descriptionThe topic will be used in the localization util module/ /input_pointcloud4.2 编译Autoware使用colcon工具编译Autowarecd ~/autoware_sim/autoware colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease编译过程可能需要30分钟到2小时取决于你的硬件配置。如果遇到内存不足的问题可以尝试colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease --parallel-workers 25. 启动联合仿真5.1 启动Carla服务器首先启动Carla仿真引擎cd ~/autoware_sim/carla_0.9.15 ./CarlaUE4.sh -prefernvidia -carla-rpc-port1403 -quality-levelLow关键参数说明-prefernvidia强制使用NVIDIA显卡-carla-rpc-port1403设置通信端口-quality-levelLow降低图形质量以提高性能5.2 启动Carla-Autoware桥接器在新的终端中启动桥接容器docker run -it -e RMW_IMPLEMENTATIONrmw_cyclonedds_cpp --network host tumgeka/carla-autoware-bridge:latest在容器内启动桥接服务ros2 launch carla_autoware_bridge carla_aw_bridge.launch.py port:1403 town:Town10HD traffic_manager:True如果需要生成交通流在另一个终端中执行docker exec -it container_id bash cd src/carla_autoware_bridge/utils python3 generate_traffic.py -p 14035.3 启动Autoware使用rocker工具启动Autoware容器比普通docker命令提供更好的X11支持rocker --networkhost -e RMW_IMPLEMENTATIONrmw_cyclonedds_cpp -e LIBGL_ALWAYS_SOFTWARE1 --x11 --nvidia --volume ~/autoware_sim/autoware -- ghcr.io/autowarefoundation/autoware:humble-2024.01-cuda-amd64在容器内启动Autowarecd ~/autoware_sim/autoware source install/setup.bash ros2 launch autoware_launch e2e_simulator.launch.xml \ vehicle_model:carla_t2_vehicle \ sensor_model:carla_t2_sensor_kit \ map_path:~/autoware_sim/carla-maps/Town10/6. 验证与调试当所有组件成功启动后你应该能在RViz中看到车辆模型激光雷达点云摄像头画面地图信息常见问题及解决方案问题RViz中看不到传感器数据检查确保桥接器正确运行且话题名称匹配解决使用ros2 topic list验证话题是否存在问题车辆不响应控制命令检查Autoware的规划模块是否正常输出控制命令解决检查/control/command/control_cmd话题问题仿真运行缓慢优化降低Carla的图形质量关闭不必要的RViz显示项7. 进阶配置与自定义7.1 使用自定义车辆模型你可以替换默认的车辆模型准备URDF模型文件修改carla_t2_vehicle_description包中的配置重新编译相关包colcon build --packages-select carla_t2_vehicle_description7.2 添加新传感器要在仿真中添加新传感器在Carla中配置传感器更新桥接器的传感器配置修改Autoware的感知栈以适应新数据7.3 性能优化技巧使用--privileged模式运行Docker容器以获得更好性能调整Carla的渲染设置平衡质量与性能在Autoware中禁用不需要的功能模块8. 开发工作流程建议高效的自动驾驶开发工作流程快速迭代在仿真中测试算法更改版本控制使用git管理你的Autoware修改日志记录保存重要的仿真运行数据以供分析自动化测试编写脚本自动化常见测试场景# 示例自动化测试脚本框架 #!/bin/bash # 启动Carla ./start_carla.sh # 启动桥接器 ./start_bridge.sh # 启动Autoware ./start_autoware.sh # 运行测试场景 ./run_test_scenario.py通过这套完整的Carla-Autoware联合仿真环境你可以专注于自动驾驶算法的开发而无需担心硬件部署的复杂性。环境提供了丰富的传感器数据和真实的物理仿真是学习和研究自动驾驶技术的理想平台。