《自动驾驶与机器人中的SLAM技术》之三维空间点云直线拟合
高博的新作《自动驾驶与机器人中的SLAM技术》中提出了一个点云直线拟合的问题,其中的直线方程以及最小二乘目标函数的引出有点突兀(P185-186),这里记录一下理解过程。
1 三维空间中的直线表达方式
(1)平面相交线
对于三维空间中的直线,可以通过两个平面的交线来表达,即:
{
A
1
x
+
B
1
y
+
C
1
z
+
D
1
=
0
A
2
x
+
B
2
y
+
C
2
z
+
D
2
=
0
\begin{cases} A_1x+B_1y+C_1z+D_1=0\\ A_2x+B_2y+C_2z+D_2=0\\ \end{cases}
{A1x+B1y+C1z+D1=0A2x+B2y+C2z+D2=0
由上式可知,这种表达方式需要确定两个平面的参数,共计8个,显然不是一个较好的表达方式。
(2)矢量+已知点
根据直线的对称方程有:
x
−
x
0
m
=
y
−
y
0
n
=
z
−
z
0
p
=
t
\frac{x-x_0}{m}=\frac{y-y_0}{n}=\frac{z-z_0}{p}=t
mx−x0=ny−y0=pz−z0=t
式中,
t
t
t是固定比值,通过移项有:
{
x
=
x
0
+
m
t
y
=
y
0
+
n
t
z
=
z
0
+
p
t
\begin{cases} x=x_0+mt\\ y=y_0+nt\\ z=z_0+pt \end{cases}
⎩
⎨
⎧x=x0+mty=y0+ntz=z0+pt
令
P
(
x
0
,
y
0
,
z
0
)
P(x_0,y_0,z_0)
P(x0,y0,z0)表示直线上已知点,
d
(
m
,
n
,
p
)
d(m,n,p)
d(m,n,p)表示直线的单位方向向量,
x
ˉ
(
x
,
y
,
z
)
\bar{x} (x,y,z)
xˉ(x,y,z)表示直线上的任意一点,则直线的方程可简化为:
x
ˉ
=
d
t
+
P
\bar{x} =dt+P
xˉ=dt+P
2 三维空间中点到直线的最小二乘目标函数
如上图所示,对于空间中的任意一点
x
ˉ
k
(
x
,
y
,
z
)
\bar{x}_k(x,y,z)
xˉk(x,y,z),设C直线上已知点
P
P
P到该点的向量,则
C
C
C与直线的方向向量的点乘表示该向量的模长在直线上的投影(对应途中的
b
b
b),根据勾股定理得任意空间点
x
ˉ
k
(
x
,
y
,
z
)
\bar{x}_k(x,y,z)
xˉk(x,y,z)到直线的距离平方为
(
x
ˉ
k
−
P
)
2
−
(
(
x
ˉ
k
−
P
)
d
)
2
(\bar{x}_k-P)^2-((\bar{x}_k-P)d)^2
(xˉk−P)2−((xˉk−P)d)2,这刚好构成了空间点到空间直线的距离残差平方项,将所有空间点的残差平方项累加便得到了求解空间直线参数的最小二乘目标函数。