VINS预积分与误差模型

文章目录

    • IMU的测量值误差模型
    • IMU预积分真实模型
    • IMU预积分估计模型
    • 误差模型
      • 普通增量积分
      • 中值积分法
    • 参考文献

IMU的测量值误差模型

IMU的测量值误差模型:
a ^ t = a t + R w t g w + b a t + n a t ω ^ t = ω t + b ω t + n ω t \begin{array}{} {{{\hat a}_t} = {a_t} + R_w^t{g^w} + {b_{{a_t}}} + {n_{a_t}}}\\ {{{\hat \omega }_t} = {\omega _t} + {b_{{\omega _t}}} + {n_{\omega _t} }} \end{array} a^t=at+Rwtgw+bat+natω^t=ωt+bωt+nωt

其中, a ^ t , ω ^ t {\hat a}_t, {\hat \omega }_t a^t,ω^t分别表示加速度计计陀螺仪的测量值; b a t , b ω t b_{a_t}, b_{\omega_t} bat,bωt分别为加速度计,陀螺仪的零偏,该零偏是随机游走的,零偏的导数服从高斯分布,设为:

b ˙ a t = n b a 和 b ˙ ω t = n b ω {\dot{b}}_{a_t}=n_{b_a}和 {\dot{b}}_{\omega_t}=n_{b_\omega} b˙at=nbab˙ωt=nbω

b ^ a t , b ^ ω t {\hat{b}}_{a_t},{\hat{b}}_{\omega_t} b^at,b^ωt表示额定的零偏估计值。真实的零偏是包含了游走偏差的,而加速度计和陀螺仪需要体现实际的物理量,要去除噪声所带来的影响。
此外, n a t , n ω t n_{a_t}, n_{\omega _t} nat,nωt 分别为加速度计,陀螺仪的高斯噪声。 g w g^w gw为重力加速度在世界坐标系下的表示。下标 t t t表示t时刻。

据上述公式可知,IMU的测量误差主要由加速度计及陀螺仪的噪声及零偏的随机游走所构成。使用IMU的积分数据量来估计位姿,很难准确测量出随机偏差的真实值,从而影响IMU积分量。参考文献《Quaternion kinematics for the error-state Kalman filter》同样我们建立两套模型,一套真实模型(考虑随机噪声),一套为估计模型(未考虑噪声,表示实际积分情况,用 ⋅ ^ \widehat \cdot 表示)。

VINS预积分发生在两帧图像(关键)帧之间(如, [ k , k + 1 ] [k,k+1] [k,k+1]),即将两帧图像发布时间内,IMU的数据进行积分(将[k,k+1]时刻内的IMU数据进行积分,从而得到IMU两帧图像之间的位姿变化量)。
因此状态的传递,误差的传递均是指两个图像帧之间的IMU积分值的传递,以下的预积分均以 [ k , k + 1 ] [k,k+1] [k,k+1]为例。

IMU预积分真实模型

p b k + 1 w = p b k w + v b k w Δ t k + ∫ ⁣ ⁣ ⁣ ∫ t ∈ [ k , k + 1 ] [ R t w ( a ^ t − b a t − n a t ) − g w ] d t 2 v b k + 1 w = v b k w + ∫ t ∈ [ k , k + 1 ] [ R t w ( a ^ t − b a t − n a t ) − g w ] d t q b k + 1 w = q b k w ⊗ ∫ t ∈ [ k , k + 1 ] 1 2 Ω ( ω ^ t − b ω t − n ω t ) q t b k d t \begin{array}{} {p_{{b_{k + 1}}}^w = p_{{b_k}}^w + v_{{b_k}}^w{\rm{\Delta }}{t_k} +\int\!\!\!\int \nolimits_{t \in [k,k + 1]} [R_t^w({{\hat a}_t} - {b_{{a_t}}} - {n_{{a_t}}}) - {g^w}]d{t^2}}\\ {v_{{b_{k + 1}}}^w = v_{{b_k}}^w + \smallint \nolimits_{t \in [k,k + 1]} [R_t^w({{\hat a}_t} - {b_{{a_t}}} - {n_{{a_t}}}) - {g^w}]dt}\\ {q_{{b_{k + 1}}}^w = q_{{b_k}}^w \otimes \smallint \nolimits_{t \in [k,k + 1]} \frac{1}{2}{\rm{\Omega }}({{\hat \omega }_t} - {b_{{\omega _t}}} - {n_{{\omega _t}}})q_t^{{b_k}}dt} \end{array} pbk+1w=pbkw+vbkwΔtk+t[k,k+1][Rtw(a^tbatnat)gw]dt2vbk+1w=vbkw+t[k,k+1][Rtw(a^tbatnat)gw]dtqbk+1w=qbkwt[k,k+1]21Ω(ω^tbωtnωt)qtbkdt

