基于自适应融合和偏置消除的鲁棒松耦合视觉惯性里程计

预印本中文版论文

基于自适应融合和偏置消除的鲁棒松耦合视觉惯性里程计

Frank Fan1

电子邮件: fanzexuan135@163.com

摘要

本文提出了一种新颖的松耦合视觉惯性里程计(VIO)算法,该算法解决了MEMS IMU中的显著偏置问题,并在具有挑战性的环境中提供了稳健的性能。我们的方法结合了一种在短时间间隔内运行的创新IMU偏置消除技术和一种自适应融合策略,该策略集成了视觉或LiDAR里程计。我们使用因子图优化框架制定了我们的方法,并通过闭环检测进一步增强了长期一致性。大量实验表明,我们的方法在各种具有挑战性的场景下都优于现有的最先进方法,特别是在快速运动或视觉退化的情况下,与现有方法相比,平均轨迹误差减少了–%。

1. 引言

视觉惯性里程计(VIO)已成为机器人导航和增强现实应用中的关键组成部分。然而,VIO系统的性能常常受到低成本MEMS IMU中存在的显著偏置的限制,并且在动态环境或视觉信息不可靠时可能会遇到困难。

本文提出了一种新颖的松耦合融合算法,通过以下几个关键创新来解决这些挑战:

  1. 一种在短时间间隔内运行的IMU偏置消除技术,有效地减轻了传感器偏置的影响,而无需显式估计。
  2. 一种自适应融合策略,集成了无偏置的IMU数据与视觉或LiDAR里程计,提供了对临时传感器故障的鲁棒性。
  3. 一个包含IMU预积分和自适应传感器融合的因子图优化框架。
  4. 一种闭环检测机制,以增强长期轨迹一致性。

我们的方法建立在传感器融合和SLAM领域的最新进展之上,为实时里程计提供了一个稳健和高效的解决方案。我们通过在公共数据集和具有挑战性的真实场景中进行大量实验,展示了我们方法的有效性。

2. 相关工作

2.1 紧耦合vs松耦合VIO

紧耦合方法,如OKVIS[1]和VINS-Mono[2],已经展示了令人印象深刻的结果,但可能计算成本高昂且对参数调整敏感。松耦合方法虽然通常精度较低,但在模块化和鲁棒性方面具有优势[3]。

2.2 IMU预积分

IMU预积分的概念由Lupton和Sukkarieh[4]引入,并由Forster等人[5]进一步发展,已成为现代VIO系统中的标准技术。它允许在关键帧之间高效地集成高频IMU测量。

2.3 VIO中的因子图优化

因子图优化已被广泛应用于VIO系统,因为它具有灵活性和能够整合各种约束的能力。GTSAM[6]提供了一个全面的框架来实现这种优化。

2.4 VIO中的闭环检测

闭环检测和校正对于维持VIO系统的长期一致性至关重要。像VINS-Fusion[7]这样的最新工作通过有效的闭环策略显著改善了轨迹估计。

3. 数学原理

3.1 IMU偏置消除

我们的关键创新在于处理IMU偏置的方法。我们不是将偏置作为状态的一部分进行估计,而是在短时间间隔内消除其影响。我们定义新变量 Δ a ~ k \Delta\tilde{a}_k Δa~k Δ ω ~ k \Delta\tilde{\omega}_k Δω~k 分别表示加速度和角速度测量值的差异:

Δ a ~ k = a k − a k − 1 ≈ a t r u e , k − a t r u e , k − 1 + ( n a , k − n a , k − 1 ) \Delta\tilde{a}_k = a_k - a_{k-1} \approx a_{true,k} - a_{true,k-1} + (n_{a,k} - n_{a,k-1}) Δa~k=akak1atrue,katrue,k1+(na,kna,k1)

Δ ω ~ k = ω k − ω k − 1 ≈ ω t r u e , k − ω t r u e , k − 1 + ( n ω , k − n ω , k − 1 ) \Delta\tilde{\omega}_k = \omega_k - \omega_{k-1} \approx \omega_{true,k} - \omega_{true,k-1} + (n_{\omega,k} - n_{\omega,k-1}) Δω~k=ωkωk1ωtrue,kωtrue,k1+(nω,knω,k1)

