共计 2767 个字符,预计需要花费 7 分钟才能阅读完成。
自动驾驶技术的快速发展离不开高质量的仿真环境。作为初学者,如何在众多开源项目中找到合适的工具并快速搭建验证平台呢?今天我们就从 GitHub 上 awesome-autonomous-driving 资源库出发,一步步构建基于 CARLA 的仿真环境。

为什么选择 CARLA?
CARLA 是目前最流行的开源自动驾驶仿真平台之一,相比 AirSim 和 LGSVL,它具有以下优势:
- 更真实的物理引擎和渲染效果
- 丰富的城市地图和天气系统
- 完整的 Python API 控制接口
- 活跃的开源社区支持
不过 AirSim 在无人机仿真方面更胜一筹,而 LGSVL 则更专注于 LiDAR 仿真。对于算法验证来说,CARLA 的多传感器支持和灵活的场景编辑能力使其成为初学者入门的最佳选择。
环境搭建步骤
1. 安装 Ubuntu 依赖项
建议使用 Ubuntu 18.04 或 20.04 系统。首先安装基础依赖:
sudo apt-get update
sudo apt-get install -y python3 python3-pip python3-dev
如果需要 ROS 兼容性,建议安装 ROS Noetic 版本:
sudo sh -c 'echo"deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main"> /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
sudo apt-get install -y ros-noetic-desktop-full
2. 获取 CARLA 预编译包
从 awesome-github 资源库中可以找到最新的 CARLA 预编译版本。下载并解压:
wget https://carla-releases.s3.amazonaws.com/Linux/CARLA_0.9.14.tar.gz
tar -xzvf CARLA_0.9.14.tar.gz
cd CARLA_0.9.14
3. 配置传感器
CARLA 支持多种传感器配置。下面是一个典型的 LiDAR 和相机组合的 JSON 配置示例:
{
"sensors": [
{
"type": "sensor.camera.rgb",
"id": "front_camera",
"x": 1.3, "y": 0.0, "z": 1.7,
"roll": 0.0, "pitch": 0.0, "yaw": 0.0,
"width": 800, "height": 600,
"fov": 90
},
{
"type": "sensor.lidar.ray_cast",
"id": "lidar",
"x": 1.3, "y": 0.0, "z": 1.7,
"roll": 0.0, "pitch": 0.0, "yaw": 0.0,
"range": 50.0,
"channels": 32,
"points_per_second": 100000
}
]
}
4. Python 控制脚本示例
下面是一个基础的多线程控制脚本,实现了车辆的基本运动控制:
import carla
import threading
class VehicleController:
def __init__(self, vehicle: carla.Vehicle):
self.vehicle = vehicle
self.control = carla.VehicleControl()
self.running = True
def update(self):
while self.running:
# 非阻塞式 IO 控制
self.vehicle.apply_control(self.control)
def start(self):
self.thread = threading.Thread(target=self.update)
self.thread.start()
def stop(self):
self.running = False
self.thread.join()
# 主程序
client = carla.Client('localhost', 2000)
world = client.get_world()
blueprint_library = world.get_blueprint_library()
vehicle_bp = blueprint_library.filter('model3')[0]
spawn_point = carla.Transform(carla.Location(x=100, y=200, z=1.5))
vehicle = world.spawn_actor(vehicle_bp, spawn_point)
controller = VehicleController(vehicle)
controller.start()
# 设置控制参数
controller.control.throttle = 0.5
controller.control.steer = 0.1
性能调优 checklist
- 点云降采样对 FPS 的影响
- 原始 32 线 LiDAR: 15FPS
- 降采样到 16 线: 28FPS
-
降采样到 8 线: 45FPS
-
避免 GPU 内存泄漏
每次销毁 actor 时,确保正确释放资源:
# 错误方式 - 会导致内存泄漏
world.try_spawn_actor(blueprint, transform)
# 正确方式
def safe_spawn(world, blueprint, transform):
actor = world.try_spawn_actor(blueprint, transform)
try:
yield actor
finally:
if actor is not None:
actor.destroy()
避坑指南
- CARLA 0.9.14 的 Python3.8 兼容性问题
解决方案: - 降级到 Python3.7
或 -
修改 CARLA PythonAPI 中的
setup.py文件,将python_requires改为>=3.6 -
多传感器时间戳同步
三种方案对比: - 硬件同步(最佳但成本高)
- 软件时间戳对齐(中等精度)
- 后处理插值(最简单但精度最低)
开放性问题
在搭建好基础仿真环境后,如何设计可扩展的感知 - 规划模块接口?awesome-github 上有几个值得参考的架构案例:
- Autoware 的模块化接口设计
- Apollo 的 CyberRT 框架
- Baidu 的 PaddlePaddle 自动驾驶套件
这些项目都采用了松耦合的模块设计,通过消息中间件实现各组件通信,值得深入学习。
希望这篇指南能帮助你快速搭建自动驾驶仿真环境。实践中遇到任何问题,欢迎在 CARLA 社区讨论交流。记住,仿真只是第一步,真正的挑战在于将算法迁移到真实场景中。
