康谋方案 | AVM合成数据仿真验证方案
随着自动驾驶技术的快速发展,仿真软件在开发过程中扮演着越来越重要的角色。仿真传感器与环境不仅能够加速算法验证,还能在安全可控的条件下进行复杂场景的重复测试。
本文将分享如何利用自动驾驶仿真软件配置仿真传感器与搭建仿真环境,并对脚本进行修改,优化和验证4个鱼眼相机生成AVM(Around View Monitor)合成数据的流程。通过这一过程,一同深入体验仿真软件的应用潜力!
一、流程概述
AVM是一种通过多相机实现车辆周围环境的实时监控和显示的系统,广泛应用于自动驾驶和高级驾驶辅助系统(ADAS)的环境感知中。本文基于仿真软件与脚本生成AVM图像的流程如下所示:

图1:基于aiSim构建AVM图像流程
首先,在Unreal Engine中配置标定投影参数所需的地图,并在仿真器中为车辆部署4个方向的鱼眼相机;
其次,基于相机内参进行去畸变,并记录求解投影矩阵所需的关键参考值,例如AVM画幅尺寸、参考点的相对坐标、参考区域的大小与位置、车辆与参考区域的距离等;
随后,在完成了角点提取预处理的标定图像中快速选取参考点,生成单方向的BEV视图,重复4次完成标定去畸变;
后文将对每个流程进行具体描述。
二、仿真传感器与环境配置
对于AVM功能而言,通常需要配备4个及以上的大FOV相机以拍摄车辆周围的图像,在此基础上还可配备雷达以更好地获取车辆周围的障碍物信息。

图2:aiSim相机传感器障碍物真值输出
由于本文所使用仿真软件的相机传感器可以直接输出识别对象(车辆、行人等)的2D、3D边界框真值,所以只需配置4个方向的鱼眼相机即可满足整体需求:
(1)前置鱼眼相机:安装在前方车标附近,约15°俯视角;
(2)后置鱼眼相机:安装在后备箱附近,约25°俯视角;
(3)左、右侧鱼眼相机:分别安装在左右后视镜下方,约40°俯视角与相对车纵轴约100°的偏航角。

图3:环视OpenCV鱼眼相机传感器配置
除了传感器的配置,考虑到脚本是通过选取地面点,求解相机到地面的投影矩阵,并转换生成BEV视图进行组合,所以还需要构建一张特征明显、易于辨认标定效果的地图。
本文所使用的仿真软件支持在Unreal Engine中进行地图编辑与导出,并带有一定数量的3D资产库,因此可以基于一张基础室内地图,布置一定数量的正方形黑白标定板,根据需要搭建一个标定地图:

图4:基于aiSim插件的Unreal Engine地图编辑
首先,在Unreal Engine中打开项目,并进入室内合成地图;
然后,从3D资产库中选择100cm×100cm×5cm的标定板静态网格体,拖放到地图中;
随后,通过直接拖动模型上的变换工具或者修改侧边栏中的变换属性框调整标定板的位置与姿态;
进而,配置标定板的材质,以黑色、白色的交替顺序铺展标定板;
最终形成一个长方形的标定区域。

图5:编辑完成后的地图效果参考
批量铺展的过程可以拆分为对2×2的标定板组合实施横向与纵向阵列,完成后的地图如图所示,整体是一个6m×11m的矩形区域,车辆放置在中间2m×5m的矩形区域中。
三、图像处理与AVM合成验证集
如前文所述,本文使用的AVM脚本是基于车辆四周,位于相邻两个相机重叠视野的标定物,通过选取参考投影区域实现鱼眼相机到BEV的转化,以前视鱼眼相机为例:

