多相机系统通用视觉 SLAM 框架的设计与评估

Design and Evaluation of a Generic Visual SLAM Framework for Multi-Camera Systems

PDF https://arxiv.org/abs/2210.07315
Code https://github.com/neufieldrobotics/MultiCamSLAM
Data https://tinyurl.com/mwfkrj8k

程序设置

主要目标是开发一个与摄像头系统配置无关的统一框架,该框架轻便易用,并能实时运行。

  • 多摄像头模型采用一组广义的摄像头模型,该模型将多个摄像头视为一个统一的成像系统。这种方法的优点是它允许使用单一的数学框架来处理来自不同摄像头的图像,而无需考虑摄像头的具体配置。广义摄像头模型的基本原理是,它将每个摄像头视为一个针孔相机,并使用一个共同的坐标系来表示所有摄像头的图像。这样,可以将来自不同摄像头的图像投影到同一个平面上,并使用相同的算法来处理这些图像。
  • 区分重叠 (OV) 或不重叠 (N-OV) 场景。

  • 摄像头配置根据摄像头的数量和它们之间的 FoV 重叠情况进行区分。

 

(a)评估各种重叠 (OV) 和不重叠 (N-OV) 相机配置。
(b)通用视觉 SLAM 框架的框图,显示了其子模块。
特征提取计算两种类型的特征——多视图内部匹配和常规单目特征。
注意,为了适应通用多摄像头系统,对初始化、跟踪和关键帧表示进行了更改。

前端

SLAM 系统的前端旨在估计机器人在每个时间步长的位姿和观测到的地标。本节讨论了特征提取、初始化、跟踪和建图模块的关键方面,这些方面能与任意的多摄像头系统无缝协作。

A. 特征提取

本文的方法使用两种类型的特征来进行 SLAM:多视图特征和单目特征。

  • 多视图特征: 多视图特征是出现在多个相机图像中的特征。它们可以用来表示场景中的 3D 点。本文的方法首先在所有图像中提取多尺度的 ORB 特征,并将它们分配到一个 2D 网格中。然后,本文的方法在每个独特的相机对之间迭代计算特征对应关系。对于每个相机对,本文的方法只匹配属于重叠区域的特征,以减少计算量。匹配的特征通过极线约束进行验证。从第一对相机创建一组匹配。对于随后的图像对,如果在两个未匹配的特征之间找到对应关系,则将一个新匹配添加到匹配集。如果为已匹配的特征找到匹配,则将新特征添加到现有匹配。
  • 单目特征: 单目特征是只出现在一个相机图像中的特征。它们可以用来表示场景中的 3D 点,但不如多视图特征准确。本文的方法使用具有单个 2D 关键点及其描述符的单目特征来表示非重叠区域。

本文的方法使用这两种类型的特征来构建地图和估计相机位姿。

两个样本多摄像头帧,显示了从(a)重叠OV装置中的前置摄像头以及(b)相同场景中的三个不在重叠N-OV装置中的摄像头中提取的图像特征。彩色点是多视图特征,其中较近的点为红色,较远的点为蓝色。白色点是没有任何 3D 信息的单目特征。注意,N-OV 装置只有单目特征,而 OV 装置在图像的重叠和不重叠区域中分布有单目特征和多视图特征。

B. 初始化

本文使用的是广义相机模型来表示多相机系统,并使用 17 点算法来估计相对姿态。
一般 SLAM 通常使用单应矩阵或基本矩阵来估计相对姿态。
广义相机模型和 17 点算法更适合于处理多相机系统的数据。

C. Tracking and Mapping

在初始化之后,每个传入帧都将相对于最后一个关键帧进行跟踪。通过词袋匹配在最后一个关键帧和当前帧之间计算帧间对应关系。由于多视图特征包含不同相机中的多个描述符,因此使用描述符的中位数进行匹配。如果最后一个关键帧中的地图点与当前帧中的观测值之间找到足够的 3D-2D 匹配, 可以通过找到地图点和当前帧观测值之间的对应关系来估计当前帧的位姿。具体来说,可以通过以下步骤来完成:

  1. 找到地图点和当前帧观测值之间的对应关系。
  2. 使用这些对应关系来计算当前帧观测值的普吕克坐标。
  3. 使用广义 PnP 算法来估计当前帧的位姿。广义 PnP 算法是一种求解相机位姿的算法,它可以处理带有噪声的测量值。
  4. 估计的相机位姿可以用来将地图点投影到当前帧中。如果投影的点与实际观测值匹配良好,则说明估计的相机位姿是准确的,即计算重投影误差。

