康谋方案 | 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合成验证。

不难看出,仿真软件的高效性与灵活性保障了在安全可控的环境中快速验证算法性能的可行性,并可以通过多场景测试与参数优化改进算法,最终提升其综合表现。


我是分享自动驾驶技术的康谋

欢迎关注互动

期待与您的进一步交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37211.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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.…

数据结构篇——二叉树的存储与遍历

一、引入 书接上文,文于此续。上文我们学到了树的存储结构,那么今天,我们来学习下几种特殊的二叉树以及关于它的各种遍历,让我们一起加油吧。 二、特殊的二叉树 二叉树的特殊形式这里介绍3种,其中需要着重记忆的有…

Vulnhub-wordpress通关攻略

姿势一、后台修改模板拿WebShell 第一步:进⼊Vulhub靶场并执⾏以下命令开启靶场;在浏览器中访问并安装好.... 第二步:找到外观--编辑--404.php,将原内容删除并修改为一句话木马,点击更新--File edited successfully. &…

「清华大学、北京大学」DeepSeek 课件PPT专栏

你要的 这里都打包好啦,快快收藏起来! 名称 链接 团队简介 类型 DeepSeek——从入门到精通 1️⃣ DeepSeek从入门到精通「清华团队」 清华大学新闻与传播学院 新媒体研究中心 元宇宙文化实验室 PPT课件 DeepSeek如何赋能职场应用? ——从提示语…

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…

【图像处理基石】什么是HDR图片?

1. 什么是HDR图片? HDR(高动态范围图像,High Dynamic Range)是一种通过技术手段扩展照片明暗细节的成像方式。以下是关于HDR的详细说明: 核心原理 动态范围:指图像中最亮和最暗区域之间的亮度差。人眼能…

HarmonyOS Next中的弹出框使用

HarmonyOS Next弹出框概述及分类 弹出框是一种模态窗口,通常用于在保持当前上下文环境的同时,临时展示用户需关注的信息或待处理的操作。用户需在模态弹出框内完成相关交互任务之后,才能退出模态模式。弹出框可以不与任何组件绑定&#xff0…

Java多线程与高并发专题——为何每次用完 ThreadLocal 都要调用 remove()?

什么是内存泄漏 首先,我们要知道这个事情和内存泄漏有关,所以就让我们先来看一下什么是内存泄漏。 内存泄漏指的是,当某一个对象不再有用的时候,占用的内存却不能被回收,这就叫作内存泄漏。 因为通常情况下&#xf…

视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决

视频推拉流EasyDSS视频直播点播平台可提供一站式的视频转码、点播、直播、视频推拉流、播放H.265视频等服务,搭配RTMP高清摄像头使用,可将无人机设备的实时流推送到平台上,实现无人机视频推流直播、巡检等应用。 有用户反馈,项目现…

《笔记》Android 获取第三方应用及查看应用信息、apk大小、缓存、存储,以及第三方清除缓存

获取应用相关信息&#xff1a; PS:manifest标签中设置以下属性表示系统应用 android:process"system" android:sharedUserId"android.uid.system" //获取所有应用&#xff08;非系统apk&#xff0c;有些应用获取不到&#xff09; List<ApplicationInf…

【保姆级教程】Windows系统+ollama+Docker+Anythingllm部署deepseek本地知识库问答大模型,可局域网多用户访问

目录 1.Ollama 本地化部署 DeepSeek R1 1.1下载Ollama 1.2安装Ollama 1.3安装DeepSeek R1大模型 2.系统环境配置 2.1开启系统功能 2.2安装wsl 3.安装 Docker Desktop并拉取Anythingllm镜像 3.1从 Docker 官网 下载并安装。 3.2拉取镜像 3.3运行 Docker 命令 4.anyth…

Sensodrive机器人力控关节模组SensoJoint在海洋垃圾清理机器人中的拓展应用

海洋污染已成为全球性的环境挑战&#xff0c;其中海底垃圾的清理尤为困难。据研究&#xff0c;海洋中约有2600万至6600万吨垃圾&#xff0c;超过90%沉积在海底。传统上&#xff0c;潜水员收集海底垃圾不仅成本高昂&#xff0c;而且充满风险。为解决这一问题&#xff0c;欧盟资助…

【redis】AOF 的基本工作机制,顺序写入,文件同步,重写机制

RDB 最大的问题&#xff0c;就是不能实时的持久化保存数据&#xff0c;在两次生成快照之间&#xff0c;实时的数据可能会随着重启而丢失 基本工作机制 AOF&#xff1a;append only file&#xff0c;类似于 MySQL 的 binlog&#xff0c;会把每个用户的每个操作&#xff0c;都记…

【C++】动态规划从入门到精通

一、动态规划基础概念详解 什么是动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种通过将复杂问题分解为重叠子问题&#xff0c;并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题&#xff1a; 最优子结构&…

数据可视化(matplotlib)-------辅助图标的设置

目录 一、认识图表常用的辅助元素 坐标轴 二、设置坐标轴的标签、刻度范围和刻度标签 &#xff08;一&#xff09;、设置坐标轴的标签 1、xlabel()------设置x轴标签 2、ylabel()------设置y轴标签 &#xff08;二) 、设置刻度范围和刻度标签 1、xlim()和ylim()函数分别可…

CSS 用于图片的样式属性

CSS 设置图像样式 CSS中用于图片的样式属性主要包括以下几个方面&#xff1a; ‌边框和背景‌&#xff1a; ‌border‌&#xff1a;可以设置图片的边框样式、宽度和颜色。例如&#xff0c;img { border: 1px solid #ddd; } 会给图片添加1像素的实线边框&#xff0c;颜色为灰色…

Redis解决缓存击穿问题——两种方法

目录 引言 解决办法 互斥锁&#xff08;强一致&#xff0c;性能差&#xff09; 逻辑过期&#xff08;高可用&#xff0c;性能优&#xff09; 设计逻辑过期时间 引言 缓存击穿&#xff1a;给某一个key设置了过期时间&#xff0c;当key过期的时候&#xff0c;恰好这个时间点对…

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…

python实现接口自动化

代码实现自动化相关理论 代码编写脚本和工具实现脚本区别是啥? 代码&#xff1a; 优点&#xff1a;代码灵活方便缺点&#xff1a;学习成本高 工具&#xff1a; 优点&#xff1a;易上手缺点&#xff1a;灵活度低&#xff0c;有局限性。 总结&#xff1a; 功能脚本&#xff1a;工…

C++特性——RAII、智能指针

RAII 就像new一个需要delete&#xff0c;fopen之后需要fclose&#xff0c;但这样会有隐形问题&#xff08;忘记释放&#xff09;。RAII即用对象把这个过程给包起来&#xff0c;对象构造的时候&#xff0c;new或者fopen&#xff0c;析构的时候delete. 为什么需要智能指针 对于…