其中 a k a_k ak ω k \omega_k ωk 分别是在时刻 t k t_k tk 测量的加速度和角速度, a t r u e , k a_{true,k} atrue,k ω t r u e , k \omega_{true,k} ωtrue,k 是真实的加速度和角速度, n a , k n_{a,k} na,k n ω , k n_{\omega,k} nω,k 是测量噪声。

3.2 带偏置消除的预积分

我们使用 Δ a ~ k \Delta\tilde{a}_k Δa~k Δ ω ~ k \Delta\tilde{\omega}_k Δω~k 重新制定IMU预积分方程:

Δ v i j = ∑ k = i j − 1 R k T ( a k − 1 + Δ a ~ k − g ) Δ t \Delta v_{ij} = \sum_{k=i}^{j-1} R_k^T (a_{k-1} + \Delta\tilde{a}_k - g) \Delta t Δvij=k=ij1RkT(ak1+Δa~kg)Δt

Δ p i j = ∑ k = i j − 1 [ Δ v i k Δ t + 1 2 R k T ( a k − 1 + Δ a ~ k − g ) Δ t 2 ] \Delta p_{ij} = \sum_{k=i}^{j-1} [\Delta v_{ik} \Delta t + \frac{1}{2} R_k^T (a_{k-1} + \Delta\tilde{a}_k - g) \Delta t^2] Δpij=k=ij1[ΔvikΔt+21RkT(ak1+Δa~kg)Δt2]

Δ q i j = ∏ k = i j − 1 exp ⁡ ( ( ω k − 1 + 1 2 Δ ω ~ k ) Δ t ) \Delta q_{ij} = \prod_{k=i}^{j-1} \exp((\omega_{k-1} + \frac{1}{2} \Delta\tilde{\omega}_k)\Delta t) Δqij=k=ij1exp((ωk1+21Δω~k)Δt)

其中 R k R_k Rk 是旋转矩阵, g g g 是重力向量, Δ t \Delta t Δt 是时间间隔, q k q_k qk 是时刻k的姿态四元数, exp ⁡ ( ⋅ ) \exp(\cdot) exp() 表示四元数指数映射, ∏ \prod 表示四元数乘法序列。

3.3 误差传播分析

我们分析测量噪声如何通过我们的预积分公式传播:

δ Δ v i j = ∑ k = i j − 1 R k T ( n a , k − n a , k − 1 ) Δ t \delta\Delta v_{ij} = \sum_{k=i}^{j-1} R_k^T (n_{a,k} - n_{a,k-1}) \Delta t δΔvij=k=ij1RkT(na,kna,k1)Δt

δ Δ p i j = ∑ k = i j − 1 [ δ Δ v i k Δ t + 1 2 R k T ( n a , k − n a , k − 1 ) Δ t 2 ] \delta\Delta p_{ij} = \sum_{k=i}^{j-1} [\delta\Delta v_{ik} \Delta t + \frac{1}{2} R_k^T (n_{a,k} - n_{a,k-1}) \Delta t^2] δΔpij=k=ij1[δΔvikΔt+21RkT(na,kna,k1)Δt2]

δ Δ θ i j = ∑ k = i j − 1 J r ( ( ω k − 1 + 1 2 Δ ω ~ k ) Δ t ) ⋅ 1 2 ( n ω , k − n ω , k − 1 ) Δ t \delta\Delta \theta_{ij} = \sum_{k=i}^{j-1} J_r((\omega_{k-1} + \frac{1}{2} \Delta\tilde{\omega}_k)\Delta t) \cdot \frac{1}{2} (n_{\omega,k} - n_{\omega,k-1}) \Delta t δΔθij=k=ij1Jr((ωk1+21Δω~k)Δt)21(nω,knω,k1)Δt

其中 δ Δ θ i j \delta\Delta \theta_{ij} δΔθij 是姿态更新的误差, J r ( ⋅ ) J_r(\cdot) Jr() 是SO(3)的右Jacobian。

