首页/文章/ 详情

最新版CARLA 0.9.16原生鱼眼相机仿真效果及代码分析

9月前浏览779

作者 | 张峻川, 编辑 | 李慢慢,  出品 | 车路漫漫

一、前言

千呼万唤始出来!历时5年,CARLA终于提供了原生的鱼眼相机模型(Wide Angle Lens)!


目前CARLA文档中已经包含了鱼眼相机模型(Wide Angle Lens)的使用说明,绝大部分相关代码都可以从源代码仓库中观察到。(在这以前,CARLA一直没有支持大视角相机模型,网上虽然流传着一些网友自己开源的方法,但都存在着一些问题,比如我之前分享的方法,详见本链接,就存在接缝伪影的问题,非常影响仿真的效果)。本文将介绍CARLA中鱼眼相机模型的使用方法,关键代码的说明,展示鱼眼相机模型的仿真效果。

二、部署使用

首先声明:确切来说,CARLA的鱼眼相机模型并不包含在其0.9.16稳定版里,从ue4-dev分支的commit历史可以看到,0.9.16版封版时间是2025年9月16日,但鱼眼相机模型的合入时间是9月18日,将将没有赶上。所以如果要等CARLA的稳定版也包含鱼眼相机模型,恐怕要等下一个UE4稳定版发布了。


现在尝试鱼眼相机模型的下载,需要在ue4-dev分支中拉取合适的版本,因此只能采用源码编译(build from source)的方式使用。


编译后使用make launch的方式运行CARLA的Server服务器,仓库代码中提供了名为manual_control_fisheye.py的client客户端代码,启动后就可以看到鱼眼相机模型的效果了。


示例代码manual_control_fisheye.py的命令行参数如下:

Hello from the pygame community. https://www.pygame.org/contribute.html
usage: manual_control_fisheye.py [-h] [-v] [--host H] [-p P] [-a] [--res WIDTHxHEIGHT] [--filter PATTERN] [--generation G] [--rolename NAME] [--gamma GAMMA] [--fov FOV] [--fov_mask] [--longitude_shift LONGITUDE_SHIFT] [--fov_fade_size FOV_FADE_SIZE] [--model MODEL]
                                 [--k0 K0] [--k1 K1] [--k2 K2] [--k3 K3] [--equirectangular] [--perspective] [--sync]

CARLA Manual Control Client

options:
  -h, --help            show this help message and exit
  -v, --verbose         print debug information
  --host H              IP of the host server (default: 127.0.0.1)
  -p P, --port P        TCP port to listen to (default: 2000)
  -a, --autopilot       enable autopilot
  --res WIDTHxHEIGHT    window resolution (default: 1280x720)
  --filter PATTERN      actor filter (default: "vehicle.*")
  --generation G        restrict to certain actor generation (values: "1","2","All" - default: "2")
  --rolename NAME       actor role name (default: "hero")
  --gamma GAMMA         Gamma correction of the camera (default: 2.2)
  --fov FOV             Camera field of view angle (default: 90.0)
  --fov_mask            Wheter to draw pixels outside the FOV as black (default: "false").
  --longitude_shift LONGITUDE_SHIFT
  --fov_fade_size FOV_FADE_SIZE
  --model MODEL         Camera model (default: "perspective")
  --k0 K0               k0 parameter for the Kannala-Brandt camera model (default: 0).
  --k1 K1               k1 parameter for the Kannala-Brandt camera model (default: 0).
  --k2 K2               k2 parameter for the Kannala-Brandt camera model (default: 0).
  --k3 K3               k3 parameter for the Kannala-Brandt camera model (default: 0).
  --equirectangular     Determines whether image rectification will be applied (default: "false")
  --perspective         Determines whether image rectification will be applied (default: "false")
  --sync                Activate synchronous mode execution

其中各项参数的解读可以参考官方文档,如图1所示:

[图1]


manual_control_fisheye.py中可以看到使用Python API构建和调用鱼眼相机模型模型的方法,运行示例程序后可以从pygame窗口中直接看到鱼眼相机渲染效果,并切换不同的相机特效,如深度相机、分割相机等。以下是笔者参考真实鱼眼参数,给k0-k3赋值,渲染出的CARLA相机图像:

[图2]


说明:为与真实相机参数尽量对齐,本文中所附所有图像的分辨率都是1920x1536,超出笔者所用屏幕分辨率,因此鱼眼图像底边会出现被裁剪的现象。