通俗地说,就是通过找到地图点和当前帧观测值之间的对应关系,然后使用这些对应关系来计算当前帧的位姿,这个过程类似于三角测量,但它使用的是普吕克坐标而不是角度。

PS:

  • 普吕克坐标是一种表示线或平面在空间中的方式。对于一个点,它的普吕克坐标由两个三维向量组成。第一个向量是从相机中心到该点的方向向量,第二个向量是该点上的法向量。
  • 广义 PnP 算法是一种求解相机位姿的算法,它可以处理带有噪声的测量值。要使用广义 PnP 算法,需要提供一组观测值及其对应的普吕克坐标,以及一组地图点的 3D 坐标。广义 PnP 将使用这些信息来估计相机位姿。

如果估计的位姿表明自最后一个关键帧以来存在较大运动,则会以类似于 ORBSLAM 的方式进一步定位当前帧相对于局部地图。查找最初跟踪的地标共享的一组相邻关键帧 K。然后,在 K 中跟踪的地标与当前帧之间计算新的匹配。这使得能够获得局部地图支持,并有助于在存在遮挡动态物体的情况下找到稳定的地标。最后,如果自最后一个关键帧以来跟踪的地标的比率小于某个阈值,则将当前帧插入为一个关键帧。当做出新的关键帧决策时,会将观测值添加到现有地标中,并将与非地图点对应的新帧间匹配进行三角测量以创建新的地图点。

后端

在本文中,后端优化还同时优化了组件相机的外部校准参数。这使得本文的方法可以处理不同的相机配置,并提高多相机系统的定位精度。

后端对应着优化框架,通过极大化给定观测信息,对它们初始估计进行优化。在一个普通的多摄像头系统里,观测信息不仅取决于设备的位姿 X 和地标 L,还取决于观测信息被感知到的摄像头 C。最大后验概率 (MAP) 问题由以下公式给出:
 
其中 P (Z|X, L, C) 是观测信息的似然函数,由于独立同分布的假设而分解成多个单独的概率。

P (x0) 是初始机器人位姿的先验概率。

因子图表示法展示了变量之间的各个概率约束(因子)。

​​​​​​​

多相机后端的因子图,待优化变量为位姿 Xi、地标 lj 和相对相机位姿 Cp,因子显示为黑色方块节点,表示对变量的约束条件。

假设观测信息 zk 服从均值为零的正态分布,且先验也建模为高斯分布,则采用最小二乘法进行优化,具体形式如下所示:

 
其中,测量函数 hk 通过一系列变换将地标映射到预测的观测值 zk 。

懒得手敲推导过程了,直接截图如下。

这个公式很便于对多视角特征进行建模,它为后端提供了灵活性,可以使用不同的摄像头配置,并优化组件摄像机的外部校准参数 C,以及估计轨迹和地标。

实验设置

本节中介绍硬件设置、相机校准以及进行实验评估所需的几个室内和室外数据集的收集情况。

A. 硬件设置和相机校准

使用一个由七台相机组成的刚性多相机设备,其中五台相机朝前,两台相机朝侧面,还有一个惯性测量单元 (IMU),如图所示。


                                                                          图 4
用于收集数据以评估 SLAM 管道的定制多相机设备。图中显示了重叠和不重叠的配置,以及安装在设备上的 IMU。IMU 用于计算连续两个相机之间的基线。连续两个相机之间的基线是 165 毫米。

相机的排列方式考虑了具有重叠 (OV) 和不重叠 (N-OV) 视野范围的配置。朝前的相机(红色虚线框)用于运行单目、双目和重叠多相机设置的实验。朝前的中心相机和朝侧面的相机(蓝色框)用作不重叠多相机设置。

使用 FLIR BlackFly S 1.3 MP 彩色相机,其分辨率为 720 x 540,FOV 为 57°,Vectornav 的 IMU 运行频率为 200 Hz。所有相机都已的硬触发,以便以 20 fps 的速度进行同步捕获。