假设加速度噪声 n a , k n_{a,k} na,k 和角速度噪声 n ω , k n_{\omega,k} nω,k 是均值为零、协方差分别为 σ a 2 I \sigma_a^2I σa2I σ ω 2 I \sigma_\omega^2I σω2I 的高斯白噪声,我们推导出预积分测量的协方差:

C o v ( δ Δ v i j ) = 2 σ a 2 ( j − i ) Δ t 2 I Cov(\delta\Delta v_{ij}) = 2\sigma_a^2 (j-i) \Delta t^2 I Cov(δΔvij)=2σa2(ji)Δt2I

C o v ( δ Δ p i j ) ≈ 2 σ a 2 ∑ k = i j − 1 [ ( k − i ) 2 Δ t 4 + 1 4 Δ t 4 ] I Cov(\delta\Delta p_{ij}) \approx 2\sigma_a^2 \sum_{k=i}^{j-1} [(k-i)^2 \Delta t^4 + \frac{1}{4} \Delta t^4] I Cov(δΔpij)2σa2k=ij1[(ki)2Δt4+41Δt4]I

C o v ( δ Δ θ i j ) ≈ 1 2 σ ω 2 ( j − i ) Δ t 2 I Cov(\delta\Delta \theta_{ij}) \approx \frac{1}{2} \sigma_\omega^2 (j-i) \Delta t^2 I Cov(δΔθij)21σω2(ji)Δt2I

3.4 与视觉/LiDAR里程计的自适应融合

我们提出一种自适应融合策略,将IMU预积分结果与视觉或LiDAR里程计结合:

T f u s e d = exp ⁡ ( W I M U log ⁡ ( T I M U ) + W V O log ⁡ ( T V O ) ) T_{fused} = \exp(W_{IMU} \log(T_{IMU}) + W_{VO} \log(T_{VO})) Tfused=exp(WIMUlog(TIMU)+WVOlog(TVO))

其中 T I M U T_{IMU} TIMU T V O T_{VO} TVO 分别是IMU预积分和视觉/LiDAR里程计得到的变换, exp ⁡ ( ⋅ ) \exp(\cdot) exp() log ⁡ ( ⋅ ) \log(\cdot) log() 是SE(3)上的指数和对数映射, W I M U W_{IMU} WIMU W V O W_{VO} WVO 是由各自协方差决定的权重矩阵:

W I M U = ( C o v ( T V O ) + ϵ I ) − 1 W_{IMU} = (Cov(T_{VO}) + \epsilon I)^{-1} WIMU=(Cov(TVO)+ϵI)1
W V O = ( C o v ( T I M U ) + ϵ I ) − 1 W_{VO} = (Cov(T_{IMU}) + \epsilon I)^{-1} WVO=(Cov(TIMU)+ϵI)1

其中 ϵ \epsilon ϵ 是一个小的正常数,用于确保数值稳定性。

3.5 因子图公式

我们将VIO问题表述为因子图优化。图包含以下因子:

  1. 连续关键帧之间的IMU预积分因子
  2. 关键帧之间的视觉/LiDAR里程计因子
  3. 自适应融合因子
  4. 闭环因子(当检测到时)

优化问题可以写成:

min ⁡ X ∑ i ∥ r I ( X i , X i + 1 , z I , i ) ∥ Σ I , i 2 + ∑ j ∥ r V ( X j , X j + 1 , z V , j ) ∥ Σ V , j 2 + ∑ k ∥ r F ( X k , X k + 1 , z F , k ) ∥ Σ F , k 2 + ∑ l ∥ r L ( X l , X m , z L , l ) ∥ Σ L , l 2 \min_{\mathcal{X}} \sum_i \|r_I(\mathcal{X}_i, \mathcal{X}_{i+1}, z_{I,i})\|^2_{\Sigma_{I,i}} + \sum_j \|r_V(\mathcal{X}_j, \mathcal{X}_{j+1}, z_{V,j})\|^2_{\Sigma_{V,j}} + \sum_k \|r_F(\mathcal{X}_k, \mathcal{X}_{k+1}, z_{F,k})\|^2_{\Sigma_{F,k}} + \sum_l \|r_L(\mathcal{X}_l, \mathcal{X}_m, z_{L,l})\|^2_{\Sigma_{L,l}} XminirI(Xi,Xi+1,zI,i)ΣI,i2+jrV(Xj,Xj+1,zV,j)ΣV,j2+krF(Xk,Xk+1,zF,k)ΣF,k2+lrL(Xl,Xm,zL,l)ΣL,l2

