首个基于3DGS的自动驾驶硬件在环仿真系统!开源啦~

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

今天自动驾驶之心为大家分享自动驾驶仿真算法专家张峻川最新开源的基于3DGS的自动驾驶硬件在环仿真系统!如果您有相关工作需要分享,请在文末联系我们!

自动驾驶课程学习与技术交流群事宜,也欢迎添加小助理微信AIDriver004做进一步咨询

>>点击进入→自动驾驶之心3DGS技术交流群

编辑 | 自动驾驶之心

背景

3DGS技术自从问世以来,收获了学术界和工业界的大量关注,势头甚至已经超过NERF。感谢自动驾驶之心的邀请,我之前在自动驾驶之心平台上通过直播发布了我的开源项目:“GaussianRPG:首个开源的基于3DGS的自动驾驶闭环仿真器”【1】。该项目使用Street Gaussians方法作为图像渲染器,在ROS2架构下,实现了一个可测试AEB场景的软件在环闭环仿真demo。

在直播的“展望和讨论”部分,我提到了一种将3DGS渲染技术应用在自动驾驶硬件在环仿真测试中的可能。本文就讲述了将GaussianRPG拓展为硬件在环仿真系统的一次尝试。本文所有相关代码已经合并到了参考链接【1】,更详细的说明可以参考项目wiki。

图1 GaussianRPG HIL框架
图1 GaussianRPG HIL框架

硬件介绍

本文所述的硬件在环,专门指的是自动驾驶域控制器在环。我选择了一款机器人开发板来代替实际的域控制器。我选择的是24年地瓜机器人新推出的RDK X5开发板【2】,号称“千元内最好用的机器人套件”,具有 10Tops 端侧推理算力与 8 核 ARM A55 处理能力,支持 2 路 MIPI Camera 接入,4 路 USB3.0 接口,关键是开发板系统自带部署好的yolov5s模型,可以快速实现感知节点的目标检测的功能。

图2 地瓜机器人RDK X5开发板
图2 地瓜机器人RDK X5开发板

RDK X5可以接受MIPI摄像头、USB摄像头作为输入。我在某大型电商购物平台上找到了一款HDMI信号转USB信号的转换器(一百块以内即可全款拿下),可以模拟一路USB摄像头,将工作站显卡渲染出的图像通过HDMI转USB输入开发板,在1920x1080的分辨率下可以达到60Hz的频率,以此作为本demo系统中的视频注入板卡。

图3 锐尔威视 RER-H2U-V2
图3 锐尔威视 RER-H2U-V2

系统搭建

本文的硬件在环demo的系统图如图1所示。GaussianRPG运行在一台工作站中,Street Gaussians渲染出的一帧图像可以显示在指定位置的窗口中。视频注入板卡一端连接工作站的显卡HDMI接口作为其输入,输出一路USB接口,连接到RDK X5的USB接口上。当RDK X5上运行起一个调用USB摄像头的程序时,就会将来自视频注入板卡的输入当作一路USB摄像头,实现摄像头的仿真。

GaussianRPG本身也进行了修改,Street Gaussians输出的图像会渲染在指定位置的窗口中,以便视频注入板卡获取,这和成熟的硬件在环方案中的仿真软件的处理方式是相似的。

实现了视频注入,本demo的闭环开发工作就算完成了一大半。此时需要对这款RER-H2U-V2转换器在视频注入时产生的延迟做出测试,方法是:首先对工作站和RDK X5进行时间同步(在此采用的是将RDK X5的时源设定成工作站的方式),然后在工作站系统中开启一个显示系统时间的窗口,最后在RDK X5端采集视频注入的图像时,将保存下的图片命名为USB摄像头收到图像时的时间戳。通过保存的图片中的窗口中的时间戳和文件名中的时间戳的对比,可以得出视频注入板卡的时间延迟。测试的其中一帧如图4所示:

图4 视频注入时间延迟测试
图4 视频注入时间延迟测试

经过测试,我们可以看出,此方案的视频注入环节的时间延迟大概在200ms左右。目前业界成熟的硬件在环测试方案中的视频注入环节,时间延迟至少可以做到100ms以下。同时我还使用同样的方法测试了一款真实的1080P USB免驱摄像头的延迟,发现时延甚至要在300ms以上。当然,在自动驾驶实际应用中,车载摄像头的出图延迟一般都是很小的,在几十ms的量级,肯定要远小于仿真方案中的200ms。

除视频注入板卡的连接以外,还需要用网线将RDK X5和工作站连接起来,以便通过以太网传输代表整车信号的车速rostopic和代表控制命令的减速度rostopic。经过测试,本方案下通过以太网跨平台的rostopic传输,延迟只在1-2ms左右,和视频注入的延迟相比可以忽略不计。