使用 Kalibr 获取具有重叠 FOV 的相机的内参和外参,并使用校准目标。

对于不重叠的相机,基于目标的校准不起作用,因此需要相机观察静止目标来求解相对变换。
ps:对于不重叠的相机,使用惯性测量单元相机校准来获取它们的位姿。 惯性测量单元相机校准是一种使用惯性测量单元 (IMU) 和相机来估计相机位姿的方法。IMU 可以测量加速度和角速度,而相机可以测量图像。通过结合这两种信息,可以估计相机的位姿关系。

将相机间变换串联在一起,以获得所有相机的位姿,构建一个多相机系统,其中所有相机都具有已知的位姿。

PS:在后端优化过程中同时优化外参估计,这有助于提高多相机系统的精度。

B. 数据集

多相机设备和一台具有 32GB RAM 的戴尔 XPS 笔记本电脑安装在一个 Clearpath Ridgeback 机器人平台上,并沿着东北大学的校园行驶以收集数据。其中一个数据集是使用 NUANCE 自动驾驶汽车在越野环境中收集的。

共收集了六组室内和室外序列。这些序列包括几个具有挑战性但自然的场景,包括狭窄的走廊、没有特征的空间、急促和快速的运动、突然的转弯,以及移动机器人通常在城市环境中遇到的动态物体。

在室外序列中使用 GPS 作为真值。室内序列的真值​​​​​​​是使用 Optitrack 设置获得的,其精度可达毫米级。在无法使用 Optitrack 的情况下,使用视觉标签用于真值和计算漂移。

表 I 中汇总了数据集的详细信息,包括位置、轨迹长度和真值​​​​​​​。

结果

在几个具有挑战性的室内和室外轨迹中展示了定性和定量结果。

对于定量分析,使用绝对平移误差 (ATE),该误差是通过将估计的轨迹与真值对齐并计算相应位姿之间的平均误差获得的,如表 II 所示。

当没有真值轨迹时,使用一个视觉目标来估计机器人的初始和最终位姿并计算累积漂移。

A. 与最先进算法的比较

本节将与 ORBSLAM3(一种流行的稀疏视觉 SLAM 系统)的性能进行比较。

定性结果

图 5:本文通用 SLAM 系统和 ORBSLAM3 对 ISEC Ground1(a) 和 ISEC Lab1 (b) 序列的估计轨迹,在 (b) 中,真值是虚线。
对于 ISEC Ground1 序列 (a),机器人的起始位置和结束位置是相同的,这有助于衡量性能。在双目设置中,本文优于 ORBSLAM3,后者会因沿轨迹遇到的动态对象而导致跟踪不正确。随着增加重叠摄像头的数量,与我们的方法相关的试验显示估计轨迹的准确性有所提高。

图 5(a) 和 5(b) 显示了 ISEC Ground1 和 ISEC Lab1 序列的估计轨迹。ISEC Lab1 轨迹在轨迹的开始和结束时具有 Optitrack 真值(显示为虚线),因为要穿越多个房间。ISEC Ground 轨迹没有真值位姿,但机器人从同一位置开始和结束。请注意,在这两个序列中,本文​​​​​​​在双目模式下优于 ORBSLAM3。在轨迹中的几个地方,由于存在动态特征,ORBSLAM3 在估计的位姿中显示出伪影。由于本文从分布在整个视野中的特征获得了更多支持,并且不局限于匹配的双目特征,因此本文可以更好地处理动态对象。

定量结果

 

表 II:所提出的方法和 ORBSLAM3 相对于不同序列真值的绝对平移误差 (ATE),ORBSLAM3 在双目设置上执行,使用图 4 两个具有最小基线的中心摄像头。
而本文的方法在图 4 重叠 (OV) 和非重叠 (N-OV) 配置上执行。
OV 配置结果显示为绿色,从面向正面的阵列中选择摄像头,从用于 ORBSLAM3 的双目设置开始,并为每次运行添加一个摄像头。
对于图 4 中显示的蓝色框中包含的三个摄像头,测试结果即粉红色的 N-OV 配置,对于 ISEC Ground2 和 Falmouth 序列,没有非重叠数据。