图6:投影区域及BEV转化示意图
首先,由于是仿真传感器的标准OpenCV鱼眼相机模型,焦距、中心像素位置、畸变参数等内参均已知,可直接使用OpenCV的去畸变函数实现去畸变,如图6的(c)到(d)所示;
其次,设定图6(a)与(b)所示关键参数,确定图像上的点对应的真实世界位置,进而计算尺度:
(1)AVM视野总宽total_width = 2 × shift_width + 6 × board_size;
(2)AVM视野总长total_height = 2 × shift_height + 11 × board_size;
(3)board_size为标定板边长,此处为100,单位cm;
(4)shift_width与shift_height为视野延伸距离,单位cm;
(5)左上角投影点projection_point_0:(shift_width + 100, shift_height),以此类推右上角、左下角、右下角投影点坐标,形成投影区域;
(6)inner_height与inner_width为投影区域相对车辆的横向、纵向距离,单位cm,由此可以推算出自车所处区域;
而后,对去畸变相机图像追加Shi-Tomasi角点提取处理,并增加半自动采点的模式切换,自动选取鼠标点击像素位置周围欧式距离最小的角点,保障准确度的同时提升效率;
最后,如图6(d)选取4个角点,形成与(b)对应的参考投影区域,输出的BEV视图如图6(e)所示。

图7:环视BEV合成AVM示例
以此类推可以得到4个方向的BEV视图及对应的投影参数,结合车辆图层作为覆盖,即可生成对应传感器布置下的二维AVM合成图像,如图7所示,其中每个像素分辨率为1cm²。

图8:传感器外参优化示例
通过仿真软件,一方面可以在控制算法不变的情况下寻找出更优的传感器外参布局,另一方面也可以在控制传感器不变的情况下在多种不同场景验证,进而迭代优化AVM算法的表现。结合相机传感器自带的标注信息,后续也可以进行包括障碍物识别在内的更多功能验证。

