理想情况下,磁传感器的测量结果是完全准确的,随着磁传感器的不同位置,三轴的读数为地磁场强度在三轴的投影:
h
=
[
h
x
h
y
h
z
]
h
x
2
+
h
y
2
+
h
z
2
=
B
2
\textbf{h}=\left[ \begin{matrix} h_x\\ h_y \\ h_z \end{matrix} \right] \\ h_x^2 + h_y^2 + h_z^2 = B^2
h=⎣⎡hxhyhz⎦⎤hx2+hy2+hz2=B2 因此,磁传感器在不同角度的测量值,落在一个球面
x
2
+
y
2
+
z
2
=
B
2
x^2+y^2+z^2=B^2
x2+y2+z2=B2上,球心是原点,半径是B。
假设理想的测量结果为:
h
0
=
[
h
0
x
h
0
y
h
0
z
]
\mathbf{h_0}=\left[ \begin{matrix} h_{0x}\\ h_{0y} \\ h_{0z} \end{matrix} \right]
h0=⎣⎡h0xh0yh0z⎦⎤ 首先,外部的磁场由于软磁和硬磁干扰而发生了改变,先考虑外部的干扰:
h
m
=
I
3
×
3
h
0
+
F
h
i
\mathbf{h_m}=\mathbf{I_{3\times3}} \mathbf{h_0} + \mathbf{F_hi}
hm=I3×3h0+Fhi I是3x3矩阵,用于表示软磁干扰,
F
s
i
\mathbf{F_si}
Fsi为硬磁干扰造成的偏置。
考虑内部误差后,测量结果变为:
h
=
S
3
×
3
N
3
×
3
h
m
+
F
o
s
=
S
3
×
3
N
3
×
3
(
I
3
×
3
h
0
+
F
h
i
)
+
F
o
s
\mathbf{h} = \mathbf{S_{3\times3}} \mathbf{N_{3\times3}}\mathbf{h_m}+\mathbf{F_{os}}= \mathbf{S_{3\times3}} \mathbf{N_{3\times3}}(\mathbf{I_{3\times3}} \mathbf{h_0} + \mathbf{F_hi})+\mathbf{F_{os}}
h=S3×3N3×3hm+Fos=S3×3N3×3(I3×3h0+Fhi)+Fos
其中,S、N为3x3矩阵,S表示三轴灵敏度差异,N表示三轴非正交的影响。
F
o
s
\mathbf{F_{os}}
Fos为3x1向量,表示零偏。
化简后,测量值h与实际值h0之间的关系可以表示为:
h
=
W
h
0
+
V
h
0
=
W
−
1
(
h
−
V
)
\mathbf{h} = \mathbf{W} \mathbf{h_0} + \mathbf{V} \\ \mathbf{h_0} = \mathbf{W^{-1}}(\mathbf{h}-\mathbf{V} )
h=Wh0+Vh0=W−1(h−V) W是3x3矩阵,V是3x1向量。其中,W是一个对称矩阵(具体),因此只含6个系数。加上V的3个系数,总共需要获得9个系数才能实现校准。
但是,在某些场合只有硬磁干扰,而软磁干扰不明显,则此时
W
=
E
\mathbf{W}=\mathbf{E}
W=E,
h
=
h
0
+
V
\mathbf{h} = \mathbf{h_0} + \mathbf{V}
h=h0+V就只需要获得V的3个系数。
硬磁干扰的校准(3个参数)
使用的模型
如果只有硬磁干扰,则理论测量结果h0可表示为:
h
0
=
W
−
1
(
h
−
V
)
=
h
−
V
\mathbf{h_0} = \mathbf{W^{-1}}(\mathbf{h}-\mathbf{V} )=\mathbf{h}-\mathbf{V}
h0=W−1(h−V)=h−V 理论测量结果落在球面上:
h
0
T
h
0
=
(
h
−
V
)
T
(
h
−
V
)
=
B
2
\mathbf{h_0^T}\mathbf{h_0} = (\mathbf{h}-\mathbf{V})^T(\mathbf{h}-\mathbf{V})=B^2
h0Th0=(h−V)T(h−V)=B2 其中,
h
=
[
h
x
h
y
h
z
]
,
V
=
[
V
x
V
y
V
z
]
\textbf{h}=\left[ \begin{matrix} h_x\\ h_y \\ h_z \end{matrix} \right], \textbf{V}=\left[ \begin{matrix} V_x\\ V_y \\ V_z \end{matrix} \right]
h=⎣⎡hxhyhz⎦⎤,V=⎣⎡VxVyVz⎦⎤ 展开后:
h
x
2
+
h
y
2
+
h
z
2
−
2
V
x
h
x
−
2
V
y
h
y
−
2
V
y
h
y
+
V
x
2
+
V
y
2
+
V
z
2
−
B
2
=
0
h_x^2+h_y^2+h_z^2- 2V_xh_x- 2V_yh_y- 2V_yh_y + V_x^2 +V_y^2 +V_z^2 -B^2 = 0
hx2+hy2+hz2−2Vxhx−2Vyhy−2Vyhy+Vx2+Vy2+Vz2−B2=0 整理下:
[
h
x
2
+
h
y
2
+
h
z
2
]
−
[
h
x
h
y
h
z
1
]
[
2
V
x
2
V
y
2
V
z
B
2
−
(
V
x
2
+
V
y
2
+
V
z
2
)
]
=
0
[h_x^2+h_y^2+h_z^2]- \left[ \begin{matrix} h_x & h_y & h_z & 1 \end{matrix} \right] \left[ \begin{matrix} 2V_x\\ 2V_y\\ 2V_z \\ B^2 - (V_x^2 +V_y^2 +V_z^2) \end{matrix} \right] = 0
[hx2+hy2+hz2]−[hxhyhz1]⎣⎢⎢⎡2Vx2Vy2VzB2−(Vx2+Vy2+Vz2)⎦⎥⎥⎤=0
最小二乘法
获得多组测量数据h(1),h(2)… h(m),并整理:
[
h
x
2
[
1
]
+
h
y
2
[
1
]
+
h
z
2
[
1
]
h
x
2
[
2
]
+
h
y
2
[
2
]
+
h
z
2
[
2
]
.
.
.
h
x
2
[
m
]
+
h
y
2
[
m
]
+
h
z
2
[
m
]
]
−
[
h
x
[
1
]
h
y
[
1
]
h
z
[
1
]
1
h
x
[
2
]
h
y
[
2
]
h
z
[
2
]
1
.
.
.
.
.
.
.
.
.
.
.
.
h
x
[
m
]
h
y
[
m
]
h
z
[
m
]
1
]
[
2
V
x
2
V
y
2
V
z
B
2
−
(
V
x
2
+
V
y
2
+
V
z
2
)
]
=
[
ϵ
[
1
]
ϵ
[
2
]
.
.
.
ϵ
[
m
]
]
\left[ \begin{matrix} h_x^2[1]+h_y^2[1]+h_z^2[1]\\ h_x^2[2]+h_y^2[2]+h_z^2[2] \\ ... \\ h_x^2[m]+h_y^2[m]+h_z^2[m] \end{matrix} \right] -\left[ \begin{matrix} h_x[1] & h_y[1] & h_z[1] & 1\\ h_x[2] & h_y[2] & h_z[2] & 1\\ ... & ...& ... & ...\\ h_x[m] & h_y[m] & h_z[m] & 1 \end{matrix} \right] \left[ \begin{matrix} 2V_x\\ 2V_y\\ 2V_z \\ B^2 - (V_x^2 +V_y^2 +V_z^2) \end{matrix} \right] = \left[ \begin{matrix} \epsilon[1]\\ \epsilon[2] \\ ... \\ \epsilon[m] \end{matrix} \right]
⎣⎢⎢⎡hx2[1]+hy2[1]+hz2[1]hx2[2]+hy2[2]+hz2[2]...hx2[m]+hy2[m]+hz2[m]⎦⎥⎥⎤−⎣⎢⎢⎡hx[1]hx[2]...hx[m]hy[1]hy[2]...hy[m]hz[1]hz[2]...hz[m]11...1⎦⎥⎥⎤⎣⎢⎢⎡2Vx2Vy2VzB2−(Vx2+Vy2+Vz2)⎦⎥⎥⎤=⎣⎢⎢⎡ϵ[1]ϵ[2]...ϵ[m]⎦⎥⎥⎤ 用符号表示:
Y
−
X
β
=
ϵ
\mathbf{Y} - \textbf{X} \mathbf{\beta}=\mathbf{\epsilon}
Y−Xβ=ϵ 根据使用的模型,需要求一组系数
β
\beta
β,使得:
m
i
n
(
ϵ
T
ϵ
)
=
(
Y
−
X
β
)
T
(
Y
−
X
β
)
min(\mathbf{\epsilon^T}\mathbf{\epsilon})=(\mathbf{Y} - \mathbf{X} \mathbf{\beta})^T(\mathbf{Y} - \mathbf{X} \mathbf{\beta})
min(ϵTϵ)=(Y−Xβ)T(Y−Xβ) 根据最小二乘法,
β
=
(
X
T
X
)
−
1
X
T
Y
=
[
2
V
x
2
V
y
2
V
z
B
2
−
(
V
x
2
+
V
y
2
+
V
z
2
)
]
\beta = \left( \mathbf{X}^TX\right)^{-1}\mathbf{X}^T\mathbf{Y}= \left[ \begin{matrix} 2V_x\\ 2V_y\\ 2V_z \\ B^2 - (V_x^2 +V_y^2 +V_z^2) \end{matrix} \right]
β=(XTX)−1XTY=⎣⎢⎢⎡2Vx2Vy2VzB2−(Vx2+Vy2+Vz2)⎦⎥⎥⎤ 根据
β
\beta
β,可以方便地求出偏置V和磁感应强度的估计值。
V
x
=
β
[
1
]
2
V
y
=
β
[
2
]
2
V
z
=
β
[
3
]
2
B
e
s
t
i
m
a
t
e
=
β
[
4
]
2
+
V
x
2
+
V
y
2
+
V
z
2
V_x=\frac{\beta[1]}{2} \\ V_y=\frac{\beta[2]}{2} \\ V_z=\frac{\beta[3]}{2} \\ B_{estimate}=\sqrt{\beta[4]^2+V_x^2+V_y^2+V_z^2}
Vx=2β[1]Vy=2β[2]Vz=2β[3]Bestimate=β[4]2+Vx2+Vy2+Vz2
实测结果
用手头的一个磁传感器,采集了传感器朝向各个位置时的约600组数据。做了下简单验证。
最小二乘法的计算结果为:
β
=
[
51.78
−
122.84
16.33
−
3305.63
]
\beta= \left[ \begin{matrix} 51.78\\ -122.84 \\ 16.33 \\ -3305.63 \end{matrix} \right]
β=⎣⎢⎢⎡51.78−122.8416.33−3305.63⎦⎥⎥⎤ 转换为零偏和磁感应强度B:
V
x
=
25.89
,
V
y
=
−
61.42
,
V
z
=
8.17
B
e
s
t
i
m
a
t
e
=
34.70
μ
T
V_x =25.89, V_y=-61.42, V_z=8.17 \\ B_{estimate} = 34.70 \mu T
Vx=25.89,Vy=−61.42,Vz=8.17Bestimate=34.70μT 说明传感器样机受到一定的硬磁干扰,XYZ三轴都有一定的。其中Y轴最严重。