从表 II 中可以观察到,与 ORBSLAM3 相比,在五个数据集中的四个数据集中,本文的方法在双目设置下表现出更高的精度。

虽然对于 ISEC Lab1、ISEC Ground1 和 ISEC Ground2 轨迹来说,误差差异不大,但对于 Curry  Center轨迹来说,差异却很显著,该轨迹更长,并且在东北大学校园里有很多动态内容,人们四处走动。

在 Falmouth 序列中,该序列具有带有干枯树叶的越野户外图像,与双目配置中的 ORBSLAM3 相比,本文的表现很差。

在比较中禁用了 ORBSLAM3 中的回路闭合,以准确计算累积漂移。通过回路闭合,ORBSLAM3 的估计得到了改进。然而,对于像 Falmouth 序列这样非常长的轨迹,观察到即使启用了回路闭合,ORBSLAM3 也无法从累积漂移中恢复过来。

B. 相机配置的影响

除了将本文的方法与最先进的 SLAM 系统进行比较之外,本文还评估并讨论了以下参数对所提出的 SLAM 管道的性能的影响。

准确性
  • 摄像机数量:

在重叠配置中,通过选择一个子集的摄像机来评估本文的方法,并为每次试验增加摄像机数量。我们从基线最小的 2 个摄像机开始,最多增加到前置摄像头阵列中的 5 个摄像机。表 II 显示,在每个序列中,ATE 随着重叠摄像机数量的增加而减小。我们可以在图 5(a)、图 5(b) 和图 6 中显示的轨迹图中看到同样的趋势。随着我们增加摄像机数量,估计的轨迹更接近地面实况。这可以在图 5(b) 中轨迹的放大部分中清楚地观察到。

  • 重叠与非重叠:

将从前置摄像头阵列中选择的一组重叠摄像头与一组朝不同方向的具有相同数量摄像机(N=3)的非重叠摄像机之间的跟踪精度进行比较,如图 4 所示。从表 II 中可以看出,对于具有相同数量摄像机的非重叠配置,误差总是大于重叠配置。这是因为非重叠设置会迅速积累尺度漂移。在 ISEC Lab1 序列中,误差尤其高,该序列具有狭窄的无特征走廊和反光玻璃墙,使侧视摄像头无法用于跟踪。

鲁棒性

​​​​​​​图6:具有大量动态内容的Curry center室外数据的估计轨迹。
星号表示轨迹估计的最终位置。在重叠相机配置中,随着相机数量的增加,SLAM估计的准确性提高,这体现在最终位置的累积漂移上。
突出显示那些因遮挡动态物体而导致的跟踪失败的轨迹上的图像,用红色和蓝色框表示。
非重叠配置在对比相同数量的相机OV配置时显示出尺度问题,但对于动态内容具有鲁棒性。

除了测量准确性之外,本文还研究了不同相机配置下的跟踪鲁棒性。为此,我们在Curry  center序列的多次运行 SLAM仔细观察 ,这是一个大型数据集(597 米),具有大量动态内容,如图 6 所示。这些数据是通过在正常工作日的东北大学校园周围导航机器人来收集的,当时有很多人类活动。图 6 显示了每个相机配置的最佳运行。红色和蓝色框表示我们遇到跟踪失败时轨迹上的位置,并显示了其中一个摄像头获取的相应图像。
在运行中,我们在两摄像头重叠配置中遇到最多的跟踪失败。三摄像头重叠配置中也发生跟踪失败,但不像两摄像头情况那样频繁。
具有 4 个和 5 个摄像机的重叠配置成功运行,非常紧密地相互跟随。
非重叠 3 摄像头配置在存在动态对象时不会失败,因为当一个视图被遮挡时,它有其他视图的支持来跟踪特征。然而,轨迹估计不准确,并且表现出严重的尺度误差

C. 运行时性能

表III:本文方法的运行时间性能。我们展示了pipiline中不同步骤的平均耗时:特征提取、跟踪和建图、优化以及每帧的总时间。处理时间明显随着相机数量的增加而增加。我们可以在五个相机的配置下以11 fps的速度运行,这接近实时。