图9:不同场景下的AVM合成数据
四、总结与展望
本文介绍了基于aiSim仿真软件生成AVM合成数据的完整流程,包括传感器与地图的配置、图像处理与BEV视图生成以及最终的AVM合成验证。
不难看出,仿真软件的高效性与灵活性保障了在安全可控的环境中快速验证算法性能的可行性,并可以通过多场景测试与参数优化改进算法,最终提升其综合表现。
我是分享自动驾驶技术的康谋
欢迎关注互动
期待与您的进一步交流
相关文章:
康谋方案 | AVM合成数据仿真验证方案
随着自动驾驶技术的快速发展,仿真软件在开发过程中扮演着越来越重要的角色。仿真传感器与环境不仅能够加速算法验证,还能在安全可控的条件下进行复杂场景的重复测试。 本文将分享如何利用自动驾驶仿真软件配置仿真传感器与搭建仿真环境,并对…...
Linux内核IPv4路由选择子系统
一、基本知识 1.具体案例:直连路由 结构fib_nh表示下一跳,包含输出网络设备、外出接口索引等信息。 有两个以太网局域网 LAN1 和 LAN2,其中 LAN1 包含子网 192.168.1.0/24,而 LAN2 包含子网 192.168.2.0/24。在这两个 LAN 之…...
NWAFU 生物统计实验二 R语言版
#1 setwd(修改为你的工作路径或桌面路径) feed_types <- c("A", "B", "C") weight_gain_means <- c(36.8, 34.9, 21.3) weight_gain_sds <- c(2.4, 2.7, 6.6) weight_gain <- rnorm(3, mean weight_gain_means, sd weight_gain_sd…...
Thinkphp指纹识别
识别ThinkPHP框架(指纹) 1.ioc判断 /favicon.ico 2.报错 /1 然后使用工具梭哈...
【AVRCP】蓝牙AVRCP协议中的L2CAP互操作性要求深度解析
目录 一、L2CAP互操作性要求(针对AVRCP) 1.1 核心概念 1.2 AVRCP对L2CAP的增强需求 1.3 关键机制解析 1.4 浏览通道优化配置 1.5 实际应用场景与解决方案 二、通道类型与配置 2.1. 通道类型限制 2.2 PSM字段规范 2.3. 实现意义 3.4. 实际应用…...
剑指 Offer II 111. 计算除法
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20111.%20%E8%AE%A1%E7%AE%97%E9%99%A4%E6%B3%95/README.md 剑指 Offer II 111. 计算除法 题目描述 给定一个变量对数组 equations 和一个实数值数组 values 作…...
掌握 WRF/Chem 模式:突破大气环境研究技术瓶颈的关键
技术点目录 第一部分、WRF-Chem模式应用案例和理论基础第二部分、Linux环境配置及WRF-CHEM第三部分、WRF-Chem模式编译,排放源制作第四部分、WRF-Chem数据准备(气象、排放、初边界条件等),案例实践第五部分、模拟结果提取、数据可…...
linux性能监控的分布式集群 prometheus + grafana 监控体系搭建
prometheusgrafana分布式集群资源监控体系搭建 前言一、安装 prometheus二、在要监控的服务器上安装监听器三、prometheus服务器配置四、grafana配置大屏五、创建Linux监控看板五、监控windows服务器注意事项 前言 Prometheus 是一个开源的 分布式监控系统 和 时间序列数据…...
数字化转型 2.0:AI、低代码与智能分析如何重塑企业竞争力?
引言:数字化转型进入2.0时代 在过去的十几年里,企业的数字化转型(1.0)主要围绕信息化和自动化展开,例如引入ERP、CRM等系统,提高办公效率,减少人为失误。然而,随着市场竞争加剧&…...
柔性PZT压电薄膜触觉传感器在人形机器人的应用
柔性PZT压电薄膜声阻抗与人体组织匹配好,具有可弯曲性,可以贴附在非平整物体表面进行使用;而且具有受力后易弯曲的特点,器件的输出信号强,可用于穿戴产品,比如可以制作多路脉搏传感器用于智能多通道脉诊仪&…...
基于SpringBoot的“校园招聘网站”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“校园招聘网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 局部E-R图 系统首页界面 系统注册…...
基于FPGA的DDS连续FFT 仿真验证
基于FPGA的 DDS连续FFT 仿真验证 1 摘要 本文聚焦 AMD LogiCORE IP Fast Fourier Transform (FFT) 核心,深入剖析其在 FPGA 设计中的应用。该 FFT 核心基于 Cooley - Tukey 算法,具备丰富特性,如支持多种数据精度、算术类型及灵活的运行时配置。文中详细介绍了其架构选项、…...
由LAC自动建立L2TP实验
一、实验拓扑: 二、实验配置 1.LAC的配置 基础配置: [LAC]int g 0/0/0 [LAC-GigabitEthernet1/0/0]ip address 192.168.0.1 24 [LAC]int g 1/0/0 [LAC-GigabitEthernet1/0/0]ip address 10.1.1.254 24 [LAC-GigabitEthernet1/0/0]int g1/0/1 [LAC-GigabitEthernet1/0/1]ip ad…...
内网渗透(CSMSF) 构建内网代理的全面指南:Cobalt Strike 与 Metasploit Framework 深度解析
目录 1. Cobalt Strike 在什么情况下会构建内网代理? 2. Cobalt Strike 构建内网代理的主要作用和目的是什么? 3. Cobalt Strike 如何构建内网代理?需要什么条件和参数? 条件 步骤 参数 4. Cobalt Strike 内网代理能获取什…...
[AI速读]混合语言IP集成:挑战与高效解决方案
在现代SoC(系统级芯片)设计中,IP(知识产权模块)复用是提升开发效率的关键。然而,当设计涉及多种硬件描述语言(如SystemVerilog、VHDL、SystemC)时,如何高效集成不同语言的IP模块成为一大难题。本文将从实际设计场景出发,探讨混合语言IP集成的核心挑战,并介绍一套方法…...
利用ffmpeg库实现音频Opus编解码
一、编译与环境配置 libopus库集成 需在编译FFmpeg时添加--enable-libopus参数,编译前需先安装libopus源码并配置动态库路径。最新FFmpeg 7.1版本默认支持Opus的浮点运算优化和VBR/CVBR模式。 多平台兼容性 Opus支持Windows/Linux/macOS平台࿰…...
SAP FAGLL03 追加并显示描述字段
目录 1、新建一个结构2、操作FAGLPOSX结构3、新建一个BADI 1、新建一个结构 1.1、先在SE11中新建一个结构:ZZADD_FIELDS_FAGL,把我们要显示的描述字段放在这个结构中 2、操作FAGLPOSX结构 2.1、在FAGLPOSX结构中选择Append Structure,把我…...
Linux Vim 寄存器 | 从基础分类到高级应用
注:本文为 “vim 寄存器” 相关文章合辑。 英文引文,机翻未校。 中文引文,略作重排。 未整理去重,如有内容异常,请看原文。 Registers 寄存器 Learning Vim registers is like learning algebra for the first ti…...
Ubuntu版免翻墙搭建BatteryHistorian
摘要 昨天安装了一个翻墙版本的很不好用,主要是网络不稳定,故于是换了一个免翻墙的docker镜像。但是发现还是很难用。又安装了一个window版本的免翻墙的BatteryHistorian。明天再分享下Windows的免翻墙的BatteryHistorian步骤。 安装好Docker了就直接d…...
Django Rest Framework 创建纯净版Django项目部署DRF
描述创建纯净版的Django项目和 Django Rest Framework 环境的部署 一、创建Django项目 1. 环境说明 操作系统 Windows11python版本 3.9.13Django版本 V4.2.202. 操作步骤(在Pycharm中操作) 创建Python项目drfStudy、虚拟环境 虚拟环境中安装 jdangopip install django==4.…...
深度洞察:DeepSeek 驱动金融行业智能化转型变革
该文章为软件测评,不是广告!!!! 目录 一.金融行业的智能化转型浪潮 二.DeepSeek的核心技术剖析 1.DeepSeek 模型的金融智慧 2.实时联网搜索:把握金融市场脉搏 3.RAG 能力:铸就精准金…...
面试题精选《剑指Offer》:JVM类加载机制与Spring设计哲学深度剖析-大厂必考
一、JVM类加载核心机制 🔥 问题5:类从编译到执行的全链路过程 完整生命周期流程图 关键技术拆解 编译阶段 查看字节码指令:javap -v Robot.class 常量池结构解析(CONSTANT_Class_info等) 类加载阶段 // 手动加载…...
【CXX-Qt】2.1.1 为 WebAssembly 构建
CXX-Qt 及其编写的应用程序可以编译为 WebAssembly,但存在一些限制。以下是关于如何为 WASM 目标构建的详细说明。 你需要安装 Qt for WebAssembly。下一篇将展示已测试的版本。 此外,如果尚未完成,请从此处克隆 emsdk git 仓库。 使用正确…...
AUTOSAR Communication Services - COM:(二)COM的常见API用法整理
备注:COM-API常用用法整理,持续更新 一、用户I-PDU发送回调中,指定发送对应DBC的信号值 boolean Rte_COMIPduCallout_signal(PduIdType id, PduInfoType *ptr) {static uint8 ucCheckSum 0;// Calculate checksumif (ucCheckSum > 15)u…...
掌握些许 IPv6 要点,windows 远程桌面安全便利两相宜!
掌握这些要点,Windows 远程桌面安全便利两相宜! 在日常办公中,许多人会用到 Windows 系统的远程桌面功能。但在实际使用时,会遇到内网计算机难以通过运营商的动态 ip 与多层 NAT 向互联网暴露端口的技术问题,和计算机…...
Spring Boot整合Apache BookKeeper教程
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot整合Apache BookKeeper教程 1. 简介 Apache BookKeeper 是一个高性能、持久化的分布式日志存储系统,适用于需要强一致性和高吞吐量的…...
【Linux进程】——进程的程序地址空间
目录 前言 1.程序地址空间 1.1区域划分 1.2程序地址空间的本质 1.3程序地址空间分配原则 2.数据寻找 2.1补充:进程挂起 结语 前言 在Linux系统的神秘世界里,进程就像是一个个小工匠,各自忙碌地完成着不同的任务。你是否想过ÿ…...
边缘云原生操作系统的设计与思考
资料来源:火山引擎-开发者社区 边缘云行业现状和发展历程 从 06 年 AWS 推出 EC2 、S3 到今天已经过去了 18 年,云计算早已不是一个新鲜词汇,从当前业务来看,我们能看到云计算从中心到中心边缘的发展趋势,为什么会有 这…...
Jenkins muti-configuration-project 中调用pipeline project
Jenkins muti-configuration-project 中调用pipeline project 解决方案示例练习1. 多配置项目设置:2. 触发器配置:3. Pipeline 项目 Jenkinsfile: 解决方案 创建多配置项目: 在 Jenkins 中创建一个新的多配置项目。在“配置矩阵…...
Gdiplus(也就是GDI+)使用
篇一: Gdiplus(也就是GDI)使用步骤: 1.包括相应的头文件及引入相应的lib #include <GdiPlus.h> #pragma comment(lib, "gdiplus.lib") using namespace Gdiplus;//如果没有using namespace Gdiplus;就需要添加“命名空间作用域符” …...
