MOBILEYE: Vision-based ACC with a Single Camera 车辆测距
本文为基于MobliEye的论文理解。文中将路面是平的和相机水平(光轴平行于路面)安装作为假设条件,但可以在文章的基础上,对摄像机角度和道路坡道进行补偿。
测距
单目相机测距的方法通常有两个:
1.车辆在图像中的大小
2.车辆底部在图像中的位置
由于车辆的大小并不是固定的,方案一并不可取。
这里引入方程,其中Z为摄像头与前面车辆底部的水平间距;y为投影到图像上的高;H为相机的高度。
y
=
f
H
Z
y=\frac{f H}{Z}
y=ZfH
详细的示意图可见Fig.1.
相机被安装在了A车上,针孔为P点,焦距为f(单位mm,图中仅方便辨认)
在实际中,车辆与道路的误差在1个像素点内。因此距离的误差
Z
e
r
r
Z_{err}
Zerr可以被写成:
Z
e
r
r
=
Z
−
Z
n
=
Z
−
f
H
y
+
n
=
Z
−
f
H
f
H
Z
+
n
=
n
Z
2
f
H
+
n
Z
Z_{e r r}=Z-Z_{n}=Z-\frac{f H}{y+n}=Z-\frac{f H}{\frac{f H}{Z}+n}=\frac{n Z^{2}}{f H+n Z}
Zerr=Z−Zn=Z−y+nfH=Z−ZfH+nfH=fH+nZnZ2
n代表接触点的位置差,将其设定为1且
f
H
>
>
n
Z
fH>>nZ
fH>>nZ,得:
Z
e
r
r
≈
n
Z
2
f
H
Z_{e r r} \approx \frac{n Z^{2}}{f H}
Zerr≈fHnZ2
误差随着距离的变化呈二次方增长。
Example: In our case a 640x480 image with a horizontal FOV of 47° gives f= 740pixels. The camera height at H= 1.2m. Thus assuming 1 pixel error, a 5% error in depth is expected at a distance of:
带入前式,
Z
=
Z
e
r
r
Z
f
H
=
0.05
∗
740
∗
1.2
=
44
m
Z=\frac{Z_{e r r}}{Z} f H=0.05 * 740 * 1.2=44 m
Z=ZZerrfH=0.05∗740∗1.2=44m
这个例子是表明,在90m左右误差大约10%,44m误差约为5%。
测速
离散系统通过使用离散积分 v = Δ Z Δ t v = \frac{\Delta Z}{\Delta t} v=ΔtΔZ来测速。
通过尺度改变计算速度
令w和w’分别为目标车辆在位置Z和Z’的高度,方程可以写为:
w
=
f
W
Z
w
′
=
f
W
Z
′
w =\frac{f W}{Z} \\ w^{\prime} =\frac{f W}{Z^{\prime}}
w=ZfWw′=Z′fW
带入离散积分内,可得:
v
=
Δ
Z
Δ
t
=
Z
′
−
Z
Δ
t
=
f
H
W
′
−
f
H
W
Δ
t
=
f
H
w
−
w
′
w
′
w
Δ
t
=
Z
w
−
w
′
w
′
Δ
t
v=\frac{\Delta Z}{\Delta t}=\frac{Z^{\prime}-Z}{\Delta t}=\frac{\frac{f H}{W^{\prime}}-\frac{f H}{W}}{\Delta t}=\frac{f H \frac{w-w^{\prime}}{w^{\prime} w}}{\Delta t}=\frac{Z \frac{w-w^{\prime}}{w^{\prime}}}{\Delta t}
v=ΔtΔZ=ΔtZ′−Z=ΔtW′fH−WfH=ΔtfHw′ww−w′=ΔtZw′w−w′
定义尺度s:
s
=
w
−
w
′
w
′
s=\frac{w-w^{\prime}}{w^{\prime}}
s=w′w−w′
得到速度:
v
=
Z
s
Δ
t
v=\frac{Z s}{\Delta t}
v=ΔtZs