通过测量处理单个多摄像头帧的平均时间来结束评估。表 III 显示了 Curry  center中各种相机配置的平均时间。分别以毫秒为单位报告了特征提取、跟踪和映射、后端优化模块以及每个帧的总处理时间的单独处理时间。结果表明,正如预期的那样,重叠配置中处理时间随着摄像头数量的增加而增加,因为我们在前端组件摄像头之间计算多视图特征时增加了额外负担。后端的计算负载也因观测值的增加而增加。

对于双目配置,我们可以最高实现 19.1 fps 的处理速度,对于重叠配置中的五个摄像头,我们可以实现最低 11.45 fps 的处理速度。

结论

提出了一种通用的多摄像头 SLAM 框架,可以适应任何任意相机系统配置。
本文的核心贡献是相机配置独立的设计和完整 SLAM 的实时实现。
利用相机几何形状提取分布良好的多视图特征,通过有效利用摄像头之间的重叠视场来实现。

对使用定制摄像头装置收集的包含各种挑战性条件的真实世界数据集进行了广泛的评估。

还根据定义相机配置的摄像头数量和重叠信息来对 SLAM 管道的性能进行基准测试。此分析可用于设计用于准确和鲁棒 SLAM 的多摄像头系统。

这项工作解决了最先进的视觉 SLAM 算法与其在多摄像头系统实际部署中的适用性之间的差距。

我们将代码和数据集公开,以促进这一方向的研究。

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

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

相关文章

极智项目 | 实战Pytorch戴口罩检测

欢迎关注我的公众号 [极智视界],获取我的更多项目分享 大家好,我是极智视界,本文来介绍 实战 Pytorch 戴口罩检测项目。 本文介绍的 实战 Pytorch 戴口罩检测项目,提供完整的可以一键执行的项目工程源码,获取方式有两…

Diary26-Vue综合案例1-书籍购物车

Vue综合案例1-书籍购物车 案例要求: 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

网络爬虫之多任务数据采集(多线程、多进程、协程)

进程&#xff1a;是操作系统中资源分配的基本单位 线程&#xff1a;使用进程分配的资源处理具体任务 一个进程中可以有多个线程&#xff1a;进程相当于一个公司&#xff0c;线程就是公司里面的员工。 一 多线程 多线程都是关于功能的并发执行。而异步编程是关于函数之间的非…

C语言——最古老的树

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 缺乏明确的目标&#xff0c;一生将庸庸…

drf知识--02

APIView执行流程分析 源码分析&#xff1a; # 1 在路由中&#xff1a;path(books/, views.BookView.as_view()),请求来了 # 2 先看 as_view()---->APIView的 as_view---》as_view执行结果跟之前一样&#xff0c;去除了csrf认证classmethoddef as_view(cls, **initkwargs):vi…

C# WPF上位机开发(文件对话框和目录对话框)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 一个上位机软件在处理数据的时候&#xff0c;除了配置文件、数据文件之外&#xff0c;一般还需要使用选择对话框进行文件和目录的选取。如果不这样…

20231222给NanoPC-T4(RK3399)开发板的适配原厂Android10的挖掘机方案并跑通AP6398SV

20231222给NanoPC-T4(RK3399)开发板的适配原厂Android10的挖掘机方案并跑通AP6398SV 1、简略步骤&#xff1a;rootrootrootroot-X99-Turbo:~/3TB/3399-android10$ cat Rockchip_Android10.0_SDK_Release.tar.gz0* > Rockchip_Android10.0_SDK_Release.tar.gz rootrootrootro…

C++进阶-继承

继承 一、继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域3.1 同名成员变量3.2 同名成员函数 四、派生类的默认成员函数五、继承与友元六、继承与静态…

Leetcode—43.字符串相乘【中等】

2023每日刷题&#xff08;六十八&#xff09; Leetcode—43.字符串相乘 算法思想 实现代码 class Solution { public:string multiply(string num1, string num2) {int len1 num1.size(), len2 num2.size();string ans;int end1 len1 - 1, end2 len2 - 1;int arr[len1 l…

、写入Shellcode到注册表上线

其实本质就是将shellcode写入到注册表中&#xff0c;然后读取注册表中的shellcode&#xff0c;然后创建线程去执行shellcode。 如下图: 写入注册表shellcode 这里将shellcode写入到注册表中&#xff0c;在我们需要的时候再去读取然后执行。 这里用到如下两个Windows API函…

