基于视觉的语义匹配见多了,那基于雷达的呢?
论文题目:
LiDAR-based HD Map Localization using Semantic Generalized ICP with Road Marking Detection
论文作者:
Yansong Gong, Xinglian Zhang, Jingyi Feng, Xiao He and Dan Zhang
作者单位:北京驭势科技有限公司
导读:
本文为驭势科技最新的车辆定位算法论文,介绍了一种使用广义语义ICP和道路标记检测的基于激光雷达的高精地图定位方法,并且在现实世界场景中进行了大量实验,证明了该方法的有效性和鲁棒性。©️【深蓝AI】编译
1.摘要
在GPS信号不可用的场景下,强大的环境感知与定位系统对于自动驾驶而言变得至关重要。本文提出了一种基于激光雷达的在线定位系统,该系统融合了道路标记检测以及在高精地图上的配准功能。该系统使用了一种具备实时性能的道路标记检测方法,其中首先引入了一种自适应分割技术来提取与道路标记相关的高反射率点,从而提升实时处理的效率。接着,通过汇总历史激光雷达扫描数据,构建了一个时空概率局部地图,提供了一个密集的点云。最终,生成了一个激光雷达鸟瞰图(LiDAR Bird’s-Eye View, LiBEV)图像,并利用实例分割网络对道路标记进行精确标注。针对道路标记的配准,设计了一种SG-ICP(Semantic Generalized Iterative Closest Point, SG-ICP)算法。线性道路标记被建模为嵌入在二维空间中的1维流形,缓解了沿着线性方向约束的影响,解决了欠约束问题,并且在HD地图上实现了比传统的ICP算法更高的定位精度。在真实世界环境中进行了大量实验,证明了本文系统的有效性和鲁棒性。
2.介绍
精准定位在自动驾驶研究中至关重要,尽管GPS是露天环境下的主要定位技术,但在信号受阻时(如高架桥下)会变得不稳定。因此,使用摄像头和LiDAR等传感器的环境感知就成了处理问题的关键,尤其在GPS受限区域。道路标记检测是确保稳定感知的核心技术,它通过关联标记与高精地图来估算车辆位置。
摄像头因其丰富的环境纹理信息而广泛用于道路标记识别,但受光照变化和鸟瞰视图失真影响。LiDAR则较少受光照影响,提供精确的3D环境模型,且可从高反射材料中提取道路标记,但需平衡点云密度与实时处理需求。
图1|在高精地图上的定位效果和检测到的道路标志©️【深蓝AI】编译
为了应对上述视觉匹配的难点和挑战,本作研究者提出了一种基于LiDAR的实时道路标记检测与地图配准方法,如图1所示,(a)板块是本文的方法中高精地图定位被可视化展示,其中车辆定位的轨迹用绿色标记,而车辆当前的姿态由一个红色立方体表示。蓝色的点云代表来自单帧激光雷达数据的地面点。这些地面点通过自适应分割来识别高反射点。随后,它们通过连续的数据帧汇聚形成更密集的点云。最后,应用语义分割获得语义点云,然后将其与高精地图配准,以估计车辆的姿态。(b)板块则为使用本文的方法提取的道路标记被可视化展示,包括虚线车道、实线车道、停车线、文字、箭头、菱形标志、三角标志、路缘石以及人行横道。本文的主要贡献有:
●提出了基于LiDAR的道路标记检测方法,用于在线环境感知,其中通过自适应分割高反射率点和更新时空概率局部地图来平衡点密度和实时性能。最终生成LiBEV图像,使用实例分割网络在LiBEV图像上能够准确检测出9种不同类型的道路标记。
●提出了一个新的道路标记配准算法,用于在HD地图上定位自动驾驶车辆,其中线性道路标记被表示为嵌入在二维空间中的1维流形。这种表示法可以为配准问题提供一个稳健且准确的解决方案,对欠约束维度的影响最小。与传统的ICP相比,SG-ICP实现了更高的定位精度。
●在真实世界场景中进行了全面的实验,展示了本文系统的实时性能和定位精度。实验结果表明,该方法适用于各种类型的LiDAR传感器,以及在不同的车速和天气条件下表现出的鲁棒性。
3.相关工作
在城市NOA领域,道路标记检测凭借其对车辆导航的引导作用成为环境感知的核心。激光雷达因能高效区分逆反射材料制成的标记与普通路面而成为主流检测工具,其原理在于标记物对近红外激光脉冲有较高反射率。此技术广泛用于构建高精地图,通过离线聚合高密度点云来详尽描绘环境,但处理速度慢,不适于实时应用。
实时检测中,单次激光雷达扫描的强度数据经阈值分割用于识别标记,如AnnieWAY在DARPA挑战中所展示。极坐标网格和改进的Otsu阈值算法也被用于标记检测,但单次扫描的稀疏性使检测结果不够稳定。多帧累积技术改善了这一点,通过固定阈值提取车道标记,且后续研究扩展至更多高反射目标,提升定位精度。然而,固定阈值策略在变动态势下表现欠佳。
近年来,深度学习在道路标记检测中崭露头角。LLDN-GFC等方法利用点云的车道线特征,如空间分布特性,优化了检测过程并降低计算需求。尽管如此,其专注车道线而忽略其他标记的局限性,可能影响车辆定位的全面性,特别是在横向约束方面存在潜在缺陷。
4.本文算法
针对先前研究中确定的局限性,本文提出了一种基于LiDAR的道路标记检测系统,用于实时环境感知。此外,本文还引入了一种新的道路标记配准算法,以提高使用高精地图的自动驾驶汽车的定位准确性。本文算法的流程图如图2所示。
图2|本文算法的流程图©️【深蓝AI】编译
4.1 基于激光雷达的实时道路标线检测
◆高反射点分割:
此处理旨在适应性地识别高反射率的点,这些点通常与使用逆反射材料涂绘的道路标线相关联。为了确保在不同传感器和场景下都能适用,本文引入了一种自适应分割方法,专门设计用于提取高反射率的点,以构建一个更加稳健的系统。
该方法基于高度信息对地面点进行分割,并通过部分拟合地面平面来提取它们。随后,引入了一个分割系数 ρ k \rho_k ρk来区分第 k k k次扫描中的高反射率点。具体而言,强度低于 ρ k \rho_k ρk的点将从扫描中排除。值得注意的是,分割系数 ρ k \rho_k ρk并非人为预设,通过卡尔曼滤波器动态估计并持续更新,状态转移模型为:
ρ k = ρ k − 1 + w k , ( 1 ) \rho_k = \rho_{k-1} + w_k, \qquad (1) ρk=ρk−1+wk,(1)
其中 w k ∼ N ( 0 , Q k ) w_k \sim N(0, Q_k) wk∼N(0,Qk)是过程噪声。测量模型则由下式给出:
z k = ρ k + v k , ( 2 ) z_k = \rho_k + v_k, \qquad (2) zk=ρk+vk,(2)
其中 v k ∼ N ( 0 , R k ) v_k \sim N(0, R_k) vk∼N(0,Rk)是测量噪声。在每次激光雷达扫描中,计算地面点强度的均值 μ k \mu_k μk和方差 σ k \sigma_k σk。然后测量值确定为 z k = μ k + 2 σ k z_k = \mu_k + 2\sigma_k zk=μk+2σk。
该自适应方法基于两点假设以确保其在城市道路环境中的有效性:
1)相邻路段的分割系数相似,源于地面材质一致性。
2)大部分激光雷达点反映普通路面,而路标点有更高强度。
聚焦高反射点优化效率,剔除无关数据,减轻计算负担。
◆概率局部地图更新:
为了实现实时性,引入了一种新的概率局部地图更新方法。该方法采用概率性丢弃策略,其中地图上的每个点都会基于计算出的概率值被选择性地移除。分配给局部地图中第 i i i个点的概率,记作 p i p_i pi,通过下式计算:
p i = 1 1 + ( ∣ k − k i ∣ η ) 2 ( 3 ) p_i = \frac{1}{1 + \left(\frac{|k - k_i|}{\eta}\right)^2} \qquad (3) pi=1+(η∣k−ki∣)21(3)
其中 k k k表示当前帧的索引,而 k i k_i ki代表第 i i i个点源自的帧数。是一个人工设定的参数,用于确定丢弃旧点的概率。当 η \eta η增大时,旧点更可能被保留,从而在概率局部地图中形成更高的点密度。
从公式3可以看出,激光雷达传感器新观察到的点被赋予较高的保留概率值。这种策略保证了时空一致性,缓解了时间累积误差。此外,与使用固定窗口内扫描的聚合方法相比,本文方法确保了局部地图数据更为平滑的过渡。
◆LiDAR 增强视图(LiBEV)图像生成:
生成LiBEV图像时,局部地图被分割为网格,各网格代表图像像素;RGB值基于色彩映射和点云强度确定。采用CenterMask网络精确分割LiBEV图像中的道路标记,接着从对应网格提取点,形成语义点云。此法支持9类标记,如虚线、实线、文字等,提升地图匹配定位的稳定性。语义分割图像比点云标注便捷,利于实际部署。
4.2 基于SG-ICP的高精地图(HD Map)道路标记配准
在SG-ICP中,道路标记按特性分为线、线段与其他三类。实线车道与路缘无明确端点,归为线;虚线、人行道等有端点,属线段;非线性分布的文字、箭头等标记为其他。线因无端点而在线性方向约束缺失;线段的端点虽提供约束,但端点误差影响配准精度;线性标记需减小其对姿态估计的影响,以缓解约束不足。非线性分布的其他标记则自然提供充足约束。本算法统一处理三类标记的配准,采用GICP目标函数。
广义迭代最近点(GICP)算法将概率模型融入优化过程中,定义如下:
T ∗ = arg min T ( ∑ i = 1 n ( q m i − T ⋅ q L i ) T ( C m i + R C L i R T ) − 1 ( q m i − T ⋅ q L i ) ) ( 4 ) T^* = \underset{T}{\arg\min} \left( \sum_{i=1}^{n} (q_{mi} - T \cdot q_{Li})^T (C_{mi} + R C_{Li} R^T)^{-1} (q_{mi} - T \cdot q_{Li}) \right) (4) T∗=Targmin(i=1∑n(qmi−T⋅qLi)T(Cmi+RCLiRT)−1(qmi−T⋅qLi))(4)
其中 q m i q_{mi} qmi和 q L i q_{L_i} qLi分别代表一对对应的点,前者属于高精地图元素,后者属于标记的点云。这些对应点是通过ICP算法中的最近邻搜索策略建立的。 C m i C_{mi} Cmi和 C L i C_{L_i} CLi分别表示来自地图和标记点云的点的协方差矩阵,它们在本文的语义GICP(SG-ICP)算法中被适当地构建,以缓解欠约束方向的影响。
在本文的SG-ICP算法中,概率模型是通过利用语义道路标记内在的语义和几何属性专门设计的。对于位于第 i i i个检测到的道路标记实例上的点,协方差矩阵 C ~ L i \tilde{C}_{Li} C~Li被估计为:
C ~ L i = 1 n i − 1 ∑ j ( p L ( i , j ) − p ~ L i ) ⋅ ( p L ( i , j ) − p ~ L i ) T ( 5 ) \tilde{C}_{Li} = \frac{1}{n_i - 1} \sum_{j} (p_{L(i,j)} - \tilde{p}_{Li}) \cdot (p_{L(i,j)} - \tilde{p}_{Li})^T\qquad(5) C~Li=ni−11j∑(pL(i,j)−p~Li)⋅(pL(i,j)−p~Li)T(5)
其中 p L ( i , j ) p_{L(i,j)} pL(i,j)表示第 i i i个道路标记实例的第 j j j个点, p ~ L i \tilde{p}_{Li} p~Li表示这些点的质心。接着,对 C ~ L i \tilde{C}_{Li} C~Li进行奇异值分解(SVD)。
C ~ L i = U i Σ ~ i V i T , Σ ~ i = [ σ 1 2 0 0 σ 2 2 ] ( 6 ) \tilde{C}_{Li} = U_i \tilde{\Sigma}_i V_i^T, \tilde{\Sigma}_i = \begin{bmatrix} \sigma_1^2 & 0 \\ 0 & \sigma_2^2 \end{bmatrix}\qquad(6) C~Li=UiΣ~iViT,Σ~i=[σ1200σ22](6)
σ 1 \sigma_1 σ1和 σ 2 \sigma_2 σ2满足 σ 1 ≥ σ 2 \sigma_1 \geq \sigma_2 σ1≥σ2。然后,构建矩阵 Σ i = diag ( 1 , ϵ ) \Sigma_i = \text{diag}(1, \epsilon) Σi=diag(1,ϵ),其中满足:
ϵ = { 1 e − 6 , 如果标记被分类为线条; 1 e − 1 , 如果标记被分类为线段; 1 , 如果标记被分类为其他。 ( 7 ) \epsilon = \begin{cases} 1e-6, & \text{如果标记被分类为线条;} \\ 1e-1, & \text{如果标记被分类为线段;} \\ 1, & \text{如果标记被分类为其他。} \end{cases} (7) ϵ=⎩ ⎨ ⎧1e−6,1e−1,1,如果标记被分类为线条;如果标记被分类为线段;如果标记被分类为其他。(7)
这三种道路标记类别具有不同的 ϵ \epsilon ϵ值,代表着沿直线方向的不同约束程度。 ϵ \epsilon ϵ的值越接近1.0,表示沿直线方向的约束越强。与第 i i i个道路标记对应的最终协方差矩阵可以通过以下方式计算:
C L i = U i Σ i V i T ( 8 ) C_{Li} = U_i \Sigma_i V_i^T\qquad(8) CLi=UiΣiViT(8)
在高精地图中的第 i i i个语义元素表示为 { v m i , l m i , P m i } \{v_{mi}, l_{mi}, P_{mi}\} {vmi,lmi,Pmi},其中 v m i v_{mi} vmi, l m i l_{mi} lmi和 P m i = { p m ( i , j ) , j = 1 , 2 , … , n m i } P_{mi} = \{p_{m(i,j)}, j = 1, 2, \ldots, n_{mi}\} Pmi={pm(i,j),j=1,2,…,nmi}分别表示主要方向、语义标签和地图元素的点集。将基向量 e 1 = [ 1 , 0 ] T e_1 = [1, 0]^T e1=[1,0]T旋转到方向 v m i v_{mi} vmi的旋转矩阵可以按以下方式计算:
R v i = cos ( θ ) I + ( 1 − cos ( θ ) ) r r T + sin ( θ ) [ r ] × ( 9 ) R_{vi} = \cos(\theta)I + (1 - \cos(\theta))rr^T + \sin(\theta)[r]_\times\qquad(9) Rvi=cos(θ)I+(1−cos(θ))rrT+sin(θ)[r]×(9)
其中
r = [ e 1 ] × v m i , θ = arccos ( e 1 T v m i ) ( 10 ) r = [e_1]_\times v_{mi}, \quad \theta = \arccos(e_1^T v_{mi})\qquad(10) r=[e1]×vmi,θ=arccos(e1Tvmi)(10)
符号 [ r ] × [r]_\times [r]×表示与向量 r r r关联的反对称矩阵。与第 i i i个语义元素对应的协方差矩阵由以下方式计算:
C m i = R v i Σ i R v i T ( 11 ) C_{mi} = R_{vi} \Sigma_i R_{vi}^T\qquad(11) Cmi=RviΣiRviT(11)
最后,可以在语义点云和共享相同语义标签的地图元素的最近点之间建立关联。
5.实验
5.1 实验配置
实验基于NVIDIA Jetson AGX Xavier平台,激光雷达采样率10Hz,利用RTK获取并同步车辆定位数据作为真值。图3示出实验场景及对应高精地图,包括两个房山城市区域(总面积0.30km x 0.25km,全长2.0km)、嘉善测试场0.20km内部道路及机场4.0km路段。方法参数中,卡尔曼滤波器的状态转移与测量模型初试方差设为0.1和2.0,点丢弃概率参数定为50.0。
图3|实验场景(上方)及其对应的高精地图(下方)。(a) Fangshan1 (b) Jiashan © Fangshan2 (d) Airport©️【深蓝AI】编译
5.2 道路标记检测评估
本小节通过精确度和召回率指标评估了道路标记检测方法的性能。实验中,80%的手动标注LiBEV数据用于训练,剩余20%用于测试。手动注解作为真实值,用于评估检测方法的精确度和召回率。当检测实例与标注实例的交并比(IoU)超过0.5且共享同一语义标签时,判定为真阳性;反之,未找到匹配实例则为假阳性,而未检测到真实存在的实例为假阴性。
表I|本文方法支持的所有类型道路标记的精确度、召回率和F1分数©️【深蓝AI】编译
表I概览了9类道路标记检测的精确度、召回率与F1分数,证实了方法对典型道路特征高精度识别的能力。尽管路缘和人行横道的精确度稍逊,受其与车道线视觉相似性的限制,但HD地图配准有效抑制了误检影响。该方案不仅成效显著,且运行高效,满足实时车辆感知需求,详述见D节。
5.3 定位性能评估
SG-ICP算法通过横向、纵向及偏航误差评估,跨八组实验序列,涵盖四场景七配置,彰显其适应性。对比通用ICP算法(表II),SG-ICP多数序列表现更优,尤其在侧向与偏航精度上,得益于其对充分约束方向的强化处理。
图4|使用由RTK提供的真实轨迹,对比了SG-ICP和ICP估计的轨迹©️【深蓝AI】编译
图4展示了基于SG-ICP和基于ICP两种方法估计的轨迹与通过RTK获取的真实值的对比可视化。值得注意的是,SG-ICP和ICP的显著定位误差分别用紫色和红色线条标记,其中估计距离误差超过2.0米或偏航误差超过5.0度。从图4可以看出,在所有序列中,SG-ICP相较于ICP显著减少了大量定位误差的发生。
表II|与通过RTK获得的真实值相比的平均定位误差©️【深蓝AI】编译
总的来说,所提出的方法在多种环境场景和不同类型激光雷达传感器下实现了厘米级的横向定位精度。测试的传感器包括VLP-32C、Hesai-Pandar64和Hesai-XT16传统机械激光雷达,还包括HAP固态激光雷达。全面说明了该方法在不同场景和传感器类型下的鲁棒性和适应性。此外,如表II所示,纵向误差略大于横向误差,这一点值得关注。在自动驾驶发生的城区道路场景中,大部分道路标记沿纵向呈线性形状。尽管如此,本文的方法保证了纵向误差保持在0.20米以下,确保了其在自动驾驶应用中的有效性。
5.4 运行时间评估
在八个序列进行的实验中,本文方法每个子步骤的运行时间在表III中,箱型图可在图5中。值得注意的是,检测子步骤的运行时间分为CPU时间和GPU时间。CPU时间指的是CPU处理步骤所消耗的时间,包括高反射点分割、概率局部地图更新和LiBEV图像生成。GPU时间指的是LiBEV图像实例分割的推断时间。配准子步骤仅由CPU处理。可以看到,当使用车载处理器XAVIER时,整个方法的平均运行时间和最大运行时间在各种场景和激光雷达传感器类型下始终低于50毫秒和200毫秒。
图5|一个箱线图,说明了所提出方法中每个子步骤的时间消耗情况©️【深蓝AI】编译
表III|所提出方法中每个子步骤的运行时间©️【深蓝AI】编译
此外,值得一提的是,在S1序列上的运行时间仅比S2序列长8.35毫秒,尽管S1的数据量是S2的两倍(如表II的激光雷达类型列所示)。说明运行时间并没有随着点云数据量的增加而线性增长,因为通过概率丢弃策略,聚合局部地图点的数量大幅减少。
5.5 鲁棒性评估
为了测试鲁棒性,本文在不同的车速下评估了定位误差,如表IV所示。在Fangshan1场景中,使用1台Hesai-Pandar64激光雷达,车辆分别以20、40和60公里/小时的速度行驶。然后,将得到的结果与RTK提供的真实值进行对比。
表IV|不同速度的定位误差©️【深蓝AI】编译
如表IV所示,尽管随着更高的驾驶速度,定位误差略有上升,但本文方法始终保持较高的定位精度水平。这证明了该方法在不同车辆速度下的鲁棒性。关于实时性能,如表IV所示,整体系统运行时间几乎不受车速增加的影响,表明了系统在处理车速变化时的鲁棒性。
图6|直方图展示了在Fangshan1场景中,(a)晴天和(b)雨天的激光雷达强度分布情况©️【深蓝AI】编译
图7|在Fangshan1场景中,(a)晴天和(b)雨天的LiBEV图像。像素颜色基于强度值,其中绿色代表高强度,红色代表低强度©️【深蓝AI】编译
表V|在不同路面条件下的定位误差©️【深蓝AI】编译
为了展示不同天气条件下的鲁棒性,本文在不同环境下进行了实验。如图6所示,干路面和湿路面上雷达点云的强度分布(晴天和雨天)表现出显著差异。因此,雨天对基于强度的道路标记提取构成重大挑战,尤其是对于依赖固定强度阈值的方法。图7展示了在晴天和雨天条件下生成的LiBEV图像。很明显,本文方法即使在由不同天气条件引起的不同的强度分布情况下,也能持续提供稳定和准确的分割结果。表V呈现了在Fangshan1场景中,使用1台Hesai-Pandar64激光雷达,在干地和湿地面上定位误差的对比。尽管在湿地上定位误差增加,但仍能确保平均横向误差在0.10米以内,纵向误差在0.20米以内。这些结果证明了本文方法在不同天气条件时的鲁棒性。
6.结论
本文介绍了一种基于激光雷达的在线环境感知与定位系统,利用自适应分割技术提高道路标记检测的效率,并设计了SG-ICP来实现语义信息的配准,再城市环境中的大量实验说明了该系统的有效性和鲁棒性。然而,本文的方法无法应用于地面无道路标记的道路上。在未来的工作中,本文将探索有效利用地面以上信息的方法,以提高定位的鲁棒性。
编译|蒙牛二锅头
审核|Los
移步公众号【深蓝AI】,第一时间获取自动驾驶、人工智能与机器人行业最新最前沿论文和科技动态👇
深蓝AI·赋能AI+智驾+机器人
相关文章:

基于视觉的语义匹配见多了,那基于雷达的呢?
论文题目: LiDAR-based HD Map Localization using Semantic Generalized ICP with Road Marking Detection 论文作者: Yansong Gong, Xinglian Zhang, Jingyi Feng, Xiao He and Dan Zhang 作者单位:北京驭势科技有限公司 导读ÿ…...

01、爬虫学习入门
爬虫:通过编写程序,来获取获取互联网上的资源 需求:用程序模拟浏览器,输入一个网址,从该网址获取到资源或内容 一、入门程序 #使用urlopen来进行爬取 from urllib.request import urlopen url "http://www.ba…...

我与C语言二周目邂逅vlog——6.文件操作
1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久…...

Hugo 部署与自动更新(Git)
文章目录 Nginx部署Hugonginx.confhugo.conf Hugo自动更新Hugo自动更新流程添加访问令牌添加web hookrust实现自动更新接口 Nginx部署Hugo nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;even…...

HTTP代理揭秘:这些场景你都用对了吗?
HTTP代理是网络中常见的一种工具,可以帮助我们提升网络安全性和隐私保护,优化网络访问速度。本文将详细介绍什么是HTTP代理及其适用的场景。 HTTP代理是介于客户端(如浏览器)和服务器之间的中间服务器。它接收客户端的HTTP请求&a…...
电动汽车充电技术及运营知识问答pdf
电动汽车充电技术及运营知识问答 作者:马银山编著 出版社:北京:中国电力出版社 ISBN:9787512320406 资源大小:16.99MB 目录: http://literalink.top/resource/detail/7181601144102195200 第一章 电动汽车基本知识 1 1-1什么是电动汽车? 11-…...

playbooks 分布式部署 LNMP
1、环境配置 ansible 服务器 192.168.10.10nginx 服务器 192.168.10.20mysql 服务器 192.168.10.21php 服务器 192.168.10.22 2、安装 ansble #192.168.10.10节点 yum install -y epel-release #先安装 epel 源 yum install -y ansible配置主机清单 …...

成为git砖家(8): 使用 git log 查询范围内的 commit
文章目录 1. 查询 git log 的文档2. 不带任何参数: git log 啥意思?3. git log 最主要功能是什么?4. git log <commit1>..<commit2> 什么意思5. 查看最近n次commit6. References 1. 查询 git log 的文档 git help log --web市面上针对 git …...

Win10出现错误代码0x80004005 一键修复指南
对于 Windows 10 用户来说,错误代码 0x80004005 就是这样一种迷雾,它可能在不经意间出现,阻碍我们顺畅地使用电脑。这个错误通常与组件或元素的缺失有关,它可能源自注册表的错误、系统文件的损坏,或者是软件的不兼容。…...

C++ 基础(类和对象下)
目录 一. 再探构造函数 1.1. 初始化列表(尽量使用列表初始化) 二. static成员 2.1static成员初始化 三.友元 3.1友元:提供了⼀种 突破类访问限定符封装的方式. 四.内部类 4.1如果⼀个类定义在另⼀个类的内部,这个内部类就叫…...
java RestClientBuilder es 集群 鉴权
在Java中使用RestClientBuilder连接到Elasticsearch集群并进行鉴权,可以通过设置HttpHosts、RequestConfig以及添加相应的Header来实现。 以下是一个示例代码: import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.htt…...
【OpenCV】中saturate_cast<uchar>的含义和用法是什么?
saturate_cast<uchar>主要是为了防止颜色溢出操作(0~255) if(data<0) data0; elseif(data>255) data255;...

【数据结构】哈希表二叉搜索树详解
💎 欢迎大家互三:2的n次方_ 💎所属专栏:数据结构与算法学习 🍁1. 二叉搜索树 二叉搜索树也称为二叉查找树或二叉排序树,是一种特殊的二叉树结构,它的特点是: 1. 若左树不为空&am…...
【SpringBoot】参数传递之@ModelAttribute
ModelAttribute标注的方法会在Controller类的每个映射URL的控制执行方法之前执行。 ModelAttribute public void findUserById(PathVariable("userId") Long userId,Model model){ model.addAttribute("user",userService.findUserById(userId)); } GetM…...

frp搭建ssh内网穿透
frp软件包下载 检查外网服务器架构 uname -i官网下载对应的版本 https://github.com/fatedier/frp/releases 使用wget或拷贝文件到外网服务器/opt目录下并解压 解压得到frp_0.59.0_linux_amd64文件夹 tar -zxvf frp_0.59.0_linux_amd64.tar.gzfrpc 这是 frp 的客户端可执…...
OpenCV库学习之cv2.normalize函数
OpenCV库学习之cv2.normalize函数 一、简介 cv2.normalize是OpenCV库中的一个函数,用于对图像进行归一化处理。归一化是一种线性变换,可以将图像像素值的范围缩放到指定的区间。这种操作在图像处理中非常有用,特别是在需要将图像数据用于某些…...
LINUX操作系统安全
一、概述内容 操作系统负责计算机系统的资产管理,支撑和控制各种应用程序运行,为用户提供管理计算机系统管理接口。操作系统也是构成网络信息系统的核心关键组件,其安全可靠性决定了计算机系统的安全性和可靠性。 操作系统安全是指满足安全…...

vue3.0学习笔记(三)——计算属性、监听器、ref属性、组件通信
1. computed 函数 定义计算属性: computed 函数,是用来定义计算属性的,计算属性不能修改。 计算属性应该是只读的,特殊情况可以配置 get set 核心步骤: 导入 computed 函数 执行函数 在回调参数中 return 基于响应…...
Elasticsearch面试三道题
针对Elasticsearch的面试题,从简单到困难,我可以给出以下三道题目: 1. Elasticsearch的基本概念与优势 问题:请简要介绍Elasticsearch是什么,并说明它相比传统数据库的优势有哪些? 答案: El…...
大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)
目录 Linux 系统调用的过程,中间发生了什么? 表格总结 Linux 中断流程,谈谈你对中断上下文的理解 中断流程 中断上下文理解 Linux schedule() 函数的原理和调用的时机 schedule() 函数原理 调用时机 页表实现机制,分页的缺点? 页表机制 分页的缺点 介绍操作系…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...