转换到体坐标系下,其PVQ形式如下:
在这里插入图片描述
其中:
α b k + 1 b k = ∫ ⁣ ⁣ ⁣ ∫ t ∈ [ t k , t k + 1 ] R t b k ( a ^ t − b a t − n a t ) d t 2 β b k + 1 b k = ∫ t ∈ [ t k , t k + 1 ] R t b k ( a ^ t − b a t − n a t ) d t γ b k + 1 b k = ∫ t ∈ [ t k , t k + 1 ] 1 2 Ω ( ω ^ t − b ω t − n ω t ) γ t b k d t \begin{array}{} {\alpha _{{b_{k + 1}}}^{{b_k}} = \int\!\!\!\int \nolimits_{t \in [{t_k},{t_{k + 1}}]} R_t^{{b_k}}({{\hat a}_t} - {b_{{a_t}}} - {n_{{a_t}}})d{t^2}}\\ {\beta _{{b_{k + 1}}}^{{b_k}} = \smallint \nolimits_{t \in [{t_k},{t_{k + 1}}]} R_t^{{b_k}}({{\hat a}_t} - {b_{{a_t}}} - {n_{{a_t}}})dt}\\ {\gamma _{{b_{k + 1}}}^{{b_k}} = \smallint \nolimits_{t \in [{t_k},{t_{k + 1}}]} \frac{1}{2}{\rm{\Omega }}({{\hat \omega }_t} - {b_{{\omega _t}}} - {n_{{\omega _t}}})\gamma _t^{{b_k}}dt} \end{array} αbk+1bk=t[tk,tk+1]Rtbk(a^tbatnat)dt2βbk+1bk=t[tk,tk+1]Rtbk(a^tbatnat)dtγbk+1bk=t[tk,tk+1]21Ω(ω^tbωtnωt)γtbkdt

在VIO系统中,IMU的发布频率通常是高于图像的,VINS系统中,使用k来表示对应的图像帧时刻,通过积分两个图像帧之间的IMU数据,来与视觉估计的位姿进行对比,来得到更加精确的位姿。