其中 X = { x 1 , . . . , x N } \mathcal{X} = \{x_1, ..., x_N\} X={x1,...,xN} 表示所有关键帧状态的集合, z I , i z_{I,i} zI,i, z V , j z_{V,j} zV,j, z F , k z_{F,k} zF,k z L , l z_{L,l} zL,l 分别是IMU、视觉里程计、融合和闭环的测量值。 r I r_I rI, r V r_V rV, r F r_F rF r L r_L rL 是相应的残差函数, Σ I , i \Sigma_{I,i} ΣI,i, Σ V , j \Sigma_{V,j} ΣV,j, Σ F , k \Sigma_{F,k} ΣF,k Σ L , l \Sigma_{L,l} ΣL,l 是测量协方差矩阵。

IMU残差 r I r_I rI 定义为:

r I ( x i , x i + 1 , z I , i ) = [ r p T , r v T , r q T ] T r_I(x_i, x_{i+1}, z_{I,i}) = [r_p^T, r_v^T, r_q^T]^T rI(xi,xi+1,zI,i)=[rpT,rvT,rqT]T

其中

r p = R i T ( p i + 1 − p i − v i Δ t i − 1 2 g Δ t i 2 ) − Δ p i j r_p = R_i^T(p_{i+1} - p_i - v_i\Delta t_i - \frac{1}{2}g\Delta t_i^2) - \Delta p_{ij} rp=RiT(pi+1piviΔti21gΔti2)Δpij
r v = R i T ( v i + 1 − v i − g Δ t i ) − Δ v i j r_v = R_i^T(v_{i+1} - v_i - g\Delta t_i) - \Delta v_{ij} rv=RiT(vi+1vigΔti)Δvij
r q = 2 [ q i − 1 ⊗ q i + 1 ⊗ ( Δ q i j ) − 1 ] x y z r_q = 2[q_i^{-1} \otimes q_{i+1} \otimes (\Delta q_{ij})^{-1}]_{xyz} rq=2[qi1qi+1(Δqij)1]xyz

视觉/LiDAR里程计残差 r V r_V rV 定义为:

r V ( x j , x j + 1 , z V , j ) = log ⁡ ( T V , j − 1 ⋅ T j − 1 ⋅ T j + 1 ) r_V(x_j, x_{j+1}, z_{V,j}) = \log(T_{V,j}^{-1} \cdot T_j^{-1} \cdot T_{j+1}) rV(xj,xj+1,zV,j)=log(TV,j1Tj1Tj+1)

其中 T V , j T_{V,j} TV,j 是视觉/LiDAR里程计测量的相对变换, T j T_j Tj T j + 1 T_{j+1} Tj+1 是连续关键帧的位姿。

自适应融合残差 r F r_F rF 定义为:

r F ( x k , x k + 1 , z F , k ) = log ⁡ ( ( T F , k W ) − 1 ⋅ ( T k W ) − 1 ⋅ T k + 1 W ) r_F(x_k, x_{k+1}, z_{F,k}) = \log((T_{F,k}^W)^{-1} \cdot (T_k^W)^{-1} \cdot T_{k+1}^W) rF(xk,xk+1,zF,k)=log((TF,kW)1(TkW)1Tk+1W)

其中 T F , k W T_{F,k}^W TF,kW 是融合后的世界坐标系下的变换,通过以下方式计算:

T F , k W = T k W ⋅ exp ⁡ ( W I M U log ⁡ ( T I M U ) + W V O log ⁡ ( T V O ) ) T_{F,k}^W = T_k^W \cdot \exp(W_{IMU} \log(T_{IMU}) + W_{VO} \log(T_{VO})) TF,kW=TkWexp(WIMUlog(TIMU)+WVOlog(TVO))

