继续EKF建图公式推导。

构建反光板地图和定位篇有很大部分的重复。因为上一篇其实也包含了建图。

如果已经有初始的反光板地图,且初始的反光板地图不允许优化,且允许添加新的反光板,则该公式和上一篇反光板定位EKF公式推导所使用的公式一模一样;

如果已经有初始的反光板地图,且初始的反光板地图允许被优化,且允许添加新的反光板,该种相当于反光板地图的更新,暂时不考虑反光板地图的更新;

本部分只考虑没有初始反光板地图的情况,从零开始添加反光板。

建图EKF公式推导

初始的状态空间为x,y,θx,y,\thetax,y,θ,在建图过程中,该状态空间在增长。

状态空间

假如当前的状态空间中有NNN个新增的反光板(N>=0N>=0N>=0),此时,状态空间为:

X=[xyθmx1my1...mxNmyN]TX=\begin{bmatrix} x & y &\theta & m_x^1 & m_y^1 &...& m_x^N & m_y^N\end{bmatrix}^TX=[x​y​θ​mx1​​my1​​...​mxN​​myN​​]T

运动模型-预测

(1)位姿预测:

初始位姿X0=[x0y0θ0]TX_0=\begin{bmatrix}x_0 & y_0 &\theta_0\end{bmatrix}^TX0​=[x0​​y0​​θ0​​]T,一般假设为单位阵,也可以指定初始位置。

运动方程可以写为:

[xtytθtmx1my1...mxNmyN]2∗N+3=[xt−1yt−1θt−1mx1my1...mxNmyN]2∗N+3+[vtΔtcos⁡(θt−1+ωtΔt/2)vtΔtsin⁡(θt−1+ωtΔt/2)ωtΔt00...00]2∗N+3\begin{bmatrix}x_t \\ y_t \\ \theta_t \\ m_x^1 \\ m_y^1 \\...\\ m_x^N \\ m_y^N\end{bmatrix}_{2*N+3} = \begin{bmatrix}x_{t-1} \\ y_{t-1} \\ \theta_{t-1 }\\ m_x^1 \\ m_y^1 \\...\\ m_x^N \\ m_y^N\end{bmatrix}_{2*N+3} + \begin{bmatrix}v_t\Delta t\cos(\theta_{t-1}+\omega_t\Delta t / 2) \\ v_t\Delta t\sin(\theta_{t-1}+\omega_t\Delta t / 2) \\ \omega_t\Delta t \\ 0 \\ 0\\...\\0\\0\end{bmatrix}_{2*N+3}⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​xt​yt​θt​mx1​my1​...mxN​myN​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​2∗N+3​=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​xt−1​yt−1​θt−1​mx1​my1​...mxN​myN​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​2∗N+3​+⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​vt​Δtcos(θt−1​+ωt​Δt/2)vt​Δtsin(θt−1​+ωt​Δt/2)ωt​Δt00...00​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​2∗N+3​

假设轮速计的线速度和角速度服从均值为0的高斯分布,即控制的协方差为Σu\Sigma_uΣu​

Σu=[σv200σω2]2∗2\Sigma_u=\begin{bmatrix}\sigma_{v}^2 & 0 \\ 0 & \sigma_{\omega}^2\end{bmatrix}_{2*2}Σu​=[σv2​0​0σω2​​]2∗2​

(2)协方差预测

初始时刻位姿的协方差需要给定初值,手动给定:

Σξ,0=[Σx000Σy000Σθ]3∗3\Sigma_{\xi,0} =\begin{bmatrix}\Sigma_{x} & 0 & 0 \\ 0 & \Sigma_{y} & 0 \\ 0 & 0 & \Sigma_{\theta}\end{bmatrix}_{3*3}Σξ,0​=⎣⎡​Σx​00​0Σy​0​00Σθ​​⎦⎤​3∗3​

状态量在ttt时刻的协方差预测方程为:Σt=Gξ,tΣξ,t−1Gξ,tT+GuΣuGuT\Sigma_{t} = G_{\xi,t}\Sigma_{\xi,t-1}G_{\xi,t}^T+G_u\Sigma_uG_u^TΣt​=Gξ,t​Σξ,t−1​Gξ,tT​+Gu​Σu​GuT​

其中:

