在地面运行的小车如果可以认为在平面运动,则可以使用平面约束(注意不能用于斜坡之类的地面,这里相当于绝对水平。)
水平则有z=0,roll和pitch=0,对于四元数q来说,就是只绕z轴旋转yaw角 q = cos(yaw/2) + sin(yaw/2)(0,0,1) 也就是qx = 0 qy = 0
这三个可以成为每一帧的约束。
q转为R
R应该为
[
1
−
2
z
2
2
w
z
0
−
2
w
z
1
−
2
z
2
0
0
0
1
]
\begin{matrix}[ 1-2z^2 & 2wz & 0 \\ -2wz & 1-2z^2 & 0 \\ 0 & 0 & 1 \end{matrix}]
[1−2z2−2wz02wz1−2z20001]
这个就是二维平面的转换公式。
我们可以使用矩阵第三列前两行的元素都为0,作为约束(也可以取第三行前两列)我们构造行列式乘法,把这两个元素取出来
1
0
0
0
1
0
∗
R
∗
0
0
1
\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0\end{matrix} * R *\begin{matrix} 0 \\ 0 \\ 1\end{matrix}
100100∗R∗001
这样就可以把这两个元素取出来。
所以我们构建的残差方程为
0
−
[
0
0
1
]
∗
P
0 - \left[\begin{matrix}0 & 0 & 1\end{matrix}\right] * P
0−[001]∗P
[
0
0
]
−
1
0
0
0
1
0
∗
R
∗
0
0
1
\left[\begin{matrix}0 \\ 0\end{matrix}\right] - \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0\end{matrix} * R *\begin{matrix} 0 \\ 0 \\ 1\end{matrix}
[00]−100100∗R∗001
我们把上面得的矩阵设为e3 = [0 0 1]和
Λ
=
1
0
0
0
1
0
\Lambda = \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0\end{matrix}
Λ=100100
我们优化的变量是
P
i
w
P_i^w
Piw
R
i
w
R_i^w
Riw 而平面约束是轮子的坐标。
R
o
w
=
R
i
w
∗
R
o
b
P
o
w
=
R
i
w
∗
t
o
i
+
P
i
w
R_o^w = R_i^w * R^b_o\\ P_o^w = R_i^w * t_o^i + P_i^w
Row=Riw∗RobPow=Riw∗toi+Piw
因此残差为:
r
1
=
0
−
(
e
3
T
∗
(
R
i
w
∗
t
o
i
+
P
i
w
)
)
r
2
=
0
−
(
Λ
∗
R
i
w
∗
R
o
b
∗
e
3
)
r1 = 0 - (e_3^T * (R_i^w * t_o^i + P_i^w ))\\ r2 = 0- (\Lambda * R_i^w * R^b_o * e_3)
r1=0−(e3T∗(Riw∗toi+Piw))r2=0−(Λ∗Riw∗Rob∗e3)
求雅克比偏导:
∂
r
1
∂
p
=
−
e
3
T
∂
r
1
∂
θ
=
lim
δ
θ
→
0
−
e
3
T
∗
R
i
w
∗
(
1
+
δ
θ
Λ
)
∗
t
o
i
+
e
3
T
∗
R
i
w
∗
t
o
i
θ
=
−
e
3
T
∗
R
i
w
∗
δ
θ
Λ
∗
t
o
i
θ
=
e
3
T
∗
R
i
w
∗
(
t
o
i
)
Λ
∂
r
2
∂
p
=
0
∂
r
2
∂
θ
=
lim
δ
θ
→
0
−
Λ
∗
R
i
w
(
1
+
δ
θ
Λ
)
∗
R
o
b
∗
e
3
+
(
Λ
∗
R
i
w
∗
R
o
b
∗
e
3
)
θ
=
lim
δ
θ
→
0
−
Λ
∗
R
i
w
δ
θ
Λ
∗
R
o
b
∗
e
3
θ
=
Λ
∗
R
i
w
∗
(
R
o
b
∗
e
3
)
Λ
\frac{\partial{r1}}{\partial{p}} = -e_3^T\\ \frac{\partial{r1}}{\partial{\theta}} = \lim_{\delta\theta \to 0}{\frac{-e_3^T * R_i^w*(1 + \delta\theta^{\Lambda}) * t_o^i + e_3^T * R_i^w * t_o^i}{\theta}} \\ = -\frac{e_3^T * R_i^w * \delta\theta^{\Lambda}* t_o^i}{\theta} = e_3^T * R_i^w *(t_o^i)^{\Lambda} \\ \frac{\partial{r2}}{\partial{p}} = 0 \\ \frac{\partial{r2}}{\partial{\theta}} = \lim_{\delta\theta \to 0}{\frac{-\Lambda * R_i^w (1 + \delta\theta^{\Lambda}) * R^b_o * e_3 + (\Lambda * R_i^w * R^b_o * e_3)}{\theta}} \\ =\lim_{\delta\theta \to 0}{\frac{-\Lambda * R_i^w \delta\theta^{\Lambda}* R^b_o * e_3 }{\theta}} \\ = \Lambda * R_i^w * (R^b_o * e_3)^{\Lambda}
∂p∂r1=−e3T∂θ∂r1=δθ→0limθ−e3T∗Riw∗(1+δθΛ)∗toi+e3T∗Riw∗toi=−θe3T∗Riw∗δθΛ∗toi=e3T∗Riw∗(toi)Λ∂p∂r2=0∂θ∂r2=δθ→0limθ−Λ∗Riw(1+δθΛ)∗Rob∗e3+(Λ∗Riw∗Rob∗e3)=δθ→0limθ−Λ∗RiwδθΛ∗Rob∗e3=Λ∗Riw∗(Rob∗e3)Λ
以上就是认为地面是绝对水平的约束。如果不是绝对水平,而是平面的斜坡之类的,可以用两帧之间固定,比如两帧之间z的增量是一个固定值,roll和pitch是一个固定值之类的。