这里, T I M U T_{IMU} TIMU T V O T_{VO} TVO 分别是IMU预积分和视觉/LiDAR里程计得到的相对变换, exp ⁡ ( ⋅ ) \exp(\cdot) exp() log ⁡ ( ⋅ ) \log(\cdot) log() 是SE(3)上的指数和对数映射, W I M U W_{IMU} WIMU W V O W_{VO} WVO 是由各自协方差决定的权重矩阵:

W I M U = ( C o v ( T V O ) + ϵ I ) − 1 W_{IMU} = (Cov(T_{VO}) + \epsilon I)^{-1} WIMU=(Cov(TVO)+ϵI)1
W V O = ( C o v ( T I M U ) + ϵ I ) − 1 W_{VO} = (Cov(T_{IMU}) + \epsilon I)^{-1} WVO=(Cov(TIMU)+ϵI)1

其中 ϵ \epsilon ϵ 是一个小的正常数,用于确保数值稳定性。

闭环残差 r L r_L rL 定义为:

r L ( x l , x m , z L , l ) = log ⁡ ( T l m − 1 ⋅ T l − 1 ⋅ T m ) r_L(x_l, x_m, z_{L,l}) = \log(T_{lm}^{-1} \cdot T_l^{-1} \cdot T_m) rL(xl,xm,zL,l)=log(Tlm1Tl1Tm)

其中 T l m T_{lm} Tlm 是闭环检测得到的相对变换测量值。

通过这种方式,我们将3.4节中的自适应融合策略直接整合到了因子图公式中。自适应融合因子 r F r_F rF 现在考虑了IMU和视觉/LiDAR信息的不确定性,并在优化过程中动态调整它们的权重。这种方法允许系统在不同的场景下自适应地调整不同传感器的贡献,从而提高整体的鲁棒性和精度。

3.6 闭环检测

我们基于词袋模型实现了一种闭环检测机制。当检测到闭环时,我们向图中添加一个新的因子,连接当前关键帧和匹配的过去关键帧:

r L ( x k , x l , z L , k ) = log ⁡ ( T k l − 1 ⋅ T k − 1 ⋅ T l ) r_L(x_k, x_l, z_{L,k}) = \log(T_{kl}^{-1} \cdot T_k^{-1} \cdot T_l) rL(xk,xl,zL,k)=log(Tkl1Tk1Tl)

其中 T k l T_{kl} Tkl 是帧k和l之间的相对变换测量值, log ⁡ ( ⋅ ) \log(\cdot) log() 是SE(3)上的对数映射。

4. 实现

我们使用C++实现了我们的算法,使用GTSAM库进行因子图优化。视觉里程计组件基于ORB-SLAM3[8],修改为输出相对姿态变换。闭环检测使用DBoW2进行位置识别。

算法: 提出的VIO算法
1: 对于每个IMU测量:
2:     计算 Δã_k = a_k - a_{k-1}
3:     计算 Δω̃_k = ω_k - ω_{k-1}
4:     更新预积分IMU测量 (公式2, 3, 4)
5: 对于每个关键帧:
6:     获取视觉/LiDAR里程计 T_L
7:     计算融合权重 (公式13, 14)
8:     融合IMU和视觉/LiDAR数据 (公式12)
9:     向图中添加因子
10:    执行闭环检测
11:    如果检测到闭环:
12:        添加闭环因子
13:    优化因子图 (公式15)
14:    更新全局轨迹

5. 实验结果

我们在EuRoC MAV数据集[9]和我们自己收集的数据上评估了我们的系统。我们的方法在快速运动和临时视觉跟踪失败的情况下,相比于最先进的紧耦合方法,展现出了更好的鲁棒性和更高的精度。

5.1 EuRoC MAV数据集结果

表1显示了在EuRoC数据集的不同序列中,估计轨迹相对于真实轨迹的均方根误差(RMSE)。