此外,本文所有鱼眼图像选择fov_mask = True,即去除fov外的图像内容,且选择fov_fade_size等于默认的0。fov_fade_size的效果如下(fov_fade_size = 3.6):

[图3]


对于鱼眼相机来说,最重要的参数恐怕就是fov了,以下是不同fov下的图像效果对比:

[图4]


显然,随着fov的增大,可见的视野范围随之增大。

接下来对比不同的Lens畸变模型对图像的影响,以下图像均选用fov = 200的参数。 透视投影(perspective):

[图5]

可见对于200的大fov角度,简单的perspective模型已经不能正确投影图像了。


立体投影(stereographic):

[图6]


等距投影(equidistant):

[图7]


等立体角投影(equisolid):

[图8]


正交投影(orthographic):

[图9]


kannala-brandt自定义:(本图使用k0-k3的默认值)

[图10]


以上各个模型的具体畸变计算方法,读者可以参考官方的代码进行深层探索。

三、关键代码解析

原生代码实现了在CARLA中模拟广角、鱼眼和大扭曲相机镜头的系统。为解决此问题,该模型实现采用了立方体贴图方法,具体解释如下:

  1. 传感器生成6个标准透视相机,指向所有方向(前、后、左、右、上、下),以捕获整个环境。

  2. 它使用一个计算着色器(Compute Shader),基于复杂的数学镜头模型(例如,Kannala-Brandt模型)对这6幅图像进行采样,并将它们拼接成一幅2D输出图像。

总结起来就是,首先对整个环境生成6张“照片”以捕获所有方向场景信息,然后在Shader中执行逆光路计算:对目标鱼眼图像中的每个像素,根据Lens畸变模型计算其光路向量,最终求出光路向量与开始的6张“照片”的交点位置,采样其rgb/深度/分割信息。

备注:由于需要采集6张”照片“,且在计算光路向量时需要迭代计算数值解,因此在相同分辨率下,CARLA的鱼眼相机渲染速度会低于普通相机渲染。笔者进行了简单对比,同样是1920x1536分辨率(使用RTX 3090主机运行CARLA server),普通相机server fps在20左右,换成鱼眼相机后,server的fps会降到10左右。

原生代码的c++结构,类层次结构:

AActor (Unreal)
 └── ASensor (Carla)
      └── ASceneCaptureSensor_WideAngleLens (管理立方体贴图与计算着色器)
           ├── ASceneCaptureCamera_WideAngleLens (RGB实现)
           └── AShaderBasedSensor_WideAngleLens (非RGB传感器的基类)
                ├── ADepthCamera_WideAngleLens
                ├── ASemanticSegmentationCamera_WideAngleLens
                └── AInstanceSegmentationCamera_WideAngleLens

着色器内容可详见 CameraModelCommon.ush,WideAngleLens.usf 等文件。


作者寄语:鱼眼相机在自动驾驶中主要用于环视,即获得车身360°近距离的图像信息,用于360全景/自动泊车/交通拥堵辅助等功能应用中,后续笔者也将基于此类功能展开仿真探索,欢迎各位小伙伴的持续关注与加入。


以上,本文完。

来源:车路漫漫
ACTUGpython自动驾驶渲染Unity
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-12-20
最近编辑:9月前
李慢慢
硕士 自动驾驶仿真工程师一枚
获赞 14粉丝 93文章 322课程 0
点赞
收藏
作者推荐

神经重建技术如何应用于自动驾驶仿真测试?