福FLUKE禄克8808A数字多用表

福禄克8808A&#xff0c;用于制造、研发、维修等应用的多功能数字表&#xff0c;FLUKE 8808A 5.5位数字多用表可以完成当今众多常用的测量工作。无论是功能测 展开 福禄克8808A&#xff0c;用于制造、研发、维修等应用的多功能数字表&#xff0c;FLUKE 8808A 5.5位数字多用表可…

【音视频】remb twcc原理

目录 twcc简介 WebRTC REMB 参考文档 twcc简介 TWCC全称是Transport wide Congestion Control&#xff0c;是webrtc的最新的拥塞控制算法。其原理是在接收端保存数据包状态&#xff0c;然后构造RTCP包反馈给发送端&#xff0c;反馈信息包括包到达时间、丢包状态等&#xff…

室内导航技术在智慧医疗的革新应用

随着科技的飞速发展&#xff0c;智慧医疗已经成为现代医疗服务的重要组成部分。在这个背景下&#xff0c;室内导航技术逐渐崭露头角&#xff0c;为智慧医疗建设带来了革命性的改变。本文将深入探讨室内导航技术在智慧医疗中的应用&#xff0c;并分析其为医疗服务带来的诸多便利…

vue:ref的作用和实例

定义&#xff1a;用来获取元素或子组件注册或者引用信息&#xff0c;父组件通过$ref获取到相应的DOM对象和子组件 1、vue中ref的作用 获取页面的DOM元素获取子组件的对象&#xff08;也是一种通信方式&#xff09; 2、实例 1、获取DOM&#xff0c;首先创建一个父页面index然…

如何自定义右键弹框并实现位置自适应?

一、问题 右键显示弹框&#xff0c;但是靠近浏览器边缘的部分会被隐藏&#xff0c;需要实现弹框位置自适应 二、 问题分析 如果想要最终弹框的宽高不超过屏幕视口&#xff0c;就等于屏幕视口的总宽/高减去弹框打开时的起点坐标&#xff0c;剩下的部分大于等于弹框的宽/高&…

商家如何进行商业模式开发,助力产品更好的销售模式?

商家如何进行商业模式开发&#xff0c;助力产品更好的销售模式&#xff1f; 随着各类电商平台的疯狂崛起&#xff0c;越来越多的商家对其中带来的高额回报率产生心动&#xff0c;毕竟对于线上的场景来说&#xff0c;即省去了房租、水电、仓储以及其他各种费用&#xff0c;用电商…

vue3 + TypeScript使用国际化

vue3 TypeScript使用国际化 本文使用了 Vite 构建工具创建的vue3项目Vite 支持使用特殊的 import.meta.glob 函数从文件系统导入多个模块Vite 官方中文文档当然如果你的vue3项目未使用vite,你也可以为你的旧项目提提速&#xff0c;安装vite &#xff0c;安装方法在上一个博客…

【华为数据之道学习笔记】6-5数据地图的核心价值

数据供应者与消费者之间往往存在一种矛盾&#xff1a;供应者做了大量的数据治理工作、提供了大量的数据&#xff0c;但数据消费者却仍然不满意&#xff0c;他们始终认为在使用数据之前存在两个重大困难。 1&#xff09;找数难 企业的数据分散存储在上千个数据库、上百万张物理表…

汽车行业一些知识

一、汽车术语集合 1、 轴距(mm)&#xff1a;汽车前轴中心至后轴中心的距离。 2、转弯半径(mm)&#xff1a;汽车转向时&#xff0c;汽车外侧转向轮的中心平面在车辆支撑平面上的轨迹圆半径。转向盘转到极限位置时的转弯半径为最小转弯半径。 3、最大总质量(kg)&#xff1a;汽…

动态数组的实现

定义 1. 在计算机科学中&#xff0c;数组是由一组元素&#xff08;值或变量&#xff09;组成的数据结构&#xff0c;每个元素有至少一个索引或键来标识。 2. 因为数组内的元素是连续存储的&#xff0c;所以数组中元素的地址&#xff0c;可以通过其索引计算出来。 3. 知道了数…