1. 仿真平台选型与搭建

做自动驾驶感知算法,最头疼的是什么?

我个人觉得,不是模型调参,也不是数据标注。而是——你辛辛苦苦写了个算法,结果上路一测,发现连个鬼影都识别不出来。真车上路测试,成本高、风险大,还受法规限制。

所以,仿真平台就成了咱们的「救命稻草」。今天这一章,我就带你把这根稻草变成一根「钢筋」。

1.1 主流仿真平台对比

市面上仿真平台不少,但真正能打的,其实就这几个。我挨个说说我的使用感受。

CARLA

CARLA 是目前最主流的自动驾驶仿真器。它基于虚幻引擎,画面逼真,传感器模型丰富。我在做多传感器融合项目时,就用的它。

优点很明显:开源、社区活跃、支持自定义地图和传感器。缺点嘛,就是资源消耗大,普通笔记本跑起来有点吃力。

SUMO

SUMO 是交通流仿真工具。它不擅长渲染画面,但擅长模拟车流、红绿灯、行人行为。说白了,它是个「交通规划师」。

我一般把 CARLA 和 SUMO 联合使用。CARLA 负责视觉,SUMO 负责交通逻辑。嗯,这个组合挺香的。

LGSVL

LGSVL 是 LG 推出的仿真器,后来被收购了。它和 Apollo 集成得很好。如果你用百度 Apollo 平台,LGSVL 是个不错的选择。

不过,我个人觉得它的社区活跃度不如 CARLA,文档也有点乱。但它的传感器模拟精度确实不错。

AirSim

AirSim 是微软出的,基于虚幻引擎。它最初是为无人机设计的,后来扩展到自动驾驶。画面质量很高,但更新频率变慢了。

我建议,如果你做无人机感知,可以选 AirSim。做自动驾驶,还是优先考虑 CARLA。

平台 主要特点 适用场景 我的评价
CARLA 开源、虚幻引擎、传感器丰富 感知算法验证、多传感器融合 首选,社区活跃
SUMO 交通流仿真、轻量级 交通规划、车流模拟 配合 CARLA 使用更佳
LGSVL 与 Apollo 集成、传感器精度高 Apollo 平台开发 文档需完善
AirSim 画面逼真、无人机支持好 无人机感知、视觉算法 更新较慢
我的建议: 如果你刚入门,直接选 CARLA。别犹豫,它最成熟,踩坑的人多,解决方案也多。

1.2 硬件在环(HIL)与软件在环(SIL)概念

这两个概念,说白了就是「仿真到什么程度」的问题。

软件在环(SIL)

SIL 就是纯软件仿真。你的算法跑在电脑上,传感器数据也是模拟的。没有真实硬件参与。

我刚开始做感知时,全用 SIL。好处是快,改个参数就能跑。坏处是,你永远不知道算法在真车上会出什么幺蛾子。

硬件在环(HIL)

HIL 就不一样了。它把真实的硬件(比如摄像头、雷达、控制器)接入仿真环境。传感器数据是模拟的,但算法跑在真实硬件上。

我曾经在 HIL 测试中发现,某个摄像头在低光照条件下,帧率会掉到 10fps。这在 SIL 里根本发现不了。你想想看,如果直接上车测试,后果不堪设想。

核心区别: SIL 测算法逻辑,HIL 测硬件适配。两者缺一不可。

什么时候用 SIL,什么时候用 HIL?

  • 算法开发阶段: 用 SIL。快速迭代,别被硬件拖慢节奏。
  • 硬件选型阶段: 用 HIL。验证硬件性能,避免选型失误。
  • 集成测试阶段: 先 SIL 再 HIL。确保逻辑没问题,再上硬件。
注意: 别以为 SIL 跑通了就万事大吉。我曾经有个项目,SIL 测试全部通过,结果 HIL 一跑,发现内存泄漏。嗯,从那以后,我再也不敢跳过 HIL 了。

1.3 基于 Docker 的仿真环境一键部署

搭建仿真环境,最烦的是什么?

依赖冲突!

你装个 CARLA,要装虚幻引擎、Python 库、ROS 版本……搞不好还要和系统里的 CUDA 打架。我早期有个项目,光搭环境就花了三天。三天啊,兄弟们。

后来我学乖了,用 Docker。一次配置,到处运行。

Docker 镜像构建

我写了个 Dockerfile,把 CARLA、ROS、Python 依赖全打包进去。你只需要拉取镜像,一键启动。

# Dockerfile 示例
FROM nvidia/cuda:11.4.0-devel-ubuntu20.04

# 安装 CARLA
RUN apt-get update && apt-get install -y \
    wget \
    && wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/CARLA_0.9.13.tar.gz \
    && tar -xzf CARLA_0.9.13.tar.gz -C /opt/

# 安装 ROS Noetic
RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' \
    && apt-get install -y ros-noetic-desktop-full

# 安装 Python 依赖
COPY requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt

CMD ["/bin/bash"]
小技巧: 把 CARLA 的版本固定下来。别用 latest,否则哪天更新了,你的代码可能就跑不起来了。

一键启动脚本

我写了个 shell 脚本,拉取镜像、启动容器、挂载代码目录,一条命令搞定。

#!/bin/bash
# start_sim.sh
docker run -it --rm \
  --gpus all \
  -v $(pwd)/code:/workspace/code \
  -p 2000-2002:2000-2002 \
  carla-sim:0.9.13 \
  /bin/bash

你只需要执行 ./start_sim.sh,环境就起来了。是不是很爽?

避坑指南

  • GPU 直通: 别忘了加 --gpus all,否则 CARLA 跑不起来。
  • 端口映射: CARLA 默认用 2000 端口。如果你同时跑多个实例,记得改端口。
  • 数据持久化:-v 挂载目录,别把数据丢在容器里。容器一删,数据就没了。
我曾经踩过的坑: 有次我忘了挂载目录,跑了一天的仿真数据全丢了。嗯,从那以后,我每次启动容器前都会检查挂载路径。

好了,这一章的内容就到这里。仿真平台选型、SIL/HIL 概念、Docker 部署,这三块是后续所有章节的基础。你把这章吃透了,后面的路就好走了。

下一章,我们聊聊「传感器模型与数据生成」。到时候我会分享一些生成高质量标注数据的技巧,敬请期待。