作者 | Foretellix编辑 | 李慢慢出品 | 车路漫漫神经重建技术(Neural Reconstruction)正逐渐成为前沿的创新技术。它能够基于真实驾驶数据,生成高度逼真的 3D 仿真环境,使开发者能够在安全可控的条件下,对日益复杂的自动驾驶系统进行全方位验证,涵盖各类驾驶场景,甚至包括罕见的极端情况。神经重建:自动驾驶开发验证的新利器自动驾驶系统的开发正迈入端到端模型与AI 驱动的新阶段,对丰富且多样化的数据需求日益增长。然而,传统的实际道路测试成本高昂、周期漫长,且难以充分覆盖那些罕见而关键的场景。神经重建技术 提供了一条可行的新路径:它可以将原始传感器日志 转化为完全渲染、可用于仿真的环境——不仅具有高度真实感,还可灵活调整测试条件,并能够 跨开发与测试流程重复使用,显著提升开发验证效率与可扩展性。神经重建的常见挑战在神经重建的实际应用中,自动驾驶研发团队普遍面临以下挑战:场景筛选困难:在海量日志中查找特定事件依然费时费力,例如自车以 30–40 英里/小时左转、迎面驶来另一辆车的场景。测试用例维护复杂:基于重建场景定义、验证并持续维护高质量测试用例难度较大。动态场景调整繁琐:在重建中修改参与者行为或环境参数往往操作复杂、容易出错。混合场景构建受限:将真实片段与虚拟车辆结合(如插入一辆切入车辆)需要极高的控制精度。覆盖度缺乏可视化:团队常难以直观评估重建场景是否满足覆盖目标,或是否存在潜在的安全盲区,这也限制了神经重建在量产开发中的可扩展性和复用价值。从原始驾驶日志到安全驱动仿真的一体化流程针对上述挑战,Foretellix提供了一套完整的闭环解决方案,帮助团队快速完成从事件检测到多样化仿真的转化,让神经重建技术真正融入量产级的验证与训练流程。该流程旨在实现从真实驾驶日志到聚焦安全的可仿真场景的顺畅转化,通过自动化与规模化手段,取代以往分散、依赖人工的操作步骤。整体流程如下:1. 片段检索与筛选(Snippet Search & Selection)工程师可按“场景意图”查询真实驾驶事件(如右侧被遮挡的行人横穿),并抽取片段用于重建、修改与回放。2. 场景重建(Scene Reconstruction)将选定片段送入 NVIDIA NuRec 或 Parallel Domain Replica 进行神经重建,生成传感器级真实感的3D数字孪生环境。工程师可以在重建场景的基础上灵活修改和渲染新的场景。3. 场景变化与新场景创建(Scene Variation & Scenario Creation)用户可以对重建场景进行调整,包括时间、参与者行为或环境条件,例如:重放原始或更新轨迹:交通参与者既可忠实重现原始行为,也可进行微调,或者由反应性行为模型实时响应。用户还可选择性移除部分交通参与者,轻松简化场景,聚焦关键交互,实现高度可控的仿真体验。下方视频展示了两段 NuRec渲染场景的对比:插入新的交通参与者:结合抽象场景库 V-Suites,可插入新的交通参与者,创建全新场景;参与者行为可偏离原始路径,探索假设情景、替代操作或极端情况。下方视频展示了利用 PD Replica 渲染的全新场景,其中插入的参与者均为合成生成。4. 验证与覆盖度反馈(Validation & Coverage Feedback)Foretify Evaluate 可对重建场景与真实驾驶日志进行统一评估,将结果映射至安全 KPI与 ODD 覆盖指标,并通过可视化仪表板直观呈现,帮助团队发现盲区并确保验证的完整性。ODD 覆盖度仪表板典型用例与应用• 训练 AI 模型:重建罕见场景并产生多样化变体,构建更丰富的训练数据集。• 闭环仿真:回放真实边缘案例并模拟新的行为变化,挑战并评估 AV 的安全响应。• 混合场景创建:在现有场景中插入新交互,测试系统在复杂互动下的鲁棒性。• 安全证据生成:自动关联场景覆盖与安全 KPI,形成可追溯的证据链。举例来说,开发者可以从车队日志中识别一次左转事件,利用 NuRec 或 PD Replica 进行重建,再通过 Foretify Generate 插入一辆合成超速车辆,并在同一流程中评估自动驾驶规划器的表现。为更安全的 AI 驱动自动驾驶夯实基础Foretellix 联合 NVIDIA 和 Parallel Domain 的解决方案,将真实事件、仿真场景与 KPI 跟踪紧密结合,为自动驾驶团队带来多重优势: 从真实日志快速构建场景,缩短到可仿真内容的路径;高复用性重建数据,减少对昂贵实车测试的依赖;对边缘案例进行可扩展的变化,强化 AI 训练与验证;更完善的覆盖追踪,直观监控稀有与常规场景,提升验证信心。随着 AV 技术日益 AI 化,团队需要与之匹配的仿真工作流来适应开发的速度与复杂度。基于 Foretellix 数据自动化平台,并集成 NVIDIA 与 Parallel Domain 的神经重建技术,该一体化解决方案能够将真实驾驶日志快速转化为经过验证的仿真场景,实现前所未有的速度与可控性。这是迈向更安全、高效 AI 自动驾驶开发的重要一步。以上,本文完。 来源:车路漫漫

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