【ORBSLAM2点线融合】线特征图模型构建

2023-11-14

在SLAM中,通常用BA(Bundle Adjustment)来实现多个三维点和不同相机位姿的优化
本文描述如何建立基于线特征的图优化,并推导相应的雅克比矩阵,并用g2o实现相应的类

1. 线特征误差及观测模型

假设相机位姿为 T c w T_{cw} Tcw表示世界坐标系到相机坐标系的变换,或者表示成 R c w , t c w R_{cw},t_{cw} Rcw,tcw。三维空间直线表示成
世界坐标下 L w = [ n w v w ] \mathcal{L}^{w}=\begin{bmatrix} n^{w} \\ v^{w}\end{bmatrix} Lw=[nwvw]
相机坐标下 L c = [ n c v c ] \mathcal{L}^{c}=\begin{bmatrix} n^{c} \\ v^{c}\end{bmatrix} Lc=[ncvc]
相机坐标转换成直线方程系数矩阵为
K = [ f y 0 0 0 f x 0 − f y c x − f x c y f x f y ] \mathcal{K}=\begin{bmatrix} f_{y} & 0& 0 \\ 0 & f_{x} & 0 \\ -f_{y}c_{x} & -f_{x}c_{y} & f_{x}f_{y} \end{bmatrix} K= fy0fycx0fxfxcy00fxfy
重投影误差为 e l = [ p s T l ′ l 1 2 + l 2 2 p e T l ′ l 1 2 + l 2 2 ] e_{l} = \begin{bmatrix} \frac {p_{s}^{T}l^{'}} {\sqrt{l_{1}^{2} + l_{2}^{2}}} \\ \frac {p_{e}^{T}l^{'}} {\sqrt{l_{1}^{2} + l_{2}^{2}}} \end{bmatrix} el= l12+l22 psTll12+l22 peTl 其中 l ′ = [ l 1 l 2 l 3 ] T l^{'}=\begin{bmatrix} l_{1} & l_{2} & l_{3} \end{bmatrix}^{T} l=[l1l2l3]T,表示空间直线投影到二维图像上的直线方程系数
p s = [ u s v s 1 ] T , p e = [ u e v e 1 ] T p_{s}=\begin{bmatrix} u_{s} & v_{s} & 1\end{bmatrix}^{T},p_{e}=\begin{bmatrix} u_{e} & v_{e} & 1\end{bmatrix}^{T} ps=[usvs1]Tpe=[ueve1]T为与空间直线匹配的图像线特征起点和终点齐次坐标
坐标之间的变换为
[ n c v c ] = [ R c w [ t c w ] × R c w 0 R c w ] [ n w v w ] = H c w [ n w v w ] l ′ = [ f y 0 0 0 f x 0 − f y c x − f x c y f x f y ] n c = K n c \begin{aligned} \begin{bmatrix} n^{c} \\ v^{c} \end{bmatrix} &= \begin{bmatrix}R_{cw} & \left[t_{cw}\right]_\times R_{cw} \\ 0 & R_{cw}\end{bmatrix}\begin{bmatrix}n^{w} \\v^{w}\end{bmatrix} \\ &=\mathcal{H}_{cw}\begin{bmatrix}n^{w} \\v^{w}\end{bmatrix} \\l^{'} &=\begin{bmatrix} f_{y} & 0& 0 \\ 0 & f_{x} & 0 \\ -f_{y}c_{x} & -f_{x}c_{y} & f_{x}f_{y} \end{bmatrix}n^{c} \\ &= \mathcal{K}n^{c} \end{aligned} [ncvc]l=[Rcw0[tcw]×RcwRcw][nwvw]=Hcw[nwvw]= fy0fycx0fxfxcy00fxfy nc=Knc

2. 线特征重投影误差关于位姿增量的雅克比矩阵

利用链式法则,可以求得
∂ e l ∂ δ ξ = ∂ e l ∂ l ′ ∂ l ′ ∂ L c ∂ L c ∂ δ ξ \frac{\partial e_{l}}{\partial \delta\xi}=\frac{\partial e_{l}}{\partial l^{'}} \frac{\partial l^{'}}{\partial \mathcal{L}^{c}} \frac{\partial \mathcal{L}^{c}}{\partial \delta\xi} δξel=lelLclδξLc

这里注意,这里需要涉及到矩阵求导,矩阵求导通常分为分子布局和分母布局,这两种情况只是表达形式的不同,本身并没有两样,下面统一都用分母布局,具体求导结果可以看这篇文章

第一部分计算
∂ e l ∂ l ′ = [ ∂ ( p s T l ′ l 1 2 + l 2 2 ) ∂ l 1 ∂ ( p s T l ′ l 1 2 + l 2 2 ) ∂ l 2 ∂ ( p s T l ′ l 1 2 + l 2 2 ) ∂ l 3 ∂ ( p e T l ′ l 1 2 + l 2 2 ) ∂ l 1 ∂ ( p e T l ′ l 1 2 + l 2 2 ) ∂ l 2 ∂ ( p e T l ′ l 1 2 + l 2 2 ) ∂ l 3 ] = [ u s l 2 2 − v s l 1 l 2 − l 1 l 3 ( l 1 2 + l 2 2 ) 3 2 v s l 2 2 − u s l 1 l 2 − l 1 l 3 ( l 1 2 + l 2 2 ) 3 2 1 l 1 2 + l 2 2 u e l 2 2 − v e l 1 l 2 − l 1 l 3 ( l 1 2 + l 2 2 ) 3 2 v e l 2 2 − u e l 1 l 2 − l 1 l 3 ( l 1 2 + l 2 2 ) 3 2 1 l 1 2 + l 2 2 ] \begin{aligned} \frac{\partial e_{l}}{\partial l^{'}} &= \begin{bmatrix} \frac{\partial(\frac{p_{s}^{T}l^{'}}{\sqrt{l_{1}^{2}+l_{2}^{2}}})}{\partial l_{1}} & \frac{\partial(\frac{p_{s}^{T}l^{'}}{\sqrt{l_{1}^{2}+l_{2}^{2}}})}{\partial l_{2}} & \frac{\partial(\frac{p_{s}^{T}l^{'}}{\sqrt{l_{1}^{2}+l_{2}^{2}}})}{\partial l_{3}} \\ \frac{\partial(\frac{p_{e}^{T}l^{'}}{\sqrt{l_{1}^{2}+l_{2}^{2}}})}{\partial l_{1}} & \frac{\partial(\frac{p_{e}^{T}l^{'}}{\sqrt{l_{1}^{2}+l_{2}^{2}}})}{\partial l_{2}} & \frac{\partial(\frac{p_{e}^{T}l^{'}}{\sqrt{l_{1}^{2}+l_{2}^{2}}})}{\partial l_{3}} \end{bmatrix} \\ &= \begin{bmatrix} \frac{u_{s}l_{2}^{2}-v_{s}l_{1}l_{2}-l_{1}l_{3}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} & \frac{v_{s}l_{2}^{2}-u_{s}l_{1}l_{2}-l_{1}l_{3}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} & \frac{1}{\sqrt{l_{1}^{2}+l_{2}^{2}}} \\ \frac{u_{e}l_{2}^{2}-v_{e}l_{1}l_{2}-l_{1}l_{3}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} & \frac{v_{e}l_{2}^{2}-u_{e}l_{1}l_{2}-l_{1}l_{3}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} & \frac{1}{\sqrt{l_{1}^{2}+l_{2}^{2}}} \end{bmatrix} \end{aligned} lel= l1(l12+l22 psTl)l1(l12+l22 peTl)l2(l12+l22 psTl)l2(l12+l22 peTl)l3(l12+l22 psTl)l3(l12+l22 peTl) = (l12+l22)23usl22vsl1l2l1l3(l12+l22)23uel22vel1l2l1l3(l12+l22)23vsl22usl1l2l1l3(l12+l22)23vel22uel1l2l1l3l12+l22 1l12+l22 1 先化简一下,对于第一行第一列元素
u s l 2 2 − v s l 1 l 2 − l 1 l 3 ( l 1 2 + l 2 2 ) 3 2 = u s l 2 2 + ( u s l 1 2 − u s l 1 2 ) − v s l 1 l 2 − l 1 l 3 ( l 1 2 + l 2 2 ) 3 2 = u s ( l 1 2 + l 2 2 ) − l 1 ( u s l 1 + v s l 2 + l 3 ) ( l 1 2 + l 2 2 ) 3 2 = u 1 l 1 2 + l 2 2 − l 1 p s T l ′ ( l 1 2 + l 2 2 ) 3 2 = 1 l 1 2 + l 2 2 ( u 1 − l 1 p s T l ′ l 1 2 + l 2 2 ) \begin{aligned} \frac{u_{s}l_{2}^{2}-v_{s}l_{1}l_{2}-l_{1}l_{3}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} &= \frac{u_{s}l_{2}^{2}+(u_{s}l_{1}^{2}-u_{s}l_{1}^{2})-v_{s}l_{1}l_{2}-l_{1}l_{3}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} \\ &= \frac{u_{s}(l_{1}^{2}+l_{2}^{2})-l_{1}(u_{s}l_{1}+v_{s}l_{2}+l_{3})}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} \\ &= \frac{u_{1}}{\sqrt{l_{1}^{2}+l_{2}^{2}}}-\frac{l_{1}p_{s}^{T}l^{'}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} \\ &= \frac{1}{\sqrt{l_{1}^{2}+l_{2}^{2}}}(u_{1}-\frac{l_{1}p_{s}^{T}l^{'}}{l_{1}^{2}+l_{2}^{2}}) \end{aligned} (l12+l22)23usl22vsl1l2l1l3=(l12+l22)23usl22+(usl12usl12)vsl1l2l1l3=(l12+l22)23us(l12+l22)l1(usl1+vsl2+l3)=l12+l22 u1(l12+l22)23l1psTl=l12+l22 1(u1l12+l22l1psTl) l n = l 1 2 + l 2 2 , e s = p s T l ′ , e e = p e T l ′ l_{n}=\sqrt{l_{1}^{2}+l_{2}^{2}},e_{s}=p_{s}^{T}l^{'},e_{e}=p_{e}^{T}l^{'} ln=l12+l22 ,es=psTl,ee=peTl
u s l 2 2 − v s l 1 l 2 − l 1 l 3 ( l 1 2 + l 2 2 ) 3 2 = 1 l n ( u s − l 1 e s l n 2 ) \begin{aligned} \frac{u_{s}l_{2}^{2}-v_{s}l_{1}l_{2}-l_{1}l_{3}}{(l_{1}^{2}+l_{2}^{2})^{\frac{3}{2}}} &= \frac{1}{l_{n}}(u_{s}-\frac{l_{1}e_{s}}{l_{n}^{2}}) \end{aligned} (l12+l22)23usl22vsl1l2l1l3=ln1(usln2l1es)对其他位置的元素也进行简化,最终得到
∂ e l ∂ l ′ = 1 l n [ u s − l 1 e s l n 2 v s − l 2 e s l n 2 1 u e − l 1 e e l n 2 v e − l 2 e e l n 2 1 ] 2 × 3 \begin{aligned} \frac{\partial e_{l}}{\partial l^{'}} &= \frac{1}{l_{n}} \begin{bmatrix} u_{s}-\frac{l_{1}e_{s}}{l_{n}^{2}}& v_{s}-\frac{l_{2}e_{s}}{l_{n}^{2}} & 1 \\ u_{e}-\frac{l_{1}e_{e}}{l_{n}^{2}} & v_{e}-\frac{l_{2}e_{e}}{l_{n}^{2}} & 1 \end{bmatrix}_{2 \times 3} \end{aligned} lel=ln1[usln2l1esueln2l1eevsln2l2esveln2l2ee11]2×3第二部分计算
∂ l ′ ∂ L c = ∂ ( K n c ) ∂ [ n c v c ] = [ K 0 ] 3 × 6 \begin{aligned} \frac{\partial l^{'}}{\partial \mathcal{L}^{c}} &=\frac{\partial (\mathcal{K}n^{c})}{\partial \begin{bmatrix} n^{c} \\ v^{c} \end{bmatrix}} \\ &= \begin{bmatrix} \mathcal{K} & 0 \end{bmatrix}_{3 \times 6} \end{aligned} Lcl=[ncvc](Knc)=[K0]3×6第三部分计算, δ ξ = [ δ ϕ δ ρ ] \delta\xi=\begin{bmatrix}\delta\phi \\ \delta\rho \end{bmatrix} δξ=[δϕδρ]
∂ L c ∂ δ ξ = [ ∂ L c ∂ δ ϕ ∂ L c ∂ δ ρ ] 6 × 6 \begin{aligned} \frac{\partial \mathcal{L}^{c}}{\partial \delta\xi} &= \begin{bmatrix} \frac{\partial \mathcal{L}^{c}}{\partial \delta\phi} & \frac{\partial \mathcal{L}^{c}}{\partial \delta\rho} \end{bmatrix}_{6 \times 6} \\ \end{aligned} δξLc=[δϕLcδρLc]6×6这里的话分别计算这两部分,基本求解方式和李群的扰动模型类似,假设添加左扰动后变换矩阵为 H c w ∗ \mathcal{H}^{*}_{cw} Hcw,则,
∂ L c ∂ δ ξ = lim ⁡ δ ξ → 0 H c w ∗ L w − H c w L w δ ξ \frac{\partial \mathcal{L}^{c}}{\partial \delta\xi} =\lim_{\delta\xi\rightarrow 0} \frac{\mathcal{H}^{*}_{cw}\mathcal{L}^{w}-\mathcal{H}_{cw}\mathcal{L}^{w}}{\delta\xi} δξLc=δξ0limδξHcwLwHcwLw先求 H c w ∗ \mathcal{H}^{*}_{cw} Hcw
T ∗ = e x p ( δ ξ ∧ ) T c w ≈ ( I + [ δ ϕ ∧ δ ρ 0 T 0 ] ) [ R c w t c w 0 T 1 ] = [ ( I + δ ϕ ∧ ) R c w ( I + δ ϕ ∧ ) t c w + δ ρ 0 T 1 ] H c w ∗ = [ ( I + δ ϕ ∧ ) R c w [ ( I + δ ϕ ∧ ) t c w + δ ρ ] × ( I + δ ϕ ∧ ) R c w 0 ( I + δ ϕ ∧ ) R c w ] \begin{aligned} T^{*} &= exp(\delta\xi^{\wedge})T_{cw} \\ &\approx (I+\begin{bmatrix} \delta\phi^{\wedge} & \delta\rho \\ 0^{T} & 0\end{bmatrix}) \begin{bmatrix} R_{cw} & t_{cw} \\ 0^{T} & 1 \end{bmatrix} \\ &= \begin{bmatrix} (I+\delta\phi^{\wedge})R_{cw} & (I+\delta\phi^{\wedge})t_{cw}+\delta\rho \\ 0^{T} & 1 \end{bmatrix} \\ \mathcal{H}^{*}_{cw} &= \begin{bmatrix} (I+\delta\phi^{\wedge})R_{cw} & \left[(I+\delta\phi^{\wedge})t_{cw}+\delta\rho\right]_\times (I+\delta\phi^{\wedge})R_{cw} \\ 0 & (I+\delta\phi^{\wedge})R_{cw} \end{bmatrix} \\ \end{aligned} THcw=exp(δξ)Tcw(I+[δϕ0Tδρ0])[Rcw0Ttcw1]=[(I+δϕ)Rcw0T(I+δϕ)tcw+δρ1]=[(I+δϕ)Rcw0[(I+δϕ)tcw+δρ]×(I+δϕ)Rcw(I+δϕ)Rcw]计算 ∂ L c ∂ δ ϕ \frac{\partial \mathcal{L}^{c}}{\partial \delta\phi} δϕLc的时候可以令 δ ρ = 0 \delta\rho=0 δρ=0,则
∂ L c ∂ δ ϕ = ∂ [ ( I + δ ϕ ∧ ) R c w [ ( I + δ ϕ ∧ ) t c w ] × ( I + δ ϕ ∧ ) R c w 0 ( I + δ ϕ ∧ ) R c w ] [ n w v w ] ∂ δ ϕ \begin{aligned} \frac{\partial \mathcal{L}^{c}}{\partial \delta\phi} &=\frac{\partial \begin{bmatrix} (I+\delta\phi^{\wedge})R_{cw} & \left[(I+\delta\phi^{\wedge})t_{cw}\right]_\times (I+\delta\phi^{\wedge})R_{cw} \\ 0 & (I+\delta\phi^{\wedge})R_{cw} \end{bmatrix}\begin{bmatrix}n^{w} \\v^{w}\end{bmatrix}}{\partial \delta\phi} \end{aligned} δϕLc=δϕ[(I+δϕ)Rcw0[(I+δϕ)tcw]×(I+δϕ)Rcw(I+δϕ)Rcw][nwvw]这里使用一条性质 ( R a ) × ( R b ) = R ( a × b ) , R ∈ S O ( 3 ) (Ra) \times (Rb)=R(a \times b),R \in SO(3) (Ra)×(Rb)=R(a×b),RSO(3),则上式
∂ L c ∂ δ ϕ = ∂ [ ( I + δ ϕ ∧ ) R c w ( I + δ ϕ ∧ ) [ t c w ] × R c w 0 ( I + δ ϕ ∧ ) R c w ] [ n w v w ] ∂ δ ϕ = ∂ [ ( I + δ ϕ ∧ ) R c w n w + ( I + δ ϕ ∧ ) [ t c w ] × R c w v w ( I + δ ϕ ∧ ) R c w v w ] ∂ δ ϕ = [ δ ϕ ∧ R c w n w ∂ δ ϕ + δ ϕ ∧ [ t c w ] × R c w v w ∂ δ ϕ δ ϕ ∧ R c w v w ∂ δ ϕ ] = [ − [ R c w n w ] × − [ [ t c w ] × R c w v w ] × − [ R c w v w ] × ] 6 × 3 \begin{aligned} \frac{\partial \mathcal{L}^{c}}{\partial \delta\phi} &=\frac{\partial \begin{bmatrix} (I+\delta\phi^{\wedge})R_{cw} & (I+\delta\phi^{\wedge})\left[t_{cw}\right]_\times R_{cw} \\ 0 & (I+\delta\phi^{\wedge})R_{cw} \end{bmatrix}\begin{bmatrix}n^{w} \\v^{w}\end{bmatrix}}{\partial \delta\phi} \\ &=\frac{\partial \begin{bmatrix} (I+\delta\phi^{\wedge})R_{cw}n^{w}+(I+\delta\phi^{\wedge})\left[t_{cw}\right]_\times R_{cw}v^{w} \\ (I+\delta\phi^{\wedge})R_{cw}v^{w} \end{bmatrix}}{\partial \delta\phi} \\ &= \begin{bmatrix} \frac{\delta\phi^{\wedge}R_{cw}n^{w}}{\partial \delta\phi} + \frac{\delta\phi^{\wedge}\left[t_{cw}\right]_{\times}R_{cw}v^{w}}{\partial \delta\phi} \\ \frac{\delta\phi^{\wedge}R_{cw}v^{w}}{\partial \delta\phi} \end{bmatrix} \\ &= \begin{bmatrix} -\left[R_{cw}n^{w}\right]_{\times}- \left[\left[t_{cw}\right]_{\times}R_{cw}v^{w}\right]_{\times}\\ -\left[R_{cw}v^{w}\right]_{\times} \end{bmatrix}_{6\times3} \end{aligned} δϕLc=δϕ[(I+δϕ)Rcw0(I+δϕ)[tcw]×Rcw(I+δϕ)Rcw][nwvw]=δϕ[(I+δϕ)Rcwnw+(I+δϕ)[tcw]×Rcwvw(I+δϕ)Rcwvw]=[δϕδϕRcwnw+δϕδϕ[tcw]×RcwvwδϕδϕRcwvw]=[[Rcwnw]×[[tcw]×Rcwvw]×[Rcwvw]×]6×3同样,计算 ∂ L c ∂ δ ρ \frac{\partial \mathcal{L}^{c}}{\partial \delta\rho} δρLc的时候可以令 δ ϕ = 0 \delta\phi=0 δϕ=0,则
∂ L c ∂ δ ρ = ∂ [ R c w [ t c w + δ ρ ] × R c w 0 R c w ] [ n w v w ] ∂ δ ϕ = ∂ [ R c w n w + [ t c w + δ ρ ] × R c w v w R c w v w ] ∂ δ ρ = [ − [ R c w v w ] × ( t c w + δ ρ ) ∂ δ ρ 0 ] = [ − [ R c w v w ] × 0 ] 6 × 3 \begin{aligned} \frac{\partial \mathcal{L}^{c}}{\partial \delta\rho} &=\frac{\partial \begin{bmatrix} R_{cw} & \left[t_{cw}+\delta\rho\right]_\times R_{cw} \\ 0 & R_{cw} \end{bmatrix}\begin{bmatrix}n^{w} \\v^{w}\end{bmatrix}}{\partial \delta\phi} \\ &=\frac{\partial \begin{bmatrix} R_{cw}n^{w}+\left[t_{cw}+\delta\rho\right]_\times R_{cw}v^{w} \\ R_{cw}v^{w} \end{bmatrix}}{\partial \delta\rho} \\ &= \begin{bmatrix} \frac{-\left[R_{cw}v^{w}\right]_{\times}(t_{cw}+\delta\rho)}{\partial \delta\rho} \\ 0 \end{bmatrix} \\ &= \begin{bmatrix} -\left[R_{cw}v^{w}\right]_{\times} \\ 0 \end{bmatrix}_{6 \times 3} \end{aligned} δρLc=δϕ[Rcw0[tcw+δρ]×RcwRcw][nwvw]=δρ[Rcwnw+[tcw+δρ]×RcwvwRcwvw]=[δρ[Rcwvw]×(tcw+δρ)0]=[[Rcwvw]×0]6×3综合以上,得到雅克比矩阵第三项为
∂ L c ∂ δ ξ = [ − [ R c w n w ] × − [ [ t c w ] × R c w v w ] × − [ R c w v w ] × − [ R c w v w ] × 0 ] 6 × 6 \begin{aligned} \frac{\partial \mathcal{L}^{c}}{\partial \delta\xi} &= \begin{bmatrix} -\left[R_{cw}n^{w}\right]_{\times}- \left[\left[t_{cw}\right]_{\times}R_{cw}v^{w}\right]_{\times} & -\left[R_{cw}v^{w}\right]_{\times} \\ -\left[R_{cw}v^{w}\right]_{\times} & 0 \end{bmatrix}_{6 \times 6} \\ \end{aligned} δξLc=[[Rcwnw]×[[tcw]×Rcwvw]×[Rcwvw]×[Rcwvw]×0]6×6综上所述,线特征重投影误差关于位姿增量的雅克比矩阵为
∂ e l ∂ δ ξ = ∂ e l ∂ l ′ ∂ l ′ ∂ L c ∂ L c ∂ δ ξ ∂ e l ∂ l ′ = 1 l n [ u s − l 1 e s l n 2 v s − l 2 e s l n 2 1 u e − l 1 e e l n 2 v e − l 2 e e l n 2 1 ] 2 × 3 ∂ l ′ ∂ L c = [ K 0 ] 3 × 6 ∂ L c ∂ δ ξ = [ − [ R c w n w ] × − [ [ t c w ] × R c w v w ] × − [ R c w v w ] × − [ R c w v w ] × 0 ] 6 × 6 \begin{aligned} \frac{\partial e_{l}}{\partial \delta\xi} &=\frac{\partial e_{l}}{\partial l^{'}} \frac{\partial l^{'}}{\partial \mathcal{L}^{c}} \frac{\partial \mathcal{L}^{c}}{\partial \delta\xi}\\ \frac{\partial e_{l}}{\partial l^{'}} &= \frac{1}{l_{n}} \begin{bmatrix}u_{s}-\frac{l_{1}e_{s}}{l_{n}^{2}}& v_{s}-\frac{l_{2}e_{s}}{l_{n}^{2}} & 1 \\ u_{e}-\frac{l_{1}e_{e}}{l_{n}^{2}} & v_{e}-\frac{l_{2}e_{e}}{l_{n}^{2}} & 1\end{bmatrix}_{2 \times 3} \\ \frac{\partial l^{'}}{\partial \mathcal{L}^{c}} &= \begin{bmatrix} \mathcal{K} & 0 \end{bmatrix}_{3 \times 6} \\ \frac{\partial \mathcal{L}^{c}}{\partial \delta\xi} &= \begin{bmatrix} -\left[R_{cw}n^{w}\right]_{\times}-\left[\left[t_{cw}\right]_{\times}R_{cw}v^{w}\right]_{\times} &-\left[R_{cw}v^{w}\right]_{\times} \\ -\left[R_{cw}v^{w}\right]_{\times} &0\end{bmatrix}_{6 \times 6} \end{aligned} δξellelLclδξLc=lelLclδξLc=ln1[usln2l1esueln2l1eevsln2l2esveln2l2ee11]2×3=[K0]3×6=[[Rcwnw]×[[tcw]×Rcwvw]×[Rcwvw]×[Rcwvw]×0]6×6其中 l n = l 1 2 + l 2 2 , e s = p s T l ′ , e e = p e T l ′ l_{n}=\sqrt{l_{1}^{2}+l_{2}^{2}},e_{s}=p_{s}^{T}l^{'},e_{e}=p_{e}^{T}l^{'} ln=l12+l22 ,es=psTl,ee=peTl
可以看出,该雅克比矩阵大小为2x6

3. 线特征重投影误差关于空间直线正交表示增量的雅克比矩阵

普吕克坐标属于过参数表示,在后端优化中会增加优化的计算量,所以在后端优化时可以使用另一种四参数的正交表示。
设普吕克坐标为 L = [ n T , v T ] T \mathcal{L}=[n^{T},v^{T}]^{T} L=[nT,vT]T,其正交表示为
( U , W ) ∈ S O ( 3 ) × S O ( 2 ) (U,W)\in SO(3) \times SO(2) (U,W)SO(3)×SO(2)通过对矩阵 [ n ∣ v ] [n|v] [nv]进行QR分解即可获得,因为 n T v = 0 n^{T}v=0 nTv=0,所以其分解为
Q R ( [ n ∣ v ] ) = U [ w 1 0 0 w 2 0 0 ] W = [ c o s ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ] = [ w 1 − w 2 w 2 w 1 ] QR([n|v])=U\begin{bmatrix} w_{1} & 0 \\ 0 & w_{2} \\ 0 & 0\end{bmatrix} \\ W=\begin{bmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta) \end{bmatrix}=\begin{bmatrix} w_{1} & -w_{2} \\ w_{2} & w_{1} \end{bmatrix} QR([nv])=U w1000w20 W=[cos(θ)sin(θ)sin(θ)cos(θ)]=[w1w2w2w1]其中 w 1 , w 2 > 0 , θ ∈ ( 0 , π 2 ] w_{1},w_{2}>0,\theta \in (0,\frac{\pi}{2}] w1,w2>0,θ(0,2π]
事实上,从普吕克坐标到正交表示可以一步写出
[ n ∣ v ] = [ n ∥ n ∥ v ∥ v ∥ n × v ∥ n × v ∥ ] [ ∥ n ∥ 0 0 ∥ v ∥ 0 0 ] [n|v]=\begin{bmatrix} \frac{n}{\left \| n \right \|} & \frac{v}{\left \| v \right \|} & \frac{n \times v}{\left \| n \times v \right \|} \end{bmatrix} \begin{bmatrix} \left \| n \right \| & 0 \\ 0 & \left \| v \right \| \\ 0 & 0 \end{bmatrix} [nv]=[nnvvn×vn×v] n000v0 正交表示转化成普吕克坐标
L = [ w 1 u 1 w 2 u 2 ] \mathcal{L}=\begin{bmatrix} w_{1}u_{1} \\ w_{2}u_{2} \end{bmatrix} L=[w1u1w2u2]其中 u i u_{i} ui表示矩阵 U U U的第 i i i
正交表示在后端的BA中用于优化空间直线时来作为直线的表示形式,其增量可以定义为 δ θ = [ δ θ U T , δ θ W ] \delta\theta=[\delta\theta_{U}^{T},\delta\theta_{W}] δθ=[δθUT,δθW],其中 δ θ U \delta\theta_{U} δθU用来更新 U U U,是一个三维向量, δ θ W \delta\theta_{W} δθW用来更新 W W W,是一个单独的参数而非向量,所以直线正交表示可以定义
( U ∗ , W ∗ ) = ( U , W ) ⊕ δ θ (U^{*},W^{*})=(U,W)\oplus \delta\theta (U,W)=(U,W)δθ其中
U ∗ = e x p ( [ δ θ U ] × ) U W ∗ = [ c o s ( δ θ W ) − s i n ( δ θ W ) s i n ( δ θ W )     c o s ( δ θ W ) ] W \begin{aligned} U^{*} &= exp([\delta\theta_{U}]_{\times})U\\ W^{*}&=\begin{bmatrix}cos(\delta\theta_{W}) & -sin(\delta\theta_{W}) \\ sin(\delta\theta_{W}) & \:\:\: cos(\delta\theta_{W}) \end{bmatrix}W \end{aligned} UW=exp([δθU]×)U=[cos(δθW)sin(δθW)sin(δθW)cos(δθW)]W利用链式法则,可以求得
∂ e l ∂ δ θ = ∂ e l ∂ l ′ ∂ l ′ ∂ L c ∂ L c ∂ L w ∂ L w ∂ δ θ \frac{\partial e_{l}}{\partial \delta\theta}=\frac{\partial e_{l}}{\partial l^{'}} \frac{\partial l^{'}}{\partial \mathcal{L}^{c}} \frac{\partial \mathcal{L}^{c}}{\partial \mathcal{L}^{w}}\frac{\partial \mathcal{L}^{w}}{\partial \delta\theta} δθel=lelLclLwLcδθLw其中第一项和第二项和前一节描述的一样,第三项为
∂ L c ∂ L w = ∂ H c w L w ∂ L w = H c w \begin{aligned} \frac{\partial \mathcal{L}^{c}}{\partial \mathcal{L}^{w}} &=\frac{\partial \mathcal{H}_{cw}\mathcal{L}^{w}}{\partial \mathcal{L}^{w}} \\ &= \mathcal{H}_{cw} \end{aligned} LwLc=LwHcwLw=Hcw第四项为
∂ L w ∂ δ θ = ∂ [ w 1 u 1 w 2 u 2 ] ∂ δ θ = [ ∂ ( w 1 u 1 ) ∂ δ θ U ∂ ( w 1 u 1 ) ∂ δ θ W ∂ ( w 2 u 2 ) ∂ δ θ U ∂ ( w 2 u 2 ) ∂ δ θ W ] \begin{aligned} \frac{\partial \mathcal{L}^{w}}{\partial \delta\theta} &=\frac{\partial \begin{bmatrix} w_{1}u_{1} \\ w_{2}u_{2} \end{bmatrix}}{\partial \delta\theta} \\ &=\begin{bmatrix} \frac{\partial(w_{1}u_{1})}{\partial \delta\theta_{U}} & \frac{\partial(w_{1}u_{1})}{\partial \delta\theta_{W}} \\ \frac{\partial(w_{2}u_{2})}{\partial \delta\theta_{U}} & \frac{\partial(w_{2}u_{2})}{\partial \delta\theta_{W}} \end{bmatrix} \\ \end{aligned} δθLw=δθ[w1u1w2u2]=[δθU(w1u1)δθU(w2u2)δθW(w1u1)δθW(w2u2)]其中
∂ ( w 1 u 1 ) ∂ δ θ U = w 1 lim ⁡ δ θ U → 0 e x p ( [ δ θ U ] × ) u 1 − u 1 δ θ U = w 1 lim ⁡ δ θ U → 0 ( I + [ δ θ U ] × ) u 1 − u 1 δ θ U = w 1 lim ⁡ δ θ U → 0 [ δ θ U ] × u 1 δ θ U = w 1 lim ⁡ δ θ U → 0 − [ u 1 ] × δ θ U δ θ U = − [ w 1 u 1 ] × \begin{aligned} \frac{\partial(w_{1}u_{1})}{\partial \delta\theta_{U}} &= w_{1}\lim_{\delta\theta_{U} \rightarrow0} \frac{exp([\delta\theta_{U}]_{\times})u_{1}-u_{1}}{\delta\theta_{U}} \\ &= w_{1}\lim_{\delta\theta_{U} \rightarrow0} \frac{(I+[\delta\theta_{U}]_{\times})u_{1}-u_{1}}{\delta\theta_{U}} \\ &= w_{1}\lim_{\delta\theta_{U} \rightarrow0} \frac{[\delta\theta_{U}]_{\times}u_{1}}{\delta\theta_{U}} \\ &= w_{1}\lim_{\delta\theta_{U} \rightarrow0} \frac{-[u_{1}]_{\times}\delta\theta_{U}}{\delta\theta_{U}} \\ &= -[w_{1}u_{1}]_{\times} \end{aligned} δθU(w1u1)=w1δθU0limδθUexp([δθU]×)u1u1=w1δθU0limδθU(I+[δθU]×)u1u1=w1δθU0limδθU[δθU]×u1=w1δθU0limδθU[u1]×δθU=[w1u1]×同理 ∂ ( w 2 u 2 ) ∂ δ θ U = − [ w 2 u 2 ] × \frac{\partial(w_{2}u_{2})}{\partial \delta\theta_{U}}=-[w_{2}u_{2}]_{\times} δθU(w2u2)=[w2u2]×
∂ ( w 1 u 1 ) ∂ δ θ W = ∂ w 1 ∂ δ θ W u 1 = lim ⁡ δ θ W → 0 w 1 ∗ − w 1 δ θ W u 1 \begin{aligned} \frac{\partial(w_{1}u_{1})}{\partial \delta\theta_{W}} &=\frac{\partial w_{1}}{\partial \delta\theta_{W}}u_{1} \\ &= \lim_{\delta\theta_{W} \rightarrow0} \frac{w_{1}^{*}-w_{1}}{\delta\theta_{W}}u_{1} \\ \end{aligned} δθW(w1u1)=δθWw1u1=δθW0limδθWw1w1u1其中
W = [ c o s ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ] = [ w 1 − w 2 w 2 w 1 ] W ∗ = [ c o s ( δ θ W ) − s i n ( δ θ W ) s i n ( δ θ W )     c o s ( δ θ W ) ] [ w 1 − w 2 w 2 w 1 ] = [ c o s ( δ θ W ) w 1 − s i n ( δ θ W ) w 2 − c o s ( δ θ W ) w 2 − s i n ( δ θ W ) w 1 c o s ( δ θ W ) w 2 + s i n ( δ θ W ) w 1     c o s ( δ θ W ) w 1 − s i n ( δ θ W ) w 2 ] \begin{aligned} W&=\begin{bmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta) \end{bmatrix}=\begin{bmatrix} w_{1} & -w_{2} \\ w_{2} & w_{1} \end{bmatrix} \\ W^{*}&=\begin{bmatrix}cos(\delta\theta_{W}) & -sin(\delta\theta_{W}) \\ sin(\delta\theta_{W}) & \:\:\: cos(\delta\theta_{W}) \end{bmatrix} \begin{bmatrix} w_{1} & -w_{2} \\ w_{2} & w_{1} \end{bmatrix} \\ &= \begin{bmatrix} cos(\delta\theta_{W})w_{1}-sin(\delta\theta_{W})w_{2} & -cos(\delta\theta_{W})w_{2}-sin(\delta\theta_{W})w_{1} \\ cos(\delta\theta_{W})w_{2}+sin(\delta\theta_{W})w_{1} & \:\:\:cos(\delta\theta_{W})w_{1}-sin(\delta\theta_{W})w_{2} \end{bmatrix} \end{aligned} WW=[cos(θ)sin(θ)sin(θ)cos(θ)]=[w1w2w2w1]=[cos(δθW)sin(δθW)sin(δθW)cos(δθW)][w1w2w2w1]=[cos(δθW)w1sin(δθW)w2cos(δθW)w2+sin(δθW)w1cos(δθW)w2sin(δθW)w1cos(δθW)w1sin(δθW)w2]
∂ ( w 1 u 1 ) ∂ δ θ W = lim ⁡ δ θ W → 0 w 1 ∗ − w 1 δ θ W u 1 = lim ⁡ δ θ W → 0 c o s ( δ θ W ) w 1 − s i n ( δ θ W ) w 2 − w 1 δ θ W u 1 = lim ⁡ δ θ W → 0 − ( 1 − c o s ( δ θ W ) ) w 1 − s i n ( δ θ W ) w 2 δ θ W u 1 = lim ⁡ δ θ W → 0 − δ θ W 2 2 w 1 − δ θ W w 2 δ θ W u 1 = lim ⁡ δ θ W → 0 ( − δ θ W 2 w 1 − w 2 ) u 1 = − w 2 u 1 \begin{aligned} \frac{\partial(w_{1}u_{1})}{\partial \delta\theta_{W}} &= \lim_{\delta\theta_{W} \rightarrow0} \frac{w_{1}^{*}-w_{1}}{\delta\theta_{W}}u_{1} \\ &= \lim_{\delta\theta_{W} \rightarrow0} \frac{cos(\delta\theta_{W})w_{1}-sin(\delta\theta_{W})w_{2}-w_{1}}{\delta\theta_{W}}u_{1} \\ &= \lim_{\delta\theta_{W} \rightarrow0} \frac{-(1-cos(\delta\theta_{W}))w_{1}-sin(\delta\theta_{W})w_{2}}{\delta\theta_{W}}u_{1} \\ &= \lim_{\delta\theta_{W} \rightarrow0} \frac{-\frac{\delta\theta_{W}^{2}}{2}w_{1}-\delta\theta_{W}w_{2}}{\delta\theta_{W}}u_{1} \\ &= \lim_{\delta\theta_{W} \rightarrow0}(-\frac{\delta\theta_{W}}{2}w_{1}-w_{2})u_{1} \\ &= -w_{2}u_{1} \end{aligned} δθW(w1u1)=δθW0limδθWw1w1u1=δθW0limδθWcos(δθW)w1sin(δθW)w2w1u1=δθW0limδθW(1cos(δθW))w1sin(δθW)w2u1=δθW0limδθW2δθW2w1δθWw2u1=δθW0lim(2δθWw1w2)u1=w2u1同理 ∂ ( w 2 u 2 ) ∂ δ θ W = w 1 u 2 \frac{\partial(w_{2}u_{2})}{\partial \delta\theta_{W}}=w_{1}u_{2} δθW(w2u2)=w1u2,所以
∂ L w ∂ δ θ = [ ∂ ( w 1 u 1 ) ∂ δ θ U ∂ ( w 1 u 1 ) ∂ δ θ W ∂ ( w 2 u 2 ) ∂ δ θ U ∂ ( w 2 u 2 ) ∂ δ θ W ] = [ − [ w 1 u 1 ] × − w 2 u 1 − [ w 2 u 2 ] ×     w 1 u 2 ] 6 × 4 \begin{aligned} \frac{\partial \mathcal{L}^{w}}{\partial \delta\theta} &=\begin{bmatrix} \frac{\partial(w_{1}u_{1})}{\partial \delta\theta_{U}} & \frac{\partial(w_{1}u_{1})}{\partial \delta\theta_{W}} \\ \frac{\partial(w_{2}u_{2})}{\partial \delta\theta_{U}} & \frac{\partial(w_{2}u_{2})}{\partial \delta\theta_{W}} \\ \end{bmatrix} \\ &=\begin{bmatrix} -[w_{1}u_{1}]_{\times} & -w_{2}u_{1} \\ -[w_{2}u_{2}]_{\times} & \:\:\:w_{1}u_{2} \end{bmatrix}_{6 \times 4} \end{aligned} δθLw=[δθU(w1u1)δθU(w2u2)δθW(w1u1)δθW(w2u2)]=[[w1u1]×[w2u2]×w2u1w1u2]6×4综上所述,线特征重投影误差关于位姿增量的雅克比矩阵为
∂ e l ∂ δ θ = ∂ e l ∂ l ′ ∂ l ′ ∂ L c ∂ L c ∂ L w ∂ L w ∂ δ θ ∂ e l ∂ l ′ = 1 l n [ u s − l 1 e s l n 2 v s − l 2 e s l n 2 1 u e − l 1 e e l n 2 v e − l 2 e e l n 2 1 ] 2 × 3 ∂ l ′ ∂ L c = [ K 0 ] 3 × 6 ∂ L c ∂ L w = H c w   6 × 6 ∂ L w ∂ δ θ = [ − [ w 1 u 1 ] × − w 2 u 1 − [ w 2 u 2 ] ×      w 1 u 2 ] 6 × 4 \begin{aligned} \frac{\partial e_{l}}{\partial \delta\theta}& =\frac{\partial e_{l}}{\partial l^{'}} \frac{\partial l^{'}}{\partial \mathcal{L}^{c}} \frac{\partial \mathcal{L}^{c}}{\partial \mathcal{L}^{w}}\frac{\partial \mathcal{L}^{w}}{\partial \delta\theta} \\ \frac{\partial e_{l}}{\partial l^{'}} &= \frac{1}{l_{n}} \begin{bmatrix}u_{s}-\frac{l_{1}e_{s}}{l_{n}^{2}}& v_{s}-\frac{l_{2}e_{s}}{l_{n}^{2}} & 1 \\ u_{e}-\frac{l_{1}e_{e}}{l_{n}^{2}} & v_{e}-\frac{l_{2}e_{e}}{l_{n}^{2}} & 1\end{bmatrix}_{2 \times 3} \\ \frac{\partial l^{'}}{\partial \mathcal{L}^{c}} &= \begin{bmatrix} \mathcal{K} & 0 \end{bmatrix}_{3 \times 6} \\ \frac{\partial \mathcal{L}^{c}}{\partial \mathcal{L}^{w}} &= \mathcal{H}_{cw \: 6 \times 6} \\ \frac{\partial \mathcal{L}^{w}}{\partial \delta\theta} &= \begin{bmatrix} -\left[w_{1}u_{1}\right]_{\times} & -w_{2}u_{1} \\ -\left[w_{2}u_{2}\right]_{\times} & \:\:\:\:w_{1}u_{2} \end{bmatrix}_{6 \times 4} \end{aligned} δθellelLclLwLcδθLw=lelLclLwLcδθLw=ln1[usln2l1esueln2l1eevsln2l2esveln2l2ee11]2×3=[K0]3×6=Hcw6×6=[[w1u1]×[w2u2]×w2u1w1u2]6×4可以看出,该雅克比矩阵大小为2x4。其中 l n = l 1 2 + l 2 2 , e s = p s T l ′ , e e = p e T l ′ l_{n}=\sqrt{l_{1}^{2}+l_{2}^{2}},e_{s}=p_{s}^{T}l^{'},e_{e}=p_{e}^{T}l^{'} ln=l12+l22 ,es=psTl,ee=peTl u 1 , u 2 u_{1},u_{2} u1,u2为正交表示 U U U的前两列, w 1 , w 2 w_{1},w_{2} w1,w2 W W W的元素,分别来自
[ n ∣ v ] = [ n ∥ n ∥ v ∥ v ∥ n × v ∥ n × v ∥ ] [ ∥ n ∥ 0 0 ∥ v ∥ 0 0 ] = U [ w 1 0 0 w 2 0 0 ] \begin{aligned} [n|v]&=\begin{bmatrix} \frac{n}{\left \| n \right \|} & \frac{v}{\left \| v \right \|} & \frac{n \times v}{\left \| n \times v \right \|} \end{bmatrix} \begin{bmatrix} \left \| n \right \| & 0 \\ 0 & \left \| v \right \| \\ 0 & 0 \end{bmatrix} \\ &= U\begin{bmatrix} w_{1} & 0 \\ 0 & w_{2} \\ 0 & 0\end{bmatrix} \end{aligned} [nv]=[nnvvn×vn×v] n000v0 =U w1000w20

4. g2o构建相应的顶点边

更新中

参考文献

[1] 谢晓佳. 基于点线综合特征的双目视觉SLAM方法[D]. 浙江:浙江大学,2017.
[2] BARTOLI A, STURM P. The 3D line motion matrix and alignment of line reconstructions[J]. International Journal of Computer Vision,2004,57(3):159-178.
[3] 高翔. 视觉SLAM十四讲[M].

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ORBSLAM2点线融合】线特征图模型构建 的相关文章

  • 深入解析Java中的==和equals方法:如何正确比较对象

    目录 一 概述 二 操作符 三 equals方法 四 字符串的特殊性 五 如何覆盖equals方法 5 1 覆盖equals方法遵循的原则 5 2 覆盖equals方法的步骤 六 和equals区别 七 应用场景 总结 一 概述 在介绍 和
  • 【Netty4】netty ByteBuf(三)如何释放ByteBuf

    相关文章 netty ByteBuf 一 如何创建ByteBuf对象 netty ByteBuf 二 引用计数对象 reference counted objects netty ByteBuf 三 如何释放ByteBuf 概述 经过前面2
  • 【论文复现】—— 基于最小平方中值的点云平面拟合算法

    目录 一 算法原理 1 论文概述 2 参考文献 二 代码实现 三 结果展示 一 算法原理 1 论文概述 三维扫描获取待测对象点云时 不可避免地会出现噪声点和异常值 严重影响点云平面参数估计和平面拟合精度 采用随机抽样一致性 RANSAC 和
  • 【Qt connect传参方式及lambda函数传参方式详解】

    Qt connect传参方式及lambda函数传参方式详解 一 一般connect用法 1 无参用法 设槽函数 void buttonClicked 1 1 信号 槽均无参数 connect myButton SIGNAL clicked
  • codeblocks 安装 MinGW-w64 和 安装 wxWidgets

    1 安装 MinGW w64 参考链接 Code Blocks mingw64 编译64位程序配置方法 下载链接 https sourceforge net projects mingw w64 files Toolchains targe
  • 鸿蒙ide使用

    隔2个月时间 发现新东西增加不少 还记得第一次收集各种资料 看产业前景 现在可以下定决心 启动鸿蒙专题学习 ios架构师学习路上 更加的艰苦了 这就是这个行业 来链接 HarmonyOS应用开发 服务开发 开发 UI Java UI框架 J
  • 【人体姿态估计2】Real-time Multi-person 2d pose estimation using part affinity fields_2017

    文章目录 1 Introduction 2 Method 2 1 Simultaneous Detection and Association 2 2 Confidence Maps for part detection 2 3 Part
  • 五、命令模式

    五 命令模式 1 模式结构及结构图 模式结构 1 1 命令抽象类 Command 声明执行命令的接口 具有命令执行的抽象方法execute 1 2 具体命令类 concrete Command 实现命令接口 它具有接收者对象 并调用接收者对
  • 指针数组和数组指针的区别

    指针数组和数组指针的区别 指针数组 array of pointers 即用于存储指针的数组 也就是数组元素都是指针 数组指针 a pointer to an array 即指向数组的指针 还要注意的是他们用法的区别 下面举例说明 int
  • java. gc原理面试_一文带你深入JAVA GC(垃圾回收机制)面试讲解!!!

    1 什么是GC 大白话说就是垃圾回收机制 内存空间是有限的 你创建的每个对象和变量都会占据内存 gc做的就是对象清除将内存释放出来 这就是GC要做的事 2 需要GC的区域 说起垃圾回收的场所 了解过JVM Java Virtual Mach
  • 扩频技术详解

    扩频是什么 扩频是一种信息处理传输技术 扩频技术是利用同欲传输数据 信息 无关的码对被传输信号扩展频谱 使之占有远远超过被传送信息所必需的最小带宽 扩频技术原理 在发端输入的信息先经信息调制形成数字信号 然后由扩频码发生器产生的扩频码序列去
  • Mac 上无法使用netstat的-p参数

    解决方法 改为使用lsof命令 例 lsof i P grep i listen 问题解析 如果像linux一样使用netstat tunlp 会收到如下报错 netstat option requires an argument p Us
  • js实现字母序号自动递增

    在实现一个考试管理系统的时候 可能会遇到试题的选项不是固定的情况 需要灵活的增加选项 选项自动递增 A B C D F 通过Unicode编码的方式可以灵活实现 本案例是基于layui表格实现的 如果是其他形式 可以修改部分代码 首先获取到
  • urlopen error [Errno 10061] 解决(附python 获取状态码)

    urllib2 URLError
  • 短连接和保持连接有什么区别,举个具体的网站开发的例子说明两者之间的区别

    短连接和保持连接是指客户端和服务器之间的网络连接模式 短连接是指客户端请求服务器后 发送完请求并接收到服务器的响应后 就立即关闭与服务器的连接 在下一次请求时 需要重新建立连接 这种模式下 服务器不需要在后台一直保持与客户端的连接 可以更好
  • 电阻分压器的阻值大小

    原文连接 https electronics stackexchange com questions 28897 how to choose value of resistor in voltage divider 在选择电阻作为分压器时
  • 一些常见warning的原因和解决方法

    在入职三周后 终于赶齐了接手项目落下两个月的项目 有了一些自己的空闲时间对项目进行整理 主要整理包括类目的整合 从原来一个系统文件夹下几百个文件整改为以MVC设计思想为原则的分文件夹整理类目 井然有序了很多 也不需要再用查找关键字来寻找想要
  • 单主机多网卡位于同一个网段

    一个设备有两张网卡 一个以太网卡 一个wifi无线网卡 如route命令输出的 eth0的IP地址是10 12 39 10 wlan0的IP地址是10 12 39 11 当eth0的RJ45接口的网线连上 wlan0的无线wifi不连上 发
  • Mysql语句整理大全

    综合使用 查询 目录 综合使用 书写顺序 select distinct from 表名 where 限制条件 group by 分组依据 having 过滤条件 order by limit 展示条数 执行顺序 from 查询 where
  • python爬虫对网页进行数据抓取

    1 拿到网页源代码 1 1 先看网址 和请求方式 1 2导入requests模块 1 3 发现爬不出来 是因为豆瓣做了伪装 1 3需要更换头部 1 4需要设置utf 8 要不然会乱码2 提取想要的数据 2 1 加载re模块 并且进行预加载

随机推荐

  • 相位误差补偿表LUT-创建

    LUT 1 相位误差补偿表 就是建立一个查找表对由gamma效应造成的投影仪光栅非正弦性进行一个补偿 2 相关资料可以看李中伟博士的论文 或者其他资料 3 步骤 3 1 获得理想相位图 用多步相移代替理想相位 3 2 获得实际相位图 3 3
  • 六、图形程序设计

    1 Swing概述 Swing是指 被绘制的 用户图形界面类 AWT是指像事件处理这样的窗口工具箱的底层机制 使用Swing的好处 Swing拥有一个丰富 便捷的用户界面元素合集 Swing对底层平台依赖的很少 因此与平台相关的bug很少
  • C语言编程 三角形图形绘制教程

    C语言编程 三角形图形绘制教程 三角形是计算机图形学中最基本的图形元素之一 也是很多图形和游戏中的重要组成部分 本文将介绍如何使用C语言编程绘制三角形 包括原始的点绘制方法和简单的三角形填充算法 C语言编程 三角形图形绘制教程 绘制三角形的
  • 高帧率手机 Flutter 列表慢慢拖动的时候会有明显的抖动

    高帧率手机上 Flutter列表慢慢拖动的时候会感觉到明显的抖动现象 比如 一加手机输入的运行频率为120hz 而显示屏的运行频率为90hz 滚动时 这种不匹配会导致性能下降 google团队通过以下的方法来解决此问题 void main
  • 在react中使用接口请求的方式

    在 React 中使用接口 数据交互的关键 React 是一个流行的 JavaScript 前端框架 用于构建交互式的用户界面 在实际开发中 我们经常需要与后端服务器进行数据交互 这就需要使用接口来获取和发送数据 本文将介绍在 React
  • 网络安全协议之IPSec协议

    简介 IPSec即IP安全协议 网络层在传输的时候可能会遭到攻击 这时我们需要用IPSec协议来进行保护 就像使用SSL协议来保护传输层一样 IPSec经常用于建立虚拟专用网络 VPN 它通过对IP数据包进行加密和认证 来提供两台计算机之间
  • 热力图(Thermodynamic diagram)绘制MATLAB代码详解

    目录 Preface 1 表格型热力图 Tabular thermal diagram 相关系数矩阵热力图 Thermal diagram of correlation coefficient matrix Thermal diagram
  • python-pcl安装和使用

    安装 因为工作中要进行点云数据的显示 因此要安装python pcl 网上搜了很多教程 但是安装中还是遇到很多问题 这里把自己遇到的和可能遇到的问题总结一下 环境 Ubuntu 14 04 python 2 7 6 pcl 1 7 0 网上
  • java反射-通过反射操作注解

    java反射 操作注解 创建注解 创建类注解 类名的注解 Target ElementType TYPE Retention RetentionPolicy RUNTIME interface Tablewang String value
  • 【调制BFSK】二进制频移键控FSK的数字调制(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 相移键控 PS K 是利用载波相位直接表示
  • java简单线程同步方法(volatile)实现线程同步

    学习笔记 多线程中的非同步问题主要出现在对域的读写上 如果让域自身避免这个问题 则就不需要修改操作该域的方法 用final域 有锁保护的域和volatile域可以避免非同步的问题 volatile关键字为域变量的访问提供了一种免锁机制 使用
  • React18.x + i18next + antd 国际化正确使用姿势及避坑指南

    如果你使用这个教程还不能够解决你的问题的话 直接私信我 免费一对一给你解决 一 使用vite创建一个react项目 具体的创建方法大家参考vite官方文档 大概的操作如下 如果需要更详细的 大家去自行搜索即可 pnpm create vit
  • C# 动态加载Treeview

    失败的方法一 public void showTreeview string sqlContent SELECT monitorType monitorContent FROM monitorcontent DataTable dtCont
  • Error Domain=DVTMachOErrorDomain Code=0“Found an unexpected Mach-O header code_ 0x72613c21

    Failed to generate distribution items with error Error Domain DVTMachOErrorDomain Code 0 Found an unexpected Mach O head
  • Qt_Qt报错No rule to make target

    第一种情况 Qt编译工程时候 所有用到的源文件包括头文件和库文件的 总路径长度不能超过190个左右字符 一旦超过 就会提示找不到那个文件 这个可能是Qt的makefile的机制问题 解决方法 工程文件夹名字命名尽量比较短 而且工程目录文件夹
  • 【java】for和foreach的区别

    一 概述 普通for循环在遍历集合时使用下标来定位集合中的元素 java在JDK1 5开始支持foreach循环 foreach在一定程度上简化了对集合的遍历 但某些情况下 foreach是不能完全代替for循环的 限制场景 1 forea
  • IC卡、ID卡、CPU卡、RFID和NFC的区别

    ID卡 ID卡是早期的电子标签 只有一个ID号 不可以存储任何数据 故叫ID卡 ID卡没有算法 不可写入数据 其ID出厂一次性写入 应用人员只可读出卡号加以利用 ID卡容易复制 安全性较低 应用 主要应用在门禁系统 企业工牌 安全性 ID
  • 【Photon Voice】介绍

    入门 Photon Voice 2是Photon Voice的后续版本 它带来了以下功能 改进了API和更好的Unity组件 与PUN2兼容 灵活性 由于现在它与PUN2分离 它可以与Photon Realtime Photon Bolt
  • PacketTracer简单使用】

    进入软件后 我所用的版本是5 3 汉化过 看到如下界面 搭建网络拓扑 上图中的1 最大空白地方叫工作空间 搭建网络拓扑的地方 分逻辑和物理空间 2处的两个图标可以切换模式 图中的3 我们需要选取的网络设备名称 如路由器 接线器 4就是具体型
  • 【ORBSLAM2点线融合】线特征图模型构建

    在SLAM中 通常用BA Bundle Adjustment 来实现多个三维点和不同相机位姿的优化 本文描述如何建立基于线特征的图优化 并推导相应的雅克比矩阵 并用g2o实现相应的类 1 线特征误差及观测模型 假设相机位姿为 T c w T