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

本文详细介绍了使用扩展卡尔曼滤波(EKF)进行反光板建图的公式推导,包括状态空间的构建、运动模型、观测模型以及协方差的更新。在没有初始反光板地图的情况下,从零开始添加反光板,讨论了状态空间和协方差矩阵的扩展,并涉及数据关联和未关联反光板的处理。
摘要由CSDN通过智能技术生成

继续EKF建图公式推导。

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

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

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

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

建图EKF公式推导

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

状态空间

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

X = [ x y θ m x 1 m y 1 . . . m x N m y N ] T X=\begin{bmatrix} x & y &\theta & m_x^1 & m_y^1 &...& m_x^N & m_y^N\end{bmatrix}^T X=[xyθmx1my1...mxNmyN]T

运动模型-预测

(1)位姿预测:

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

运动方程可以写为:

[ x t y t θ t m x 1 m y 1 . . . m x N m y N ] 2 ∗ N + 3 = [ x t − 1 y t − 1 θ t − 1 m x 1 m y 1 . . . m x N m y N ] 2 ∗ N + 3 + [ v t Δ t cos ⁡ ( θ t − 1 + ω t Δ t / 2 ) v t Δ t sin ⁡ ( θ t − 1 + ω t Δ t / 2 ) ω t Δ t 0 0 . . . 0 0 ] 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} xtytθtmx1my1...mxNmyN2N+3=xt1yt1θt1mx1my1...mxNmyN2N+3+vtΔtcos(θt1+ωtΔt/2)vtΔtsin(θt1+ωtΔt/2)ωtΔt00...002N+3

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

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

(2)协方差预测

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

Σ ξ , 0 = [ Σ x 0 0 0 Σ y 0 0 0 Σ θ ] 3 ∗ 3 \Sigma_{\xi,0} =\begin{bmatrix}\Sigma_{x} & 0 & 0 \\ 0 & \Sigma_{y} & 0 \\ 0 & 0 & \Sigma_{\theta}\end{bmatrix}_{3*3} Σξ,0=Σx000Σy000Σθ33

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

其中:

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

G ξ , t = ∂ X t ∂ ξ t − 1 = [ 1 0 − v t Δ t sin ⁡ ( θ t − 1 + ω t Δ t / 2 ) 0 1 v t Δ t cos ⁡ ( θ t − 1 + ω t Δ t / 2 ) 0 0 1 0 0 0 0 0 0 . . . . . . . . . 0 0 0 0 0 0 ] ( 2 ∗ N + 3 ) ∗ 3 G_{\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=ξt1Xt=10000...0001000...00vtΔtsin(θt1+ωtΔt/2)vtΔtcos(θt1+ωtΔt/2)100...00(2N+3)3

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

G u = ∂ X t ∂ u = [ Δ t cos ⁡ ( θ t − 1 + ω t Δ t / 2 ) − v t Δ t 2 sin ⁡ ( θ t − 1 + ω t Δ t / 2 ) 2 Δ t sin ⁡ ( θ t − 1 + ω t Δ t / 2 ) v t Δ t 2 cos ⁡ ( θ t − 1 + ω t Δ t / 2 ) 2 0 Δ t 0 0 0 0 . . . . . . 0 0 0 0 ] ( 2 ∗ N + 3 ) ∗ 2 G_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=uXt=Δtcos(θt1+ωtΔt/2)Δtsin(θt1+ωtΔt/2)000...002vtΔt2sin(θt1+ωtΔt/2)2vtΔt2cos(θt1+ωtΔt/2)Δt00...00(2N+3)2

观测模型

假设当前激光帧中检测到 K K K个反光板 [ r x 1 r y 1 . . . r x i r y i . . . r x K r y K ] 2 K ∗ 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} [rx1ry1...rxiryi...rxKryK]2K1,需要分为两种情况讨论:

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

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

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

观测方程直接写为:

[ r x 1 r y 1 . . . r x i r y i . . . r x k 2 r y k 2 ] 2 ∗ k 2 ∗ 1 = [ ( m x 1 − x ) cos ⁡ θ + ( m y 1 − y ) sin ⁡ θ − ( m x 1 − x ) sin ⁡ θ + ( m y 1 − y ) cos ⁡ θ . . . ( m x i − x ) cos ⁡ θ + ( m y i − y ) sin ⁡ θ − ( m x i − x ) sin ⁡ θ + ( m y i − y ) cos ⁡ θ . . . ( m x N − x ) cos ⁡ θ + ( m y N − y ) sin ⁡ θ − ( m x N − x ) sin ⁡ θ + ( m y N − y ) cos ⁡ θ ] 2 ∗ k 2 ∗ 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} rx1ry1...rxiryi...rxk2ryk22k21=(mx1x)cosθ+(my1y)sinθ(mx1x)sinθ+(my1y)cosθ...(mxix)cosθ+(myiy)sinθ(mxix)sinθ+(myiy)cosθ...(mxNx)cosθ+(myNy)sinθ(mxNx)sinθ+(myNy)cosθ2k21

需要注意的是,上述中所用的 m x i m_x^i mxi m y i m_y^i myi是通过数据关联,匹配上的状态空间内的反光板位置。

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

H t i = ∂ h i ∂ X t = [ − cos ⁡ θ − sin ⁡ θ − ( m x 1 − x ) sin ⁡ θ + ( m y 1 − y ) cos ⁡ θ 0 2 ∗ ( j − 1 ) cos ⁡ θ sin ⁡ θ 0 2 ( N − j ) sin ⁡ θ − cos ⁡ θ − ( m x 1 − x ) cos ⁡ θ − ( m y 1 − y ) sin ⁡ θ 0 2 ∗ ( j − 1 ) − sin ⁡ θ cos ⁡ θ 0 2 ( 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=Xthi=[cosθsinθsinθcosθ(mx1x)sinθ+(my1y)cosθ(mx1x)cosθ(my1y)sinθ02(j1)02(j1)cosθsinθsinθcosθ02(Nj)02(Nj)]2(2N+3)

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

H t = ∂ h ∂ X t = [ H t 1 H t 2 . . . H t k 2 ] 2 ∗ k 2 ∗ ( 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=Xth=Ht1Ht2...Htk22k2(2N+3)

匹配上的反光板更新

计算增益

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

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

更新状态空间

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

X t = X t + K t ( z t − z ^ ) X_t = X_t + K_t(z_t-\hat{z}) Xt=Xt+Kt(ztz^)

更新协方差

Σ t = ( I − K t H t ) Σ t \Sigma_{t} = (I-K_tH_t)\Sigma_{t} Σt=(IKtHt)Σt

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

状态空间的扩展

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

X t ′ = [ x y θ 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 + k 3 m y N + k 3 ] T X_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}^T Xt=[xyθmx1my1mx2my2...mxNmyNmxN+1myN+1...mxN+k3myN+k3]T

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

h = [ m x N + 1 m y N + 1 . . . m x N + k 3 m y N + k 3 ] 2 N ∗ 1 = [ r x 1 cos ⁡ θ − r y 1 sin ⁡ θ + x r x 1 sin ⁡ θ + r y 1 cos ⁡ θ + y . . . r x k 3 cos ⁡ θ − r y k 3 sin ⁡ θ + x r x k 3 sin ⁡ θ + r y k 3 cos ⁡ θ + y ] 2 ∗ k 3 ∗ 1 h=\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+1myN+1...mxN+k3myN+k32N1=rx1cosθry1sinθ+xrx1sinθ+ry1cosθ+y...rxk3cosθryk3sinθ+xrxk3sinθ+ryk3cosθ+y2k31

协方差矩阵的扩展

新的协方差矩阵为:

Σ t ′ = [ Σ t Σ m x T Σ m x Σ m m ] ( 2 N + 3 + 2 ∗ k 3 ) ∗ ( 2 N + 3 + 2 ∗ k 3 ) \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+2k3)(2N+3+2k3)

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

新反光板的协方差为: Σ m m = G p Σ ξ G p T + G z Q t G z T \Sigma_{mm} = G_p \Sigma_{\xi}G_p^T+G_zQ_tG_z^T Σmm=GpΣξGpT+GzQtGzT,是一个 ( 2 ∗ k 3 ) ∗ ( 2 ∗ k 3 ) (2*k3)*(2*k3) (2k3)(2k3)的矩阵。其中:

G p G_p Gp为反光板 h h h对位姿 ξ \xi ξ的雅克比:

G p = ∂ h ∂ ξ = [ 1 0 − r x 1 sin ⁡ θ − r y 1 cos ⁡ θ 0 1 r x 1 cos ⁡ θ − r y 1 sin ⁡ θ . . . . . . . . . 1 0 − r x k 3 sin ⁡ θ − r y k 3 cos ⁡ θ 0 1 r x k 3 cos ⁡ θ − r y k 3 sin ⁡ θ ] ( 2 ∗ k 3 ) ∗ 3 G_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...1001...01rx1sinθry1cosθrx1cosθry1sinθ...rxk3sinθryk3cosθrxk3cosθryk3sinθ(2k3)3

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

G z G_z Gz为反光板 h h h对观测 z z z的雅克比:

G z = ∂ h ∂ z = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ . . . . . . cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] ( 2 ∗ k 3 ) ∗ 2 G_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=zh=cosθsinθ...cosθsinθsinθcosθ...sinθcosθ(2k3)2

