里程计(odo)量测模型

里程计量测模型学习记录

1.概要

本文主要讨论如何利用车载里程计的输出信息构建滤波量测方程,并以此估计安装角 C i v C^v_i Civ

2.符号约定

符号 意义
V V V 速度,用角标表示是哪个系的投影。一般给出的是导航系下的速度。
C C C 旋转矩阵
x ~ \widetilde{x} x $ 某个量对应的测量值
x ~ \tilde{x} x~ 某个量对应的近似值
C i n C^{n}_{i} Cin imu到导航系(东北天)的旋转矩阵,真值
C i n ′ C^{n'}_{i} Cin 实际估计的imu到导航系的旋转矩阵。此时认为导航系不准,用n’来表示这个不准的导航系。
ϕ \phi ϕ 姿态失准角。
C i v C^v_i Civ 安装角。imu到车体系的旋转矩阵。
λ \lambda λ 安装角误差。
S o S_o So 里程计的刻度误差(比例因子系数)

3.基础知识

  1. 哥氏定理
  2. 卡尔曼滤波

4.问题描述

利用车辆前后轮里程计的输出信息,构建滤波量测方程,确定各误差状态量的系数以及新息的计算。

5. 解算过程

5.1 后轮里程计模型
后轮里程计输出为标量 v o v_o vo,据此可以构建车轮中心点O在车体坐标系v系下的速度矢量 V o v = [ 0 , v o , 0 ] T V^v_o=[0,v_o,0]^T Vov=[0,vo,0]T。首先给出以下涉及的一些基本公式:
V o v = V i v + ω v × l v V ‾ i v = C n ′ v ′ ⋅ V i n V ‾ i n = V i n + δ v i n V i v ‾ = C n ′ v ′ ⋅ V i n ‾ V i n ‾ = V i n + δ v i n ω v ‾ = C v v ′ ⋅ C i v ⋅ ( ω i + ϵ g ) = ( I − λ × ) ⋅ C i v ⋅ ( ω i + ϵ g ) C n ′ v ′ = C v v ′ ⋅ C n v ⋅ C n ′ n = ( I − λ × ) ⋅ C n v ⋅ ( I + ϕ × ) \begin{aligned} V^v_o&=V^v_i + \omega^v \times l^v \\ \overline{V}^v_i&=C^{v'}_{n'} \cdot V^n_i \\ \overline{V}^n_i&=V^n_i+\delta{v}^n_i\\ \overline{V^v_i}&=C^{v'}_{n'} \cdot \overline{V^n_i} \\ \overline{V^n_i}&=V^n_i+\delta{v}^n_i\\ \overline{\omega^v}&=C^{v'}_{v} \cdot C^{v}_{i} \cdot (\omega^i+\epsilon_g)\\ &=(I-\lambda \times) \cdot C^{v}_{i} \cdot (\omega^i+\epsilon_g)\\ C^{v'}_{n'} &= C^{v'}_{v} \cdot C^{v}_{n} \cdot C^{n}_{n'}\\ &=(I-\lambda \times) \cdot C^{v}_{n} \cdot (I+\phi \times)\\ \end{aligned} VovVivVinVivVinωvCnv=Viv+ωv×lv=CnvVin=Vin+δvin=CnvVin=Vin+δvin=CvvCiv(ωi+ϵg)=(Iλ×)Civ(ωi+ϵg)=CvvCnvCnn=(Iλ×)Cnv(I+ϕ×)
根据以上公式,推导预测更新后的 V o v ‾ \overline {V^v_o} Vov与真值以及误差状态量之间的关系如下:
V o v ‾ = ( V i v ‾ + ω v ‾ × l v ) ⋅ ( 1 + S ‾ o ) = ( ( I − λ × ) ⋅ C n v ⋅ ( I + ϕ × ) ⋅ ( V i n + δ v i n ) + ( I − λ × ) ⋅ C i v ⋅ ( ω i + ϵ g ) × l v ) ⋅ ( 1 + S o ‾ ) = ( ( C n v − λ × C n v ) ⋅ ( I + ϕ × ) ⋅ ( V i n + δ v i n ) + ( C i v − λ × C i v ) ⋅ ( ω i + ϵ g ) × l v ) ⋅ ( 1 + S o ‾ ) = ( ( C n v + C n v ϕ × − λ × C n v ) ⋅ ( V i n + δ v i n ) + ( ω v + C i v ⋅ ϵ g − λ × ω v ) × l v ) ⋅ ( 1 + S o ‾ ) = ( V i v + ω v × l v − C n v [ V i n × ] ϕ + [ V i v × ] λ + C n v δ v i n − [ l v × ] C i v ϵ g + [ ω v × ] [ l v × ] λ ) ⋅ ( 1 + S o ‾ ) = ( V i v + ω v × l v − C n v [ V i n × ] ϕ + ( [ V i v × ] + [ ω v × ] [ l v × ] ) λ + C n v δ v i n − [ l v × ] C i v ϵ g ) ⋅ ( 1 + S o ‾ ) = ( V o v − C n v [ V i n × ] ϕ + ( [ V i v × ] + [ ω v × ] [ l v × ] ) λ + C n v δ v i n − [ l v × ] C i v ϵ g ) ⋅ ( 1 + S o ‾ ) = V o v − C n v [ V i n × ] ϕ + ( [ V i v × ] + [ ω v × ] [ l v × ] ) λ + C n v δ v i n − [ l v × ] C i v ϵ g + V o v ⋅ S o ‾ \begin {aligned} \overline{V^v_o}&=(\overline{V^v_i} +\overline{\omega^v} \times l^v) \cdot (1+\overline S_o) \\ &=((I-\lambda \times) \cdot C^{v}_{n} \cdot (I+\phi \times) \cdot (V^n_i+\delta{v}^n_i) + (I-\lambda \times) \cdot C^{v}_{i} \cdot (\omega^i+\epsilon_g) \times l^v ) \cdot (1+\overline{S_o})\\ &=((C^{v}_{n}-\lambda \times C^{v}_{n}) \cdot (I+\phi \times) \cdot (V^n_i+\delta{v}^n_i) + (C^{v}_{i} - \lambda \times C^{v}_{i})\cdot (\omega^i+\epsilon_g) \times l^v ) \cdot (1+\overline{S_o})\\ &=((C^{v}_{n} + C^{v}_{n} \phi \times-\lambda \times C^{v}_{n}) \cdot (V^n_i+\delta{v}^n_i) + (\omega^v+C^{v}_{i} \cdot \epsilon_g -\lambda \times \omega^v)\times l^v ) \cdot (1+\overline{S_o})\\ &=(V^v_i + \omega^v \times l^v - C^{v}_{n} [V^n_i \times] \phi + [V^v_i \times]\lambda + C^{v}_{n} \delta{v}^n_i - [l^v \times]C^{v}_{i}\epsilon_g + [\omega^v \times][l^v \times]\lambda ) \cdot (1+\overline{S_o})\\ &=(V^v_i + \omega^v \times l^v- C^{v}_{n} [V^n_i \times] \phi +([V^v_i \times]+[\omega^v \times][l^v \times])\lambda + C^{v}_{n} \delta{v}^n_i - [l^v \times]C^{v}_{i}\epsilon_g ) \cdot (1+\overline{S_o})\\ &=({V^v_o} - C^{v}_{n} [V^n_i \times] \phi +([V^v_i \times]+[\omega^v \times][l^v \times])\lambda + C^{v}_{n} \delta{v}^n_i - [l^v \times]C^{v}_{i}\epsilon_g) \cdot (1+\overline{S_o})\\ &={V^v_o} - C^{v}_{n} [V^n_i \times] \phi + ([V^v_i \times]+[\omega^v \times][l^v \times])\lambda + C^{v}_{n} \delta{v}^n_i - [l^v \times]C^{v}_{i}\epsilon_g +{V^v_o} \cdot \overline{S_o}\\ \end {aligned} Vov=(Viv+ωv×lv)(1+So)=((Iλ×)Cnv(I+ϕ×)(Vin+δvin)+(Iλ×)Civ(ωi+ϵg)×lv)(1+So)=((Cnvλ×Cnv)(I+ϕ×)(Vin+δvin)+(Civλ×Civ)(ωi+ϵg)×lv)(1+So)=((Cnv+Cnvϕ×λ×Cnv)(Vin+δvin)+(ωv+Civϵgλ×ωv)×lv)(1+So)=(Viv+ωv×lvCnv[Vin×]ϕ+[Viv×]λ+Cnvδvin[lv×]Civϵg+[ωv×][lv×]λ)(1+So)=(Viv+ωv×lvCnv[Vin×]ϕ+([Viv×]+[ωv×][lv×])λ+Cnvδvin[lv×]Civϵg)(1+So)=(VovCnv[Vin×]ϕ+([Viv×]+[ωv×][lv×])λ+Cnvδvin[lv×]Civϵg)(1+So)=VovCnv[Vin×]ϕ+([Viv×]+[ωv×][lv×])λ+Cnvδvin[lv×]Civϵg+VovSo
对应量测信息与真值之间的关系表达如下:
V o v ~ = V o v ⋅ ( 1 + S o ) + ξ o \begin{aligned} \widetilde {V^v_o} = {V^v_o} \cdot (1+S_o) + \xi_o \end{aligned} Vov =Vov(1+So)+ξo
其中 ξ n \xi_n ξn由实际里程计的测量噪声确定。
5.2 前轮里程计模型
由于车辆前轮为转向轮,在转向行驶的过程中,存在前向和侧向的速度,根据前轮里程计输出的标量 v o v_o vo,确定速度矢量 V o v V^v_o Vov不同于后轮,根据哥氏定理有:
V o f v ‾ = V o r v ‾ + ω v ‾ × l v \overline {V^v_{of}}=\overline {V^v_{or}} + \overline {\omega^v} \times l^v \\ Vofv=Vorv+ωv×lv
其中of表示前轮、or表示后轮,即:
[ v o f x v v o f y v v o f z v ] = [ 0 v o r y v 0 ] + [ ω x v ω y v ω z v ] × [ l x v l y v l z v ] \left[ \begin{matrix} {v^v_{ofx}} \\{v^v_{ofy}} \\{v^v_{ofz}} \\\end{matrix} \right]=\left[ \begin{matrix} {0} \\{v^v_{ory}} \\{0} \\\end{matrix} \right]+ \left[ \begin{matrix} {\omega^v_x} \\{\omega^v_y} \\{\omega^v_z} \\\end{matrix} \right] \times \left[ \begin{matrix} {l^v_x} \\{l^v_y} \\{l^v_z} \\\end{matrix} \right] vofxvvofyvvofzv=0voryv0+ωxvωyvωzv×lxvlyvlzv
所以有 v o f x v = ω y v ⋅ l z v − ω z v ⋅ l y v v^v_{ofx}={\omega^v_y} \cdot {l^v_z}-{\omega^v_z} \cdot {l^v_y} vofxv=ωyvlzvωzvlyv, 结合里程计输出值则有 v o f y v = v o 2 − v o f x v 2 v^v_{ofy}=\sqrt{ {v_o}^2-{v^v_{ofx}}^2} vofyv=vo2vofxv2

至此可以获得前轮速度矢量 V o v = [ ω y v ⋅ l z v − ω z v ⋅ l y v , v o 2 − v o f x v 2 , 0 ] T V^v_o=[{\omega^v_y} \cdot {l^v_z}-{\omega^v_z} \cdot {l^v_y},\sqrt{ {v_o}^2-{v^v_{ofx}}^2},0]^T Vov=[ωyvlzvωzvlyv,vo2vofxv2 ,0]T,量测方程与后轮里程计则一致

A = C ~ i n ⋅ [ l ~ a i i × ] ω ~ i ≈ ( 1 − ϕ × ) C i n ⋅ [ l a i i × ] ⋅ ( ω i + δ ω i ) = ( C i n [ l a i i × ] − [ ϕ × ] C i n [ l a i i × ] ) ⋅ ( ω i + δ ω i ) = C i n [ l a i i × ] ω i + C i n [ l a i i × ] δ ω i − [ ϕ × ] C i n [ l a i i × ] ω i = C i n [ l a i i × ] ω i + C i n [ l a i i × ] δ ω i + C i n [ l a i i × ] [ ω i × ] ϕ \begin{aligned} A &= \tilde C^n_i \cdot [ \tilde l^i_{ai} \times ] \tilde \omega^i \\ &\approx (1-\phi \times)C^n_i \cdot [l^i_{ai} \times ] \cdot (\omega^i + \delta \omega^i) \\ &= (C^n_i [l^i_{ai} \times] -[\phi \times]C^n_i [l^i_{ai} \times ]) \cdot (\omega^i + \delta \omega^i)\\ &= C^n_i [l^i_{ai} \times] \omega^i + C^n_i [l^i_{ai} \times] \delta \omega^i - [\phi \times]C^n_i [l^i_{ai} \times] \omega^i \\ &= C^n_i [l^i_{ai} \times] \omega^i + C^n_i [l^i_{ai} \times] \delta \omega^i + C^n_i [l^i_{ai} \times] [\omega^i \times] \phi \\ \end{aligned} A=C~in[l~aii×]ω~i(1ϕ×)Cin[laii×](ωi+δωi)=(Cin[laii×][ϕ×]Cin[laii×])(ωi+δωi)=Cin[laii×]ωi+Cin[laii×]δωi[ϕ×]Cin[laii×]ωi=Cin[laii×]ωi+Cin[laii×]δωi+Cin[laii×][ωi×]ϕ
B = [ ω I n n × ] C ~ v n ⋅ l a i v = [ ω I n n × ] ⋅ ( 1 − ϕ × ) C v n ( 1 + λ × ) ⋅ l a i v = [ ω I n n × ] ⋅ ( C v n + C v n [ λ × ] − ϕ × C v n ) ⋅ l a i v = [ ω I n n × ] C v n l a i v + [ ω I n n × ] C v n [ λ × ] l a i v − [ ω I n n × ] ϕ × l a i n = [ ω I n n × ] C v n l a i v − [ ω I n n × ] C v n [ l a i v × ] λ + [ ω I n n × ] [ l a i n × ] ϕ \begin{aligned} B &= [\omega^n_{In} \times] \tilde C^n_v \cdot l^v_{ai}\\ &= [\omega^n_{In} \times] \cdot (1-\phi \times) C^n_v (1+\lambda \times) \cdot l^v_{ai} \\ &= [\omega^n_{In} \times] \cdot (C^n_v + C^n_v [\lambda \times] - \phi \times C^n_v ) \cdot l^v_{ai} \\ &= [\omega^n_{In} \times]C^n_v l^v_{ai} + [\omega^n_{In} \times] C^n_v [\lambda \times] l^v_{ai} - [\omega^n_{In} \times] \phi \times l^n_{ai}\\ &= [\omega^n_{In} \times]C^n_v l^v_{ai} - [\omega^n_{In} \times] C^n_v [l^v_{ai} \times] \lambda + [\omega^n_{In} \times][l^n_{ai} \times] \phi\\ \end{aligned} B=[ωInn×]C~vnlaiv=[ωInn×](1ϕ×)Cvn(1+λ×)laiv=[ωInn×](Cvn+Cvn[λ×]ϕ×Cvn)laiv=[ωInn×]Cvnlaiv+[ωInn×]Cvn[λ×]laiv[ωInn×]ϕ×lain=[ωInn×]Cvnlaiv[ωInn×]Cvn[laiv×]λ+[ωInn×][lain×]ϕ

猜你喜欢

转载自blog.csdn.net/fangwentaowhu/article/details/89207858