闭环效果

本文的硬件在环demo运行闭环测试后,RDK X5板端的感知节点可以正常收到图像,且可以正常输出目标检测结果,如图5所示。

图5 RDK X5板端目标检测结果
图5 RDK X5板端目标检测结果

同时,在闭环测试中,RDK X5中的dummy AEB controller节点可以输出有效的刹车信号,也就是说RDK X5作为一个域控制器成功刹停了GaussianRPG系统中的仿真车辆。

我使用qt生成窗口,将Street Gaussian推理出的图像渲染出来,并未对推理过程或qt窗口的渲染刷新做任何优化。在闭环测试中,单帧的渲染出图时间至少要在80ms左右,再加上上一节讲到的视频注入时间延迟,本demo的硬件在环测试系统的单帧延迟将累积到280ms左右。再加上我编写的板端感知节点处理一帧图像还要将近100ms,因此需要AEB controller节点中设置更激进的刹车动作相关参数,才能让仿真车辆在demo中成功刹停。

讨论

  1. 作为一个硬件在环测试的demo,本项目存在一个重要的不足,那就是完全未考虑系统的实时性。首先GaussianRPG内部目前并没有对单帧渲染时间做严格控制,也就是如果渲染时间不稳定,超过了预期的100ms,那么系统整体也会有相应延迟。其次是也没有引入实时机,整体依赖的是工作站的计算机时间。最后就是,作为一个只包含单目前视相机的demo,也没有考虑多路相机时间同步的问题。

  2. RDK X5具有丰富的接口,其中就包括CAN通讯接口。因此后续本系统也可以脱离ROS通讯,扩展成以CAN通讯传递整车信号和控制命令的形式。

  3. RDK X5本身是一个机器人开发套件,因此本文的demo证明了,3DGS相关技术应该也可以很方便地应用到具身智能机器人硬件在环仿真测试中去。

参考链接:

【1】‍https://github.com/GimpelZhang/GaussianRPG

【2】‍https://developer.d-robotics.cc/rdk_doc/RDK

① 自动驾驶论文辅导来啦

68f13606fbec5eed22b5adc33d0d05bc.jpeg

② 国内首个自动驾驶学习社区

『自动驾驶之心知识星球』近4000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知端到端自动驾驶世界模型仿真闭环2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型,更有行业动态和岗位发布!欢迎扫描加入

202ccb5f5e259201ae8a4a75d2528843.png

 ③全网独家视频课程

端到端自动驾驶、仿真测试、自动驾驶C++、BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、CUDA与TensorRT模型部署大模型与自动驾驶NeRF语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

6a40095455cdeb7f4f54388e0275bb3f.png

网页端官网:www.zdjszx.com

④【自动驾驶之心】全平台矩阵

fb3a4edc1341a8e00943017def9396ed.png

### 3DGS技术在自动驾驶中的实现方案 #### 高效的三维场景重建 3D高斯点阵渲染(3DGS)是一种高效的三维场景重建技术,其核心在于通过优化计算资源分配提升复杂场景下的建模效率和精度[^1]。该技术利用高斯分布模型表示空间中的每一个点云数据,从而显著减少传统几何建模所需的存储开销。 #### 动态境模拟 为了满足自动驾驶仿真对动态境的需求,3DGS不仅支持静态物体的精确重建,还能够实时捕捉并呈现移动对象的行为特征。这使得基于仿真的测试更加贴近实际道路状况,有助于提高算法训练的质量[^2]。 #### 数据驱动的方法论 不同于依赖人工设计的传统方式,现代神经网络架构如NeRF (Neural Radiance Fields),以及改进版的3DGS框架采用端到端的数据驱动策略来进行自动化生成逼真图像序列的过程。这种方法极大地缩短了开发周期,并降低了成本投入的同时也增强了系统的适应能力面对不同类型的输入源文件格式转换等问题提供了灵活解决方案。 ```python import numpy as np from scipy.stats import multivariate_normal def generate_gaussian_point(x, y, z, sigma=0.5): """ Generate a Gaussian point cloud centered at (x,y,z). Args: x (float): X-coordinate of the center. y (float): Y-coordinate of the center. z (float): Z-coordinate of the center. sigma (float): Standard deviation for the Gaussian distribution. Returns: ndarray: A set of points sampled from the specified Gaussian distribution. """ mean = [x, y, z] cov = [[sigma ** 2, 0, 0], [0, sigma ** 2, 0], [0, 0, sigma ** 2]] v = multivariate_normal(mean, cov).rvs(1000) return v # Example usage points = generate_gaussian_point(0, 0, 0) print(points[:5]) ``` 上述代码片段展示了如何创建一个简单的三维高斯分布点集,这是构成更复杂的3DGS结构的基础单元之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值