Q t Q_t Qt为观测协的方差:

Q t = [ σ x 2 0 0 σ y 2 ] 2 ∗ 2 Q_t = \begin{bmatrix}\sigma _x^2 & 0 \\ 0 & \sigma_y^2\end{bmatrix}_{2*2} Qt=[σx200σy2]22

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

G f x G_{fx} Gfx为反光板 h h h对原状态量 X X X的雅克比:

G f x = ∂ h ∂ X t = [ 1 0 − r x 1 sin ⁡ θ − r y 1 cos ⁡ θ 0 0 . . . 0 0 0 1 r x 1 cos ⁡ θ − r y 1 sin ⁡ θ 0 0 . . . 0 0 . . . . . . . . . . . . . . . . . . . . . . . . 1 0 − r x k 3 sin ⁡ θ − r y k 3 cos ⁡ θ 0 0 . . . 0 0 0 1 r x k 3 cos ⁡ θ − r y k 3 sin ⁡ θ 0 0 . . . 0 0 ] ( 2 ∗ k 3 ) ∗ ( 2 N + 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=Xth=10...1001...01rx1sinθry1cosθrx1cosθry1sinθ...rxk3sinθryk3cosθrxk3cosθryk3sinθ00...0000...00...............00...0000...00(2k3)(2N+3)

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

EKF(扩展卡尔曼滤波)是一种常用于状态估计的滤波算法,可以用于估计动态系统的状态变量。在电池管理系统中,估计电池的剩余电荷状态(SOC)是一项重要的任务,而EKF可以用于预估SOC。下面是EKF预估SOC公式推导过程: 1. 首先,定义电池的动态模型,可以表示为: SOC(k+1) = f(SOC(k), I(k)) 其中,SOC(k)表示在时间k的电池SOC,I(k)表示在时间k的电流输入。 2. 利用泰勒展开近似公式对动态模型进行线性化处理,可以得到如下形式: SOC(k+1) ≈ f(SOC(k), I(k)) + A(k)(SOC(k) - SOC_hat(k)) + B(k)(I(k) - I_hat(k)) 其中,SOC_hat(k)和I_hat(k)表示在时间k的SOC和电流输入的估计值,A(k)和B(k)是模型的雅可比矩阵。 3. 然后,定义传感器模型,可以表示为: V(k) = h(SOC(k)) 其中,V(k)表示在时间k的电池电压,h(SOC(k))是SOC的非线性函数关系。 4. 利用泰勒展开近似公式对传感器模型进行线性化处理,可以得到如下形式: V(k) ≈ h(SOC(k)) + C(k)(SOC(k) - SOC_hat(k)) 其中,C(k)是传感器模型的雅可比矩阵。 5. 对上述两个模型进行合并得到整体状态估计公式: SOC_hat(k+1) = f(SOC_hat(k), I(k)) + A(k)(SOC(k) - SOC_hat(k)) + B(k)(I(k) - I_hat(k)) V(k) = h(SOC_hat(k)) + C(k)(SOC(k) - SOC_hat(k)) 6. 接下来,利用卡尔曼滤波的推导公式,根据系统的状态方程和观测方程,通过递推的方式进行SOC的预估。 以上就是EKF预估SOC公式推导过程。通过使用EKF算法,我们可以通过测量电池的电压和电流输入,来估计电池中的剩余电荷状态。这对于电池管理系统的设计和控制非常重要,有助于提高电池的使用寿命和性能。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值