Gξ,tG_{\xi,t}Gξ,t​是运动模型关于机器人位姿ξt−1\xi _{t-1}ξt−1​的雅克比:

Gξ,t=∂Xt∂ξt−1=[10−vtΔtsin⁡(θt−1+ωtΔt/2)01vtΔtcos⁡(θt−1+ωtΔt/2)001000000.........000000](2∗N+3)∗3G_{\xi,t} = \frac{\partial X_t}{\partial\xi_{t-1}}=\begin{bmatrix}1 & 0 & -v_t\Delta t\sin(\theta_{t-1}+\omega_t\Delta t / 2) \\ 0 & 1 & v_t\Delta t\cos(\theta_{t-1}+\omega_t\Delta t / 2) \\ 0 & 0 & 1 \\ 0&0&0 \\ 0&0&0\\ ... & ...&...\\ 0&0&0\\0&0&0\end{bmatrix}_{(2*N+3)*3}Gξ,t​=∂ξt−1​∂Xt​​=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​10000...00​01000...00​−vt​Δtsin(θt−1​+ωt​Δt/2)vt​Δtcos(θt−1​+ωt​Δt/2)100...00​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​(2∗N+3)∗3​

GuG_uGu​是运动模型关于控制(轮速计线速度和角速度)u=[vtωt]Tu = \begin{bmatrix}v_t & \omega_t\end{bmatrix}^Tu=[vt​​ωt​​]T的雅克比:

Gu=∂Xt∂u=[Δtcos⁡(θt−1+ωtΔt/2)−vtΔt2sin⁡(θt−1+ωtΔt/2)2Δtsin⁡(θt−1+ωtΔt/2)vtΔt2cos⁡(θt−1+ωtΔt/2)20Δt0000......0000](2∗N+3)∗2G_u = \frac{\partial X_t}{\partial u}=\begin{bmatrix}\Delta t\cos(\theta_{t-1}+\omega_t\Delta t / 2) & \frac{ -v_t\Delta t^2\sin(\theta_{t-1}+\omega_t\Delta t / 2)}{2} \\ \Delta t\sin(\theta_{t-1}+\omega_t\Delta t / 2) & \frac{ v_t\Delta t^2\cos(\theta_{t-1}+\omega_t\Delta t / 2)}{2} \\ 0 & \Delta t \\ 0&0 \\ 0&0\\ ...& ...\\ 0&0\\0&0\end{bmatrix}_{(2*N+3)*2}Gu​=∂u∂Xt​​=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​Δtcos(θt−1​+ωt​Δt/2)Δtsin(θt−1​+ωt​Δt/2)000...00​2−vt​Δt2sin(θt−1​+ωt​Δt/2)​2vt​Δt2cos(θt−1​+ωt​Δt/2)​Δt00...00​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​(2∗N+3)∗2​

观测模型

假设当前激光帧中检测到KKK个反光板[rx1ry1...rxiryi...rxKryK]2K∗1\begin{bmatrix}r_x^1 & r_y^1 & ...&r_x^i& r_y^i&... &r_x^K & r_y^K\end{bmatrix}_{2K*1}[rx1​​ry1​​...​rxi​​ryi​​...​rxK​​ryK​​]2K∗1​,需要分为两种情况讨论:

(1)通过数据关联,我们找到状态空间中对应的k2k2k2个反光板;

(2)无法关联上的反光板有k3=K−k2k3=K-k2k3=K−k2个。

对于关联不上的反光板,我们不放进观测方程中,在后续进行状态空间的扩展。

观测方程直接写为:

[rx1ry1...rxiryi...rxk2ryk2]2∗k2∗1=[(mx1−x)cos⁡θ+(my1−y)sin⁡θ−(mx1−x)sin⁡θ+(my1−y)cos⁡θ...(mxi−x)cos⁡θ+(myi−y)sin⁡θ−(mxi−x)sin⁡θ+(myi−y)cos⁡θ...(mxN−x)cos⁡θ+(myN−y)sin⁡θ−(mxN−x)sin⁡θ+(myN−y)cos⁡θ]2∗k2∗1\begin{bmatrix}r_x^1 \\ r_y^1 \\ ...\\r_x^i \\ r_y^i \\... \\r_x^{k2} \\ r_y^{k2}\end{bmatrix}_{2*k2*1} =\begin{bmatrix} (m_x^1-x)\cos\theta+(m_y^1-y)\sin\theta \\ -(m_x^1-x)\sin\theta+(m_y^1-y)\cos\theta\\ ...\\ (m_x^i-x)\cos\theta+(m_y^i-y)\sin\theta \\ -(m_x^i-x)\sin\theta+(m_y^i-y)\cos\theta \\ ... \\ (m_x^N-x)\cos\theta+(m_y^N-y)\sin\theta \\ -(m_x^N-x)\sin\theta+(m_y^N-y)\cos\theta\end{bmatrix}_{2*k2*1}⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​rx1​ry1​...rxi​ryi​...rxk2​ryk2​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​2∗k2∗1​=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​(mx1​−x)cosθ+(my1​−y)sinθ−(mx1​−x)sinθ+(my1​−y)cosθ...(mxi​−x)cosθ+(myi​−y)sinθ−(mxi​−x)sinθ+(myi​−y)cosθ...(mxN​−x)cosθ+(myN​−y)sinθ−(mxN​−x)sinθ+(myN​−y)cosθ​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​2∗k2∗1​

需要注意的是,上述中所用的mxim_x^imxi​和myim_y^imyi​是通过数据关联,匹配上的状态空间内的反光板位置。

假如观测的第iii个反光板和状态空间的第jjj个反光板匹配上,该反光板对应的子雅克比矩阵为:

Hti=∂hi∂Xt=[−cos⁡θ−sin⁡θ−(mx1−x)sin⁡θ+(my1−y)cos⁡θ02∗(j−1)cos⁡θsin⁡θ02(N−j)sin⁡θ−cos⁡θ−(mx1−x)cos⁡θ−(my1−y)sin⁡θ02∗(j−1)−sin⁡θcos⁡θ02(N−j)]2∗(2∗N+3)H_t^i = \frac{\partial h^i }{ \partial X_t} =\begin{bmatrix}-\cos\theta & -\sin\theta & -(m_x^1-x)\sin\theta+(m_y^1-y)\cos\theta &0_{2*(j-1)} &\cos\theta&\sin\theta&0_{2(N-j)} \\ \sin\theta & -\cos\theta & -(m_x^1-x)\cos\theta-(m_y^1-y)\sin\theta &0_{2*(j-1)} &-\sin\theta&\cos\theta&0_{2(N-j)}\end{bmatrix}_{2*(2*N+3)}Hti​=∂Xt​∂hi​=[−cosθsinθ​−sinθ−cosθ​−(mx1​−x)sinθ+(my1​−y)cosθ−(mx1​−x)cosθ−(my1​−y)sinθ​02∗(j−1)​02∗(j−1)​​cosθ−sinθ​sinθcosθ​02(N−j)​02(N−j)​​]2∗(2∗N+3)​

观测对状态空间总的雅克比矩阵为:

Ht=∂h∂Xt=[Ht1Ht2...Htk2]2∗k2∗(2∗N+3)H_t = \frac{\partial h }{ \partial X_t} = \begin{bmatrix}H_t^1\\H_t^2\\...\\H_t^{k2}\end{bmatrix}_{2*k2*(2*N+3)}Ht​=∂Xt​∂h​=⎣⎢⎢⎡​Ht1​Ht2​...Htk2​​⎦⎥⎥⎤​2∗k2∗(2∗N+3)​

匹配上的反光板更新

计算增益

Kt=ΣtHtT(HtΣtHtT+Q)−1K_t = \Sigma_{t}H_{t}^{T}(H_t\Sigma_{t}H_t^{T}+Q)^{-1}Kt​=Σt​HtT​(Ht​Σt​HtT​+Q)−1

其中,QQQ为观测的协方差矩阵。

更新状态空间

$z_t-\hat{z} $的写法基本一样。

Xt=Xt+Kt(zt−z^)X_t = X_t + K_t(z_t-\hat{z})Xt​=Xt​+Kt​(zt​−z^)

更新协方差

Σt=(I−KtHt)Σt\Sigma_{t} = (I-K_tH_t)\Sigma_{t}Σt​=(I−Kt​Ht​)Σt​

状态空间与协方差矩阵的扩展

状态空间的扩展

对于新增的反光板,状态空间扩展为:

Xt′=[xyθmx1my1mx2my2...mxNmyNmxN+1myN+1...mxN+k3myN+k3]TX_t^{'}=\begin{bmatrix} x & y &\theta & m_{x}^1 & m_{y}^1 & m_{x}^2 & m_{y}^2 & ... & m_x^N & m_y^N & m_x^{N+1}& m_y^{N+1} & ... & m_x^{N+k3}& m_y^{N+k3}\end{bmatrix}^TXt′​=[x​y​θ​mx1​​my1​​mx2​​my2​​...​mxN​​myN​​mxN+1​​myN+1​​...​mxN+k3​​myN+k3​​]T

其中,新观测到的反光板的为z=[rx1ry1...rxk3ryk3]Tz=\begin{bmatrix}r_x^{1}&r_y^{1} & ... & r_x^{k3} & r_y^{k3}\end{bmatrix}^Tz=[rx1​​ry1​​...​rxk3​​ryk3​​]T,新增的反光板地图点坐标为[mxN+1myN+1...mxN+k3myN+k3]T\begin{bmatrix}m_x^{N+1}&m_y^{N+1} & ...&m_x^{N+k3}&m_{y}^{N+k3}\end{bmatrix}^T[mxN+1​​myN+1​​...​mxN+k3​​myN+k3​​]T,根据当前机器人的位姿,有:

h=[mxN+1myN+1...mxN+k3myN+k3]2N∗1=[rx1cos⁡θ−ry1sin⁡θ+xrx1sin⁡θ+ry1cos⁡θ+y...rxk3cos⁡θ−ryk3sin⁡θ+xrxk3sin⁡θ+ryk3cos⁡θ+y]2∗k3∗1h=\begin{bmatrix}m_x^{N+1} \\ m_y^{N+1} \\ ...\\ m_{x}^{N+k3}\\m_{y}^{N+k3}\end{bmatrix}_{2N*1}= \begin{bmatrix}r_{x}^1\cos\theta-r_{y}^1\sin\theta+x \\ r_{x}^1\sin\theta+r_{y}^1\cos\theta+y \\ ... \\ r_{x}^{k3}\cos\theta-r_{y}^{k3}\sin\theta+x \\ r_{x}^{k3}\sin\theta+r_{y}^{k3}\cos\theta+y\end{bmatrix}_{2*k3*1}h=⎣⎢⎢⎢⎢⎡​mxN+1​myN+1​...mxN+k3​myN+k3​​⎦⎥⎥⎥⎥⎤​2N∗1​=⎣⎢⎢⎢⎢⎡​rx1​cosθ−ry1​sinθ+xrx1​sinθ+ry1​cosθ+y...rxk3​cosθ−ryk3​sinθ+xrxk3​sinθ+ryk3​cosθ+y​⎦⎥⎥⎥⎥⎤​2∗k3∗1​

协方差矩阵的扩展

新的协方差矩阵为:

Σt′=[ΣtΣmxTΣmxΣmm](2N+3+2∗k3)∗(2N+3+2∗k3)\Sigma_t^{'} = \begin{bmatrix}\Sigma_t & \Sigma_{mx}^T\\ \Sigma_{mx} & \Sigma_{mm}\end{bmatrix}_{(2N+3+2*k3)*(2N+3+2*k3)}Σt′​=[Σt​Σmx​​ΣmxT​Σmm​​](2N+3+2∗k3)∗(2N+3+2∗k3)​

其中:Σt\Sigma_tΣt​为扩展前的协方差矩阵,大小为(2N+3)∗(2N+3)(2N+3)*(2N+3)(2N+3)∗(2N+3)

新反光板的协方差为:Σmm=GpΣξGpT+GzQtGzT\Sigma_{mm} = G_p \Sigma_{\xi}G_p^T+G_zQ_tG_z^TΣmm​=Gp​Σξ​GpT​+Gz​Qt​GzT​,是一个(2∗k3)∗(2∗k3)(2*k3)*(2*k3)(2∗k3)∗(2∗k3)的矩阵。其中:

GpG_pGp​为反光板hhh对位姿ξ\xiξ的雅克比:

Gp=∂h∂ξ=[10−rx1sin⁡θ−ry1cos⁡θ01rx1cos⁡θ−ry1sin⁡θ.........10−rxk3sin⁡θ−ryk3cos⁡θ01rxk3cos⁡θ−ryk3sin⁡θ](2∗k3)∗3G_p = \frac{\partial h}{\partial\xi} = \begin{bmatrix}1 & 0 & -r_{x}^1\sin\theta-r_{y}^1\cos\theta \\ 0 & 1 & r_{x}^1\cos\theta-r_{y}^1\sin\theta \\ ... & ... & ... \\ 1 & 0 & -r_{x}^{k3}\sin\theta-r_{y}^{k3}\cos\theta \\ 0 & 1 & r_{x}^{k3}\cos\theta-r_{y}^{k3}\sin\theta\end{bmatrix}_{(2*k3)*3}Gp​=∂ξ∂h​=⎣⎢⎢⎢⎢⎡​10...10​01...01​−rx1​sinθ−ry1​cosθrx1​cosθ−ry1​sinθ...−rxk3​sinθ−ryk3​cosθrxk3​cosθ−ryk3​sinθ​⎦⎥⎥⎥⎥⎤​(2∗k3)∗3​

Σξ\Sigma_{\xi}Σξ​为当前协方差矩阵的前三行三列。

GzG_zGz​为反光板hhh对观测zzz的雅克比:

Gz=∂h∂z=[cos⁡θ−sin⁡θsin⁡θcos⁡θ......cos⁡θ−sin⁡θsin⁡θcos⁡θ](2∗k3)∗2G_z = \frac{\partial h}{\partial z} =\begin{bmatrix}\cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \\ ... & ... \\ \cos\theta & -\sin\theta \\ \sin\theta& \cos\theta\end{bmatrix}_{(2*k3)*2}Gz​=∂z∂h​=⎣⎢⎢⎢⎢⎡​cosθsinθ...cosθsinθ​−sinθcosθ...−sinθcosθ​⎦⎥⎥⎥⎥⎤​(2∗k3)∗2​

QtQ_tQt​为观测协的方差:

Qt=[σx200σy2]2∗2Q_t = \begin{bmatrix}\sigma _x^2 & 0 \\ 0 & \sigma_y^2\end{bmatrix}_{2*2}Qt​=[σx2​0​0σy2​​]2∗2​

Σmx\Sigma_{mx}Σmx​是新加的反光板和原状态空间之间的联合协方差,且Σmx=GfxΣt\Sigma_{mx}=G_{fx}\Sigma_tΣmx​=Gfx​Σt​

GfxG_{fx}Gfx​为反光板hhh对原状态量XXX的雅克比:

Gfx=∂h∂Xt=[10−rx1sin⁡θ−ry1cos⁡θ00...0001rx1cos⁡θ−ry1sin⁡θ00...00........................10−rxk3sin⁡θ−ryk3cos⁡θ00...0001rxk3cos⁡θ−ryk3sin⁡θ00...00](2∗k3)∗(2N+3)G_{fx} = \frac{\partial h}{\partial X_t} =\begin{bmatrix}1 & 0 & -r_{x}^1\sin\theta-r_{y}^1\cos\theta & 0 & 0 & ... & 0 & 0 \\ 0 & 1 & r_{x}^1\cos\theta-r_{y}^1\sin\theta & 0 & 0 & ... & 0 & 0 \\ ... & ...& ...& ...& ...& ...& ... & ... \\ 1 & 0 & -r_{x}^{k3}\sin\theta-r_{y}^{k3}\cos\theta & 0 & 0 & ... & 0 & 0 \\ 0 & 1 & r_{x}^{k3}\cos\theta-r_{y}^{k3}\sin\theta & 0 & 0 & ... & 0 & 0\end{bmatrix}_{(2*k3)*(2N+3)}Gfx​=∂Xt​∂h​=⎣⎢⎢⎢⎢⎡​10...10​01...01​−rx1​sinθ−ry1​cosθrx1​cosθ−ry1​sinθ...−rxk3​sinθ−ryk3​cosθrxk3​cosθ−ryk3​sinθ​00...00​00...00​...............​00...00​00...00​⎦⎥⎥⎥⎥⎤​(2∗k3)∗(2N+3)​

至此,反光板建图方案的EKF公式推导完成。

一起做激光反光板(三)-EKF建图公式推导相关推荐

  1. 一起做激光反光板(四)-框架搭建

    我们已经推导了基本的反光板建图和定位的基本公式,接下来,开始搭建一个框架,尝试进行反光板的建图定位的代码加进去. 首先,搭建一个ROS框架,在我的个人github的reflector_ekf_slam ...

  2. 一起做激光反光板(六)-基于滑窗的EKF-SLAM及外参自动标定公式推导

    在第四篇中已经提到,如果场景中反光板不够多,容易造成EKF系统效果不好的问题,且我们还想用上其他的点云信息,保证在反光板不够的情况下仍能够正确的收敛. 我们考虑扩充观测信息: (1)角点和线段特征,加 ...

  3. RIKIBOT-FX4纯激光里程计的建图导航

    目录 简介 环境准备 纯激光里程计构建地图 纯激光里程计导航 关键参数配置 交流方式 简介 在大多数学习ROS人的理解中,常用的gmapping建图.导航一般都需要依赖电机的里程计,特别是导航时一定需 ...

  4. 一起做激光反光板(一)-EKF定位公式推导

    前提:本文只考虑平面运动. EKF的公式及原理不再细述:EKF原理 观测:观测数据为反光板.反光板的检测暂时也不考虑.(一般来说,反光板的检测都是基于反射强度来做的,需要自己手写,如果有疑问留言). ...

  5. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)

    B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...

  6. (每日一读2019.10.23)低漂移、鲁棒和快速的视觉-激光里程计和建图(VLoam)

    参考:https://www.jianshu.com/p/cb7098567711 论文:pdf 摘要 本文开发了一个低成本的立体视觉惯性定位系统,该系统利用有效的基于多状态约束卡尔曼滤波(MSCKF ...

  7. 实验三 Gmapping建图

    体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图. 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base ...

  8. 一起做激光反光板(二)-EKF定位公式推导-扩展状态空间

    继续公式推导. 扩展状态空间的原因在上一篇EKF公式推导中已经提过,假如在实际操作中,很有可能会临时在某些场合增加反光板来增强定位系统的稳定性.因此,需要在定位过程中,将该状态空间扩展. 定位EKF公 ...

  9. 基于rf2o_laser_odometry纯激光里程计的gmapping建图

    ROS环境:ubuntu16.04 & ROS kinetic 激光雷达:EAI-X4 or RPlidar-A1 激光里程计:rf2o_laser_odometry 建图:gmapping ...

最新文章

  1. JavaScript 实现鼠标移动时实时获取其相对盒子的偏移
  2. 表单的几个基本常用功能
  3. ViewGroup的测量及绘制
  4. 简述springmvc过程_spring mvc的工作流程是什么?
  5. 作者:沈志宏(1977-),男,博士,中国科学院计算机网络信息中心高级工程师...
  6. 牛津书虫系列_【SHARE】牛津书虫系列英文书
  7. java webdriver page object_Selenium2(java)页面对象模型(Page Object) 八
  8. 20210601:力扣第243周周赛(上)
  9. 超酷的 mip-infinitescroll 无限滚动(无限下拉)
  10. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-1.常用的第三方支付和聚合支付介绍...
  11. 华为matebook13安装折腾Debian11全过程
  12. Autojs: 坚果云文本文件上传/下载
  13. 直流无刷电机和霍尔传感器
  14. 香港开户炒股非常简单 体验香港开户流程
  15. 美国华裔二代吐露在美生活真相:出国,请三思而后行
  16. HashMap原理浅析(关于红黑树是什么?)
  17. Maxwell简介与使用
  18. c语言生成随机数不用time,C语言生成随机数的函数、延时函数
  19. 数据湖和传统业务_在十六湖国家公园测量和计算流量
  20. linux free 解读

热门文章

  1. JAVA爬虫 - 爬取豆瓣租房信息
  2. 输入年份,然后打印出该年的万年历,以及标识出当天日期。类似于linux下的cal -y结果。
  3. m3u8及TS文件下载解密:如何从播放网址查找m3u8文件(一)
  4. 微信公众号开发:消息与事件处理
  5. CSS 霓虹灯效果 (一)
  6. 零基础读懂金融学(一)名词
  7. CocosCreator小游戏排行榜
  8. Linux下电骡aMule Kademlia网络构建分析4
  9. Ada 语言学习(3)复合类型数据——Array
  10. java计算机毕业设计服装连锁店后台管理系统(附源码、数据库)