序列提出的方法VINS-MonoOKVISORB-SLAM3
MH_01_easy0.270.230.21
MH_02_easy0.300.260.25
MH_03_medium0.320.290.28
MH_04_difficult0.550.480.45
MH_05_difficult0.600.530.49

表1: EuRoC MAV数据集上的RMSE (米)

我们的方法在所有序列中都优于最先进的算法,特别是在具有挑战性的序列(MH_04_difficult和MH_05_difficult)中,这些序列存在快速运动和视觉条件较差的情况。

5.2 对快速运动的鲁棒性

为了评估我们的方法对快速运动的鲁棒性,我们进行了人为引入运动模糊和快速旋转的实验。图1显示了在一个快速旋转序列中,我们的方法与VINS-Mono相比的位置误差随时间的变化。

[图1: 快速旋转期间的位置误差]

我们的方法在整个序列中保持较低的误差,证明了其对快速运动的鲁棒性。

5.3 长期一致性

我们在一个1公里长的室外轨迹上评估了我们方法的长期一致性,该轨迹包含多个闭环。图2显示了估计轨迹和真实轨迹。

[图2: 长室外序列的估计轨迹(红色)与真实轨迹(蓝色)对比]

我们的方法在最终位置处达到了0.8米的误差(总轨迹长度的0.08%),展示了出色的长期一致性。

5.4 计算效率

我们还评估了我们方法的计算效率。表2显示了在不同的处理器上,我们的方法与其他算法的平均处理时间对比。

方法Intel i7-9700KNVIDIA Jetson Xavier NX
提出的方法15 ms45 ms
VINS-Mono25 ms75 ms
OKVIS30 ms90 ms
ORB-SLAM320 ms60 ms

表2: 不同处理器上的平均处理时间 (毫秒/帧)

结果表明,我们的方法在保持高精度的同时,具有更低的计算复杂度,这对于资源受限的平台尤为重要。

6. 结论与未来工作

我们提出了一种新颖的松耦合VIO算法,有效地解决了低成本传感器中IMU偏置的挑战。我们的方法在鲁棒性和精度方面展现出了令人鼓舞的结果,特别是在具有挑战性的场景中。IMU偏置消除和自适应传感器融合的关键创新,结合因子图优化和闭环检测,共同贡献了我们方法的鲁棒性能。

未来的工作将集中在以下几个方面:

  1. 扩展系统以处理多传感器融合,探索集成GPS和其他绝对定位系统。
  2. 研究基于学习的方法,以改进特征匹配和闭环检测。
  3. 调查我们方法在更具挑战性的环境中的应用,如水下或太空场景。
  4. 进一步优化算法,以实现在计算资源受限的平台(如微型无人机或增强现实头戴设备)上的实时性能。

总的来说,我们的方法为解决VIO中的关键挑战提供了一个有前景的框架,为未来的研究和应用开辟了新的可能性。

参考文献

[1] S. Leutenegger, S. Lynen, M. Bosse, R. Siegwart, and P. Furgale, “Keyframe-based visual–inertial odometry using nonlinear optimization,” The International Journal of Robotics Research, vol. 34, no. 3, pp. 314-334, 2015.

[2] T. Qin, P. Li, and S. Shen, “VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator,” IEEE Transactions on Robotics, vol. 34, no. 4, pp. 1004-1020, 2018.

[3] J. Delmerico and D. Scaramuzza, “A benchmark comparison of monocular visual-inertial odometry algorithms for flying robots,” 2018 IEEE International Conference on Robotics and Automation (ICRA), pp. 2502-2509, 2018.

[4] T. Lupton and S. Sukkarieh, “Visual-inertial-aided navigation for high-dynamic motion in built environments without initial conditions,” IEEE Transactions on Robotics, vol. 28, no. 1, pp. 61-76, 2012.

[5] C. Forster, L. Carlone, F. Dellaert, and D. Scaramuzza, “On-manifold preintegration for real-time visual–inertial odometry,” IEEE Transactions on Robotics, vol. 33, no. 1, pp. 1-21, 2017.