在连续积分模型时,时间连续,用 t t t作为标识,而当使用实际离散积分形式时, i i i表示 k k k k + 1 k+1 k+1图像帧之间的IMU发布时间。 b k , b k + 1 b_k, b_{k+1} bk,bk+1 k , k + 1 k,k+1 k,k+1时刻对应的IMU坐标系。
α i + 1 b k = α i b k + β i b k δ t + 1 2 α ‾ i ′ δ t 2 β i + 1 b k = β i b k + α ‾ i ′ δ t γ i + 1 b k = γ i b k ⊗ γ i + 1 i = γ i b k ⊗ [ 1 1 2 ω ‾ i ′ δ t ] \begin{array}{c} & {\alpha_{i + 1}^{b_{k}} = \alpha_{i}^{b_{k}} + \beta_{i}^{b_{k}}\delta t + \frac{1}{2}{\overline{\alpha}}_{i}^{'}\delta t^{2}} \\ & {\beta_{i + 1}^{b_{k}} = \beta_{i}^{b_{k}} + {\overline{\alpha}}_{i}^{'}\delta t} \\ & {\gamma_{i + 1}^{b_{k}} = \gamma_{i}^{b_{k}} \otimes \gamma_{i + 1}^{i} = \gamma_{i}^{b_{k}} \otimes \left\lbrack \begin{array}{r} 1 \\ {\frac{1}{2}{\overline{\omega}}_{i}^{'}\delta t} \end{array} \right\rbrack} \end{array} αi+1bk=αibk+βibkδt+21αiδt2βi+1bk=βibk+αiδtγi+1bk=γibkγi+1i=γibk[121ωiδt]

当使用普通离散增量形式时:
a ˉ i ′ = a ^ i − b a i − n a i , ω ˉ i ′ = ω ^ i − b ω i − n ω i {\bar a_i}^\prime = {\hat a_i} - {b_{{a_i}}} - {n_{{a_i}}},{\bar \omega _i}^\prime = {\hat \omega _i} - {b_{{\omega _i}}} - {n_{{\omega _i}}} aˉi=a^ibainai,ωˉi=ω^ibωinωi
利用中值积分时,
a ˉ i ′ = 1 2 [ q i ( a ^ i − b a i − n a i ) + q i + 1 ( a ^ i + 1 − b a i − n a i ) ] {\bar a_i}^\prime = \frac{1}{2}[{q_i}({\hat a_i} - {b_{{a_i}}} - {n_{{a_i}}}) + {q_{i + 1}}({\hat a_{i + 1}} - {b_{{a_i}}} - {n_{{a_i}}})] aˉi=21[qi(a^ibainai)+qi+1(a^i+1bainai)] ω ˉ i ′ = 1 2 ( ω ^ i + ω ^ i + 1 ) − b ^ ω {\bar \omega _i}^\prime = \frac{1}{2}({\hat \omega _i} + {\hat \omega _{i + 1}}) - {\hat b_\omega } ωˉi=21(ω^i+ω^i+1)b^ω

IMU预积分估计模型

首先,不考虑高斯噪声,世界坐标系下的PVQ积分形式如下:
p ^ b k + 1 w = p ^ b k w + v b k w Δ t k + ∫ ⁣ ⁣ ⁣ ∫ t ∈ [ k , k + 1 ] [ R t w ( a ^ t − b ^ a t ) − g w ] d t 2 v ^ b k + 1 w = v ^ b k w + ∫ t ∈ [ k , k + 1 ] [ R t w ( a ^ t − b ^ a t ) − g w ] d t q ^ b k + 1 w = q ^ b k w ⊗ ∫ t ∈ [ k , k + 1 ] 1 2 Ω ( ω ^ t − b ^ ω t ) q ^ t b k d t \begin{array}{} {\hat p_{{b_{k + 1}}}^w = \hat p_{{b_k}}^w + v_{{b_k}}^w{\rm{\Delta }}{t_k} + \int\!\!\!\int \nolimits_{t \in [k,k + 1]} [R_t^w({{\hat a}_t} - {{\hat b}_{{a_t}}}) - {g^w}]d{t^2}}\\ {\hat v_{{b_{k + 1}}}^w = \hat v_{{b_k}}^w + \smallint \nolimits_{t \in [k,k + 1]} [R_t^w({{\hat a}_t} - {{\hat b}_{{a_t}}}) - {g^w}]dt}\\ {\hat q_{{b_{k + 1}}}^w = \hat q_{{b_k}}^w \otimes \smallint \nolimits_{t \in [k,k + 1]} \frac{1}{2}{\rm{\Omega }}({{\hat \omega }_t} - {{\hat b}_{{\omega _t}}})\hat q_t^{{b_k}}dt} \end{array} p^bk+1w=p^bkw+vbkwΔtk+t[k,k+1][Rtw(a^tb^at)gw]dt2v^bk+1w=v^bkw+t[k,k+1][Rtw(a^tb^at)gw]dtq^bk+1w=q^bkwt[k,k+1]21Ω(ω^tb^ωt)q^tbkdt

转换到体坐标系下,其PVQ形式如下:
R ^ w b k p ^ b k + 1 w = R ^ w b k ( p ^ b k w + v ^ b k w Δ t k − 1 2 g w Δ t k 2 ) + α ^ b k + 1 b k R ^ w b k v ^ b k + 1 w = R ^ w b k ( v ^ b k w − g w Δ t k ) + β ^ b k + 1 b k q ^ w b k ⊗ q ^ b k + 1 w = γ ^ b k + 1 b k \begin{array}{} {\hat R_w^{{b_k}}\hat p_{{b_{k + 1}}}^w = \hat R_w^{{b_k}}\left( {\hat p_{{b_k}}^w + \hat v_{{b_k}}^w{\rm{\Delta }}{t_k} - \frac{1}{2}{g^w}{\rm{\Delta }}t_k^2} \right) + \hat \alpha _{{b_{k + 1}}}^{{b_k}}}\\ {\hat R_w^{{b_k}}\hat v_{{b_{k + 1}}}^w = \hat R_w^{{b_k}}(\hat v_{{b_k}}^w - {g^w}{\rm{\Delta }}{t_k}) + \hat \beta _{{b_{k + 1}}}^{{b_k}}}\\ {\hat q_w^{{b_k}} \otimes \hat q_{{b_{k + 1}}}^w = \hat \gamma _{{b_{k + 1}}}^{{b_k}}} \end{array} R^wbkp^bk+1w=R^wbk(p^bkw+v^bkwΔtk21gwΔtk2)+α^bk+1bkR^wbkv^bk+1w=R^wbk(v^bkwgwΔtk)+β^bk+1bkq^wbkq^bk+1w=γ^bk+1bk

其中:
α ^ b k + 1 b k = ∫ ⁣ ⁣ ⁣ ∫ t ∈ [ t k , t k + 1 ] R ^ t b k ( a ^ t − b ^ a t ) d t 2 β ^ b k + 1 b k = ∫ t ∈ [ t k , t k + 1 ] R ^ t b k ( a ^ t − b ^ a t ) d t γ ^ b k + 1 b k = ∫ t ∈ [ t k , t k + 1 ] 1 2 Ω ( ω ^ t − b ^ ω t ) γ t b k d t \begin{array}{} {\hat \alpha _{{b_{k + 1}}}^{{b_k}} = \int\!\!\!\int \nolimits_{t \in [{t_k},{t_{k + 1}}]} \hat R_t^{{b_k}}({{\hat a}_t} - {{\hat b}_{{a_t}}})d{t^2}}\\ {\hat \beta _{{b_{k + 1}}}^{{b_k}} = \smallint \nolimits_{t \in [{t_k},{t_{k + 1}}]} \hat R_t^{{b_k}}({{\hat a}_t} - {{\hat b}_{{a_t}}})dt}\\ {\hat \gamma _{{b_{k + 1}}}^{{b_k}} = \smallint \nolimits_{t \in [{t_k},{t_{k + 1}}]} \frac{1}{2}{\rm{\Omega }}({{\hat \omega }_t} - {{\hat b}_{{\omega _t}}})\gamma _t^{{b_k}}dt} \end{array} α^bk+1bk=t[tk,tk+1]R^tbk(a^tb^at)dt2β^bk+1bk=t[tk,tk+1]R^tbk(a^tb^at)dtγ^bk+1bk=t[tk,tk+1]21Ω(ω^tb^ωt)γtbkdt

其对应的实际离散积分形式:
在这里插入图片描述

当使用普通离散增量形式时:
a ^ ˉ i ′ = a ^ i − b ^ a i , ω ^ ˉ i ′ = ω ^ i − b ^ ω i {{\bar {\hat a}}_i}^\prime = {\hat a_i} - {\hat b_{a_i}},{{\bar {\hat \omega}_i}^\prime = {\hat \omega _i} - {\hat b_{\omega _i}}} a^ˉi=a^ib^ai,ω^ˉi=ω^ib^ωi

利用中值积分时,
a ^ ˉ i ′ = 1 2 [ q ^ i ( a ^ i − b ^ a i ) + q ^ i + 1 ( a ^ i + 1 − b ^ a i ) ] {{\bar {\hat a}}_i}^\prime = \frac{1}{2}[{\hat q_i}({\hat a_i} - {\hat b_{{a_i}}}) + {\hat q_{i + 1}}({\hat a_{i + 1}} - {\hat b_{{a_i}}})] a^ˉi=21[q^i(a^ib^ai)+q^i+1(a^i+1b^ai)] ω ^ ˉ i ′ = 1 2 ( ω ^ i + ω ^ i + 1 ) − b ^ ω i {\bar {\hat \omega} _i}^\prime = \frac{1}{2}({\hat \omega _i} + {\hat \omega _{i + 1}}) - {\hat b_{\omega _i}} ω^ˉi=21(ω^i+ω^i+1)b^ωi

误差模型

在使用马氏距离构成最小二乘问题时,我们需要知道估计量随着时间的推移,其误差的一个变化情况,因而需要对误差模型进行评估,进而对其各变量的协方差进行评估。VINS用于构造滑窗约束方程。
设估计为 z ^ \hat{z} z^,真值为 z z z,则其误差定义为:
δ z = z − z ^ \delta z=z-\hat{z} δz=zz^

当选用 z t b k = [ α t b k , β t b k , γ t b k , b a t , b ω t ] T z_t^{{b_k}} = {[\alpha _t^{{b_k}},\beta _t^{{b_k}},\gamma _t^{{b_k}},{b_{{a_t}}},{b_{{\omega _t}}}]^T} ztbk=[αtbk,βtbk,γtbk,bat,bωt]T作为预积分参数,

普通增量积分

  1. 其对应的普通增量积分的误差状态方程如下:
    δ z ˙ t b k = ∂ δ z t b k ∂ δ t = J t \delta \dot z_t^{{b_k}} = \frac{{\partial \delta z_t^{{b_k}}}}{{\partial \delta t}} = {J_t} δz˙tbk=δtδztbk=Jt
    通过计算,可得 J t = {J_t}= Jt=
    在这里插入图片描述
    从而得,当 δ t \delta t δt足够小时,
    在这里插入图片描述
    在这里插入图片描述
    在积分初始状态,设 J 0 = I , P 0 = 0 J_0=I, P_0 = 0 J0=I,P0=0,可以计算出雅可比矩阵 J t + δ t {J_{t+\delta t}} Jt+δt及协方差矩阵 P t + δ t {P_{t+\delta t}} Pt+δt随时间推移的传递方程。
    雅可比矩阵 J t + δ t {J_{t+\delta t}} Jt+δt的传递方程
    J t + δ t = ∂ δ z t + δ t b k ∂ δ t = δ z ˙ t + δ t b k = ∂ δ z t + δ t b k ∂ δ z t b k ∂ δ z t b k ∂ δ t = F J t = ( I + F t δ t ) J t {J_{t + \delta t}} = \frac{{\partial \delta z_{t + \delta t}^{{b_k}}}}{{\partial \delta t}} = \delta \dot z_{t + \delta t}^{{b_k}} = \frac{{\partial \delta z_{t + \delta t}^{{b_k}}}}{{\partial \delta z_t^{{b_k}}}}\frac{{\partial \delta z_t^{{b_k}}}}{{\partial \delta t}} = F{J_t} = (I + {F_t}\delta t){J_t} Jt+δt=δtδzt+δtbk=δz˙t+δtbk=δztbkδzt+δtbkδtδztbk=FJt=(I+Ftδt)Jt
    其中:
    ∂ δ z t + δ t b k ∂ δ z t b k = F = ( I + F t δ t ) \frac{{\partial \delta z_{t + \delta t}^{{b_k}}}}{{\partial \delta z_t^{{b_k}}}} = F = (I + {F_t}\delta t) δztbkδzt+δtbk=F=(I+Ftδt)
    设:变量 a ∼ N ( μ a , Λ a ) , b ∼ N ( μ b , Λ b ) a\sim\mathcal{N}\left(\mu_a,\Lambda_a\right),b\sim\mathcal{N}\left(\mu_b,\Lambda_b\right) aN(μa,Λa),bN(μb,Λb)
    则可知: F a ∼ N ( F μ a , F Λ a F T ) , G b ∼ N ( G μ b , G Λ b G T ) Fa\sim\mathcal{N}\left(F\mu_a,F\Lambda_aF^T\right),Gb\sim\mathcal{N}\left(G\mu_b,G\Lambda_bG^T\right) FaN(Fμa,FΛaFT),GbN(Gμb,GΛbGT)
    从而得到协方差矩阵的传递公式
    设误差量 δ z b t b k ∼ N ( 0 , P t b k ) \delta z_{b_t}^{b_k}\sim\mathcal{N}(0,P_t^{b_k}) δzbtbkN(0,Ptbk),
    δ z b t + δ t b k ∼ N ( 0 , P t + δ t b k ) \delta z_{b_{t+\delta t}}^{b_k}\sim\mathcal{N}\left(0,P_{t+\delta t}^{b_k}\right) δzbt+δtbkN(0,Pt+δtbk) P t + δ t b k = ( I + F t δ t ) P t b k ( I + F t δ t ) T + ( G t δ t ) Q ( G t δ t ) T P_{t+\delta t}^{b_k}=\left(\mathrm{I}+F_t\delta t\right)P_t^{b_k}\left(\mathrm{I}+F_t\delta t\right)^T+\left(G_t\delta t\right)Q\left(G_t\delta t\right)^T Pt+δtbk=(I+Ftδt)Ptbk(I+Ftδt)T+(Gtδt)Q(Gtδt)T
    当我们使用迭代法估计零偏时,零偏值会在每次迭代时,进行更新,从而我们的IMU积分量则需要根据新的零偏进行重新的计算,比较耗时,因而,VINS作者提出,通过更新IMU积分量对零偏误差的雅可比矩阵,来迭代零偏更新量到IMU的积分值,从而简化计算步骤。
    在这里插入图片描述
    δ z = z − z ^ \delta z=z-\hat{z} δz=zz^得:
    ∂ z ∂ b = ∂ δ z ∂ b \frac{\partial z}{\partial b}=\frac{\partial\delta z}{\partial b} bz=bδz
    从而可以从 ∂ δ z t + δ t b k ∂ δ z t b k \frac{{\partial \delta z_{t + \delta t}^{{b_k}}}}{{\partial \delta z_t^{{b_k}}}} δztbkδzt+δtbk对应的雅可比矩阵中拿出关于零偏的雅可比矩阵。
    注意: δ z ˙ t + δ t b k \delta \dot z_{t + \delta t}^{{b_k}} δz˙t+δtbk指的是对时间间隔 δ t \delta t δt的导数,而不是对 δ z ˙ t b k \delta \dot z_{t}^{{b_k}} δz˙tbk的导数,这里与VINS代码有所不同(代码中使用的 J t J_t Jt矩阵取的对零偏的雅可比矩阵)

中值积分法

  1. 使用中值积分法时,得到的状态方程传递方程如下:
    在这里插入图片描述
    在这里插入图片描述
    以上图片来自《VINS 论文推导及代码解析 崔华坤》

参考文献

《VINS 论文推导及代码解析 崔华坤》
《VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator》
《Quaternion kinematics for the error-state Kalman filter》

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

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

相关文章

揭秘 IEEE/ACM Trans/CCF/SCI,谁才是科研界的王者?

会议之眼 快讯 在学术探索的浩瀚星海中,每一篇论文都像是一颗璀璨的星辰,而那些被顶级期刊或会议收录的论文,则无疑是最耀眼的几颗。 在众多评价标准中,IEEE/ACM Transactions、CCF推荐期刊和会议、SCI分区期刊,它们…

RVM(相关向量机)、CNN_RVM(卷积神经网络结合相关向量机)、RVM-Adaboost(相关向量机结合Adaboost)

当我们谈到RVM(Relevance Vector Machine,相关向量机)、CNN_RVM(卷积神经网络结合相关向量机)以及RVM-Adaboost(相关向量机结合AdaBoost算法)时,每种模型都有其独特的原理和结构。以…

【Delphi7】Access violation at address 0019F7C3. Write of address 0019F7C3.

这里写目录标题 问题基本情况问题描述1、启动Delphi 开发程序 时连续报如下错误2、打开“工程”菜单下的“选项”页面时时连续报如下错误 解决方案1、打开“高级系统设置”2、打开“性能选项”3、添加“数据执行保护”的程序4、选择“数据执行保护”的程序5、应用“数据执行保护…

kafka学习笔记(三、生产者Producer使用及配置参数)

1.简介 1.1.producer介绍 生产者就是负责向kafka发送消息的应用程序。消息在通过send()方法发往broker的过程中,有可能需要经过拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)的一系列作用后才能被真正的发往broker。 demo: public class Kafk…

LeetCode算法题:7. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输…

武汉星起航:自运营团队—亚马逊平台运营典范,优势凸显业绩斐然

武汉星起航电子商务有限公司,作为跨境电商领域的佼佼者,凭借自运营团队多年的深耕经验与对亚马逊市场规则的深刻理解,成功在亚马逊平台开设多家自营店铺,并取得显著成绩。公司月流水达到几百万的辉煌业绩,不仅彰显了其…

嵌入式学习<1>:建立工程、GPIO

嵌入式学习_part1 本部分笔记用于学习记录,笔记源头 >>b站江科大_STM32入门教程 建立工程、GPIO 开发环境:keil MDK、STM32F103C8T6 1 )建立工程 (1)基于寄存器开发、基于标准库 或者 基于HAL库开发; &…

IDEA无法下载远程仓库jar包问题

问题描述: idea无法下载远程仓库jar包,最奇怪的是idea有多个项目,有些项目可以下载,有些项目不行。报错如下: 一开始: unable to find valid certification path to requested target Try run Maven impo…

UV胶是什么材料制成的?

UV胶是一种特殊的胶水,由丙烯酸酯单体、活性稀释剂、光引发剂、助剂等材料制成的。它是指在紫外线照射下能够迅速固化的胶水。UV胶的主要成分是丙烯酸酯单体,它在没有紫外线照射时是液体状态,但一旦受到紫外线照射,就会迅速发生聚…

docker安装Debian:11 freeswitch1.10.5

文章目录 一、生成一个镜像二、切换一个镜像源为阿里源三、安装一些相关依赖和freeswitch3.1第一步:安装freeswitch-mod和下载所需的依赖项3.2 设置密钥3.3 安装freeswitch所需的依赖项3.4 报错3.4.1 报错13.4.2 报错23.4.3 报错3 四、运行4.1 通话三十秒自动挂断 一…

我独自升级崛起下载方法分享 下载教程

《我独自升级:崛起》这款精彩绝伦的动作角色扮演游戏,灵感来源于大热网络漫画,让玩家亲自踏上主角程肖宇的征途,从觉醒初阶到实力飞跃,每一步成长都扣人心弦。值得注意的是,尽管全球正式发布日期定在了五月…

谷歌推广和seo收录是一回事吗?

那自然不是一回事,谷歌推广一般指的是谷歌的广告服务,通过购买广告位,以便用户在谷歌搜索特定关键词时显示您的广告,这种方式通常基于点击收费,意味着您只有在有人点击您的广告时才需要支付费用。谷歌推广可以让您的网…

局域网监控软件能干什么|有哪些好用的局域网监控软件

企业局域网已成为日常工作中不可或缺的一部分。 然而,网络环境的复杂性和员工上网行为的多样性,使得企业面临着诸多安全风险和管理挑战。 因此,高效局域网监控上网记录监测成为了企业保障信息安全和提升工作效率的重要手段。 高效局域网监控…

自然语言(NLP)

It’s time for us to learn how to analyse natural language documents, using Natural Language Processing (NLP). We’ll be focusing on the Hugging Face ecosystem, especially the Transformers library, and the vast collection of pretrained NLP models. Our proj…

电脑显示丢失mfc140u.dll怎么修复,总共有7个方法

mfc140u.dll 是一个动态链接库(Dynamic Link Library)文件,它是Microsoft Foundation Class (MFC)库的一部分,专为使用C编程语言开发Windows应用程序而设计。MFC库由微软提供,作为一个高级的应用程序框架,旨…

XSS漏洞---XSS-labs通关教程

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 Level-1 过滤源码&#xff1a;无 pyload&#xff1a; name<script>alert(1)</script> Level-2 过滤源码&#xff1a;利用转译函数将特殊字符转译为实体字符 $str $_GET["…

【完美解决】使用git时候出现error setting certificate verify locations: CAfile:问题

1、出现场景&#xff1a; 在使用idea的时候&#xff0c;进行git下的push&#xff0c;出现下面的错误&#xff1a; 2、原因分析&#xff1a; 可能因为重装过系统&#xff0c;或者是安装git的位置发生了变化等情况出现。 3、解决方案&#xff1a; 找到git的安装路径&#xf…

翻译《The Old New Thing》- Rendering menu glyphs is slightly trickier

Rendering menu glyphs is slightly trickier - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050802-13/?p34743 Raymond Chen 2005年08月02日 上次&#xff0c;我们看到了如何绘制有主题和无主题的单选按钮&#xff0c;我提到菜单位图更…

Centos 7.9 配置VNCServer实现远程vnc连接

文章目录 1、Centos安装图形界面1.1、安装X Windows System图形界面1.2、安装GNOME图形界面 2、VNC SERVER配置2.1、VNC SERVER安装2.2、VNC SERVER配置1&#xff09;创建vnc配置文件2&#xff09;修改配置文件内容3&#xff09;完整配置文件参考 2.3、设置vnc密码2.4、配置防火…

PyQt5中重要的概念:信号与槽

PyQt中信号与槽概念定义如下&#xff08;网络上引用的&#xff09;&#xff1a; 信号&#xff08;signal&#xff09;和槽&#xff08;slot&#xff09;是Qt的核心机制&#xff0c;也是在PyQt编程中对象之间进行通信的机制。在创建事件循环之后&#xff0c;通过建立信号和槽的…