计算速度误差
这里引入了一个对齐误差
S
e
r
r
S_{err}
Serr(alignment error)的概念,对齐误差在0.1个像素是可能的。配准误差的影响取决于目标在图像中的大小。定义尺度误差
S
a
c
c
S_{acc}
Sacc:
s
a
c
c
=
s
e
r
r
w
=
s
e
r
r
Z
f
W
Δ
t
s_{a c c} =\frac{s_{e r r}}{w} =\frac{s_{e r r} Z}{fW\Delta t}
sacc=wserr=fWΔtserrZ
假设测距完全准确,相对速度误差为:
v
e
r
r
c
=
Z
s
a
c
c
Δ
t
=
Z
2
s
e
r
r
f
W
Δ
t
v_{e r r}^{c} =\frac{Z s_{a c c}}{\Delta t} =\frac{Z^{2} s_{e r r}}{f W \Delta t}
verrc=ΔtZsacc=fWΔtZ2serr
这里可以知道:
- 相对速度误差与相对速度无关
- 相对速度误差与距离的平方成正比
- 相对速度误差与时间间隔成反比,因此时间越长越好
- 有一个窄的FOV(增大f)可以提高精度
此时将测距的误差项添加上,
v
z
e
r
r
v_{zerr}
vzerr速度在距离上的误差:
v
z
e
r
r
=
Z
e
r
r
S
Δ
t
=
n
Z
2
f
H
s
Δ
t
=
n
Z
v
f
H
v_{z e r r}=\frac{Z_{e r r} S}{\Delta t}=\frac{n Z^{2}}{f H} \frac{s}{\Delta t}=\frac{n Z v}{f H}
vzerr=ΔtZerrS=fHnZ2Δts=fHnZv
合并可得:
v
e
r
r
=
Z
2
s
e
r
r
f
W
Δ
t
+
n
Z
v
f
H
v_{e r r}=\frac{{Z^{2} s_{e r r}}}{f W \Delta t}+ \frac{n Z v}{f H}
verr=fWΔtZ2serr+fHnZv
通过此式,依旧可以知道,误差可以通过延长时间来减小。然而,
Δ
t
\Delta t
Δt在增大后,速度计算通过有穷积分是不准确的。
Z
(
Δ
t
)
=
1
2
a
Δ
t
2
+
v
Δ
t
+
Z
0
Z(\Delta t) =\frac{1}{2} a \Delta t^{2}+v \Delta t+Z_{0}
Z(Δt)=21aΔt2+vΔt+Z0
v
(
Δ
t
)
=
a
Δ
t
+
v
0
v(\Delta t) =a \Delta t+v_{0}
v(Δt)=aΔt+v0
此时a为相对加速度。换种方式,通过使用相对距离差来计算速度:
Δ
Z
=
Z
(
Δ
t
)
−
Z
0
=
1
2
a
Δ
t
2
+
v
0
Δ
t
\Delta Z=Z(\Delta t)-Z_{0}=\frac{1}{2} a \Delta t^{2}+v_{0} \Delta t
ΔZ=Z(Δt)−Z0=21aΔt2+v0Δt
除以
Δ
t
\Delta t
Δt,这时候可以发现,除了
v
0
v_0
v0,多了一个误差项:
Δ
Z
Δ
t
=
1
2
a
Δ
t
+
v
0
\frac{\Delta Z}{\Delta t}=\frac{1}{2} a \Delta t + v_0
ΔtΔZ=21aΔt+v0
带入
v
e
r
r
v_{err}
verr中,误差项为:
v
e
r
r
=
Z
2
S
e
r
r
f
W
Δ
t
+
n
Z
v
f
H
+
1
2
a
Δ
t
v_{e r r}=\frac{Z^{2} S_{e r r}}{f W \Delta t}+\frac{n Z v}{f H}+\frac{1}{2} a \Delta t
verr=fWΔtZ2Serr+fHnZv+21aΔt
这时候可以求导取最优解:
−
Z
2
s
e
r
r
f
W
Δ
t
2
+
1
2
a
=
0
-\frac{Z^{2} s_{e r r}}{f W \Delta t^{2}}+\frac{1}{2} a=0
−fWΔt2Z2serr+21a=0
得:
Δ
t
=
2
Z
2
s
e
r
r
f
W
a
\Delta t=\sqrt{\frac{2 Z^{2} s_{e r r}}{f W a}}
Δt=fWa2Z2serr
获得最终的速度误差:
v
e
r
r
=
Z
2
a
s
e
r
r
f
W
+
n
Z
v
f
H
v_{err} = Z \sqrt{\frac{2as_{err}}{fW}} + \frac{nZv}{fH}
verr=ZfW2aserr+fHnZv
在最优解时,速度误差与距离Z呈线性相关。
当加速度为0时值为无穷大,因此系统要限定在
Δ
t
=
2
s
\Delta t = 2s
Δt=2s