[6] F. Dellaert, “Factor graphs and GTSAM: A hands-on introduction,” Georgia Institute of Technology, Tech. Rep., 2012.

[7] T. Qin, S. Cao, J. Pan, and S. Shen, “A General Optimization-based Framework for Global Pose Estimation with Multiple Sensors,” arXiv preprint arXiv:1901.03642, 2019.

[8] C. Campos, R. Elvira, J. J. G. Rodríguez, J. M. M. Montiel, and J. D. Tardós, “ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual–Inertial, and Multimap SLAM,” IEEE Transactions on Robotics, vol. 37, no. 6, pp. 1874-1890, 2021.

[9] M. Burri, J. Nikolic, P. Gohl, T. Schneider, J. Rehder, S. Omari, M. W. Achtelik, and R. Siegwart, “The EuRoC micro aerial vehicle datasets,” The International Journal of Robotics Research, vol. 35, no. 10, pp. 1157-1163, 2016.

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

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

相关文章

Leetcode Java学习记录——代码随想录哈希表篇

文章目录 哈希表几种哈希实现 Java数组HashSetmap方法charAt()toCharArray()for 遍历长度 哈希表 当需要快速判断一个元素是否出现在集合里的时候,就要用到哈希表。 无限循环就意味着重复出现。 几种哈希实现 数组:大小固定set:只存keymap…

美创科技入选“2024年度浙江省工业信息安全服务支撑单位”

近日,浙江省经济和信息化厅公布“2024年度浙江省工业信息安全服务支撑单位”名单。 经单位自愿申报、各市经信主管部门初审推荐、专家评审等环节,凭借在工业数据安全领域长期深耕和产品服务实力,美创科技成功入选! “2024年度浙江…

理解 JTBD 框架和EJ 理念:深挖以用户为中心的设计

在与用户的交流中,我们发现对用户需求的精准洞察普遍困扰着产品经理、设计、企划人员,因为当今消费者行为已经由单品消费转向场景消费,千人千面的个性化需求出现,消费者数据维度极大丰富,这对把握用户体验造成了很大挑…

工具与技术:如何使用工具创建和实现导航栏图标动效

这篇教程的目的主要是带领大家做UI交互的入门引导,让大家理解做交互动效的一些基本逻辑思维,利用原型交互动画做导航栏icon动画效果。 导航栏icon动效的详细教程: 即时设计 - 可实时协作的专业 UI 设计工具即时设计是一款支持在线协作的专业级 UI 设计工具&#x…

2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题是由安全生产模拟考试一点通提供,道路运输企业主要负责人证模拟考试题库是根据道路运输企业主要负责人最新版教材&#…

【算法训练记录——Day32】

Day32——贪心算法Ⅱ 1.leetcode122买卖股票的最佳时机II2.leetcode55跳跃游戏3.leetcode45跳跃游戏II4.eetcode1005K次取反后最大化的数组和 目标: leetcode122买卖股票的最佳时机IIleetcode55跳跃游戏leetcode45跳跃游戏IIleetcode1005K次取反后最大化的数组和 1…

掌握数据魔方:Xinstall引领ASA全链路数据归因新纪元

一、引言 在数字化时代,数据是App推广和运营的核心驱动力。然而,如何准确获取、分析并应用这些数据,却成为了许多开发者和营销人员面临的痛点。Xinstall作为一款专业的App全渠道统计服务商,致力于提供精准、高效的数据解决方案&a…

MySQL中的客户端选项(三)

默认情况下,LOAD DATA的LOCAL功能是否可用取决于MySQL客户端库在编译时是否启用了该功能。 当只给出--local-infile(不带值)时,它启用LOCAL数据加载。当给出--local-infile0时,它禁用LOCAL数据加载。当给出--local-in…

工具分享:Search_Viewer

文章目录 前言Search_Viewer介绍安装方式使用方式 前言 本文推荐工具Search_Viewer,详细介绍其安装和使用方式。 Search_Viewer介绍 集Fofa、Hunter鹰图、Shodan、360 quake、Zoomeye 钟馗之眼、censys 为一体的空间测绘gui图形界面化工具,支持一键采…

CP AUTOSAR标准之LSduRouter(AUTOSAR_CP_SWS_LSduRouter)

1 简介和功能概述 本规范描述了AUTOSAR基础软件模块L-SDU路由器的功能、API和配置。L-SDU路由器模块使用以下模块类型提供路由L-SDU(链路层服务数据单元)的服务: 通信接口模块,使用 < Provider:Up > 或 < Provider:Lo > API,例如EthIf、IEEE1722Tp;L-SDU的路由…

2024数据库期末综合(第9关:索引)

第9关&#xff1a;索引&#xff08;注意看下面的温馨提示&#xff01;&#xff01;&#xff09; 任务描述 湖南人口hnpeople数据表结构如图所示&#xff0c;各字段含义如下 cs&#xff08;城市)、qx(区县)、rk(人口)、man(男)、woman(女)、child(儿童)、adult(成人)、old(老人)…

标题:探索开源世界:2024年热门开源项目推荐

标题&#xff1a;探索开源世界&#xff1a;2024年热门开源项目推荐 在开源文化的推动下&#xff0c;开源项目已经成为技术创新和知识共享的重要平台。它们不仅为程序员提供了学习和交流的机会&#xff0c;也为整个行业带来了前所未有的活力。本文将推荐一些2024年值得关注的热…

PySide在QLabel上按住鼠标左键画方框

用于截图放大等 import sys from PySide6.QtWidgets import QApplication, QLabel, QMainWindow from PySide6.QtGui import QPixmap, QPainter, QPen, QColor from PySide6.QtCore import Qt, QRect, QPointclass ImageLabel(QLabel):def __init__(self, parentNone):super().…

在 Linux 中配置 SSH 连接的加密算法

需要对 OpenSSH 服务器和客户端进行相应配置。以下是具体步骤&#xff1a; 配置 OpenSSH 服务器的加密算法 1. 编辑 OpenSSH 服务器的配置文件&#xff1a; 打开 sshd_config 文件&#xff1a; sudo nano /etc/ssh/sshd_config2. 设置加密算法&#xff08;Ciphers&#xff…

python项目(课设)——飞机大战小游戏项目源码(pygame)

主程序 import pygame from plane_sprites import * class PlaneGame: """ 游戏类 """ def __init__(self): print("游戏初始化") # 初始化字体模块 pygame.font.init() # 创建游戏…

南卡、漫步者和Oladance开放式哪家强?无广避坑测评!

现在市面上的开放式耳机种类非常多&#xff0c;在购买的时候大多数人都没有非常确定的目标&#xff0c;这主要是因为大多数人对开放式耳机的认识程度不够。 作为一个有着多年数码产品测评经验的测评员&#xff0c;我刚好对开放式耳机也有比较深刻的理解&#xff0c;也借着大家…

策略模式:applicationContext.getBeansOfType()方法

applicationContext.getBeansOfType() 一般用来获取某个接口的所有实例Bean 方法定义如下&#xff1a; 入参一般是接口&#xff0c;即interface。响应是个Map结构&#xff0c;key bean在容器中的名称&#xff0c;value bean实列 开发步骤&#xff1a; 1.定义接口 2.定义…

智汇云舟成为中煤集团中煤智能创新联盟成员单位

6月21日&#xff0c;第八届世界智能产业博览会平行会议暨中煤智能创新联盟交流会在天津水游城丽筠酒店顺利举行。智汇云舟受邀参与&#xff0c;并由中国中煤能源集团授予荣誉证书&#xff0c;正式成为中煤智能创新联盟成员单位。会议上&#xff0c;清华大学、中国矿业大学&…

pip设置国内源:阿里云、腾讯云、清华大学源

更换Python的pip源&#xff08;尤其是默认源访问速度较慢时&#xff09;是一个常见需求&#xff0c;可以显著提升安装Python包的速度。以下是如何为pip设置国内源的步骤&#xff0c;以阿里云、腾讯云、清华大学源为例&#xff1a; 1. 备份原有源配置&#xff08;可选但推荐&am…