文章目录
- 源代码下载
- 系列其他资源
- 一、坐标系说明
- 1.1 摄像头相关坐标系
- 1.2 毫米波雷达相关坐标系
- 1.3 GPS相关坐标系
- 1.4 车体相关坐标系
- 1.5 其他坐标系
-
- 二、毫米波和摄像机联合标定
- 2.1 毫米波
O
X
r
Y
r
Z
r
OX_rY_rZ_r
OXrYrZr坐标系转摄像机
O
X
c
Y
c
Z
c
OX_cY_cZ_c
OXcYcZc坐标系
- 附录A: 旋转矩阵的推导
-
- 附件B:三角公式
源代码下载
- 开源付费版:https://download.csdn.net/download/hgz_gs/15546455
- 半开源-体验版:https://download.csdn.net/download/hgz_gs/15546407
系列其他资源
激光雷达外参数自标定
激光雷达标定
一、坐标系说明
下图为车载6个摄像头、1个360度激光雷达、5个毫米雷达、1个GPS及1个惯性测量传感器以及车体base坐标系的坐标系框图。
传感器类型 | X轴方向 | Y轴方向 | Z轴方向 | 原点 |
---|
Camera | 右 | 地 | 前 | |
Radar | 前 | 左 | 天 | |
Lidar | 右 | 前 | 天 | |
GPS | 东 | 北 | 天 | |
IMU | 前 | 左 | 天 | |
车体base坐标系 | 右 | 前 | 天 | 车辆后轴中心 |
1.1 摄像头相关坐标系
1.2 毫米波雷达相关坐标系
1.3 GPS相关坐标系
1.4 车体相关坐标系
1.5 其他坐标系
1.5.1 左右手坐标系
左手坐标系:伸开我们的左手, 掌心向外, 大拇指与食指成90度, 中指、无名指和小指弯曲, 大拇指指向的方向就是X轴正方向, 食指指向的方向就是Y轴正方向, 中指、无名指和小指指向的方向就是Z轴正方向。用左手的大拇指指向轴的正方向,弯曲手指。那么手指所指示的方向即是轴的正旋转方向。
右手坐标系:伸开我们的右手, 掌心向内, 大拇指与食指成90度, 中指、无名指和小指弯曲, 大拇指指向的方向就是X轴正方向, 食指指向的方向就是Y轴正方向, 中指、无名指和小指指向的方向就是Z轴正方向。用右手的大拇指指向轴的正方向,弯曲手指。那么手指所指示的方向即是轴的正旋转方向。
左手坐标系和右手坐标系中, X轴和Y轴的方向是相同的, Z轴的方向相反。在计算机中通常使用的是左手坐标系,而数学中则通常使用右手坐标系。
二、毫米波和摄像机联合标定
传感器类型 | X轴方向 | Y轴方向 | Z轴方向 | 坐标系 |
---|
Camera | 右 | 地 | 前 |
O
X
c
Y
c
Z
c
OX_cY_cZ_c
OXcYcZc |
Radar | 前 | 左 | 天 |
O
X
r
Y
r
Z
r
OX_rY_rZ_r
OXrYrZr |
2.1 毫米波
O
X
r
Y
r
Z
r
OX_rY_rZ_r
OXrYrZr坐标系转摄像机
O
X
c
Y
c
Z
c
OX_cY_cZ_c
OXcYcZc坐标系
假设毫米传感器在摄像机坐标系下的坐标为
X
o
f
f
s
e
t
Y
o
f
f
s
e
t
Z
o
f
f
s
e
t
X_{offset}Y_{offset}Z_{offset}
XoffsetYoffsetZoffset;
O
X
r
Y
r
Z
r
OX_rY_rZ_r
OXrYrZr坐标系在
O
X
c
Y
c
Z
c
OX_cY_cZ_c
OXcYcZc坐标系下的姿态为
(
α
,
β
,
γ
)
(\alpha,\beta,\gamma)
(α,β,γ)(俯仰角pitch、航向角yaw、翻滚角roll);在
X
c
X_c
Xc轴的旋转矩阵为
R
x
R_x
Rx, 在
Y
c
Y_c
Yc轴的旋转矩阵为
R
y
R_y
Ry, 在
Z
c
Z_c
Zc轴的旋转矩阵为
R
z
R_z
Rz;则由前左天
O
X
r
Y
r
Z
r
OX_rY_rZ_r
OXrYrZr坐标系转右地前
O
X
c
Y
c
Z
c
OX_cY_cZ_c
OXcYcZc坐标系:
{
X
c
=
R
x
(
−
Y
r
)
+
X
o
f
f
s
e
t
Y
c
=
R
y
(
−
Z
r
)
+
Y
o
f
f
s
e
t
Z
c
=
R
z
(
X
r
)
+
Z
o
f
f
s
e
t
\begin{cases} X_c = R_x (- Y_r) + X_{offset} \\ Y_c = R_y (- Z_r) + Y_{offset} \\ Z_c = R_z ( X_r) + Z_{offset} \end{cases}
⎩⎪⎨⎪⎧Xc=Rx(−Yr)+XoffsetYc=Ry(−Zr)+YoffsetZc=Rz(Xr)+Zoffset
写成矩阵的形式:
[
X
c
Y
c
Z
c
]
=
{
[
1
0
0
0
c
o
s
(
α
)
s
i
n
(
α
)
0
−
s
i
n
(
α
)
c
o
s
(
α
)
]
[
c
o
s
(
β
)
0
−
s
i
n
(
β
)
0
1
0
s
i
n
(
β
)
0
c
o
s
(
β
)
]
[
c
o
s
(
γ
)
s
i
n
(
γ
)
0
−
s
i
n
(
γ
)
c
o
s
(
γ
)
0
0
0
1
]
}
{
[
0
−
1
0
0
0
−
1
1
0
0
]
∗
[
X
r
Y
r
Z
r
]
}
+
{
[
X
o
f
f
s
e
t
Y
o
f
f
s
e
t
Z
o
f
f
s
e
t
]
}
\left[ \begin{matrix} X_c \\ Y_c \\ Z_c \end{matrix} \right] = \left\{ \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos(\alpha) & sin(\alpha) \\ 0 & -sin(\alpha) & cos(\alpha) \end{matrix} \right] \left[ \begin{matrix} cos(\beta) & 0 & -sin(\beta) \\ 0 & 1 & 0 \\ sin(\beta) & 0 & cos(\beta) \end{matrix} \right] \left[ \begin{matrix} cos(\gamma) & sin(\gamma) & 0 \\ -sin(\gamma) & cos(\gamma) & 0 \\ 0 & 0 & 1 \end{matrix} \right] \right\} \left\{ \left[ \begin{matrix} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \\ \end{matrix} \right] * \left[ \begin{matrix} X_r \\ Y_r \\ Z_r \end{matrix} \right] \right\} + \left\{ \left[ \begin{matrix} X_{offset} \\ Y_{offset} \\ Z_{offset} \end{matrix} \right] \right\}
⎣⎡XcYcZc⎦⎤=⎩⎨⎧⎣⎡1000cos(α)−sin(α)0sin(α)cos(α)⎦⎤⎣⎡cos(β)0sin(β)010−sin(β)0cos(β)⎦⎤⎣⎡cos(γ)−sin(γ)0sin(γ)cos(γ)0001⎦⎤⎭⎬⎫⎩⎨⎧⎣⎡001−1000−10⎦⎤∗⎣⎡XrYrZr⎦⎤⎭⎬⎫+⎩⎨⎧⎣⎡XoffsetYoffsetZoffset⎦⎤⎭⎬⎫
接下来就是相机的标定原理了。
雷达转相机坐标系:
[
X
c
Y
c
Z
c
]
=
{
R
∣
T
}
{
[
0
−
1
0
0
0
−
1
1
0
0
]
∗
[
X
r
Y
r
Z
r
]
}
{
[
0
−
1
0
0
0
−
1
1
0
0
]
∗
[
X
r
Y
r
Z
r
]
}
+
{
[
X
o
f
f
s
e
t
Y
o
f
f
s
e
t
Z
o
f
f
s
e
t
]
}
\left[ \begin{matrix} X_c \\ Y_c \\ Z_c \end{matrix} \right] = \left\{ R|T \right\} \left\{ \left[ \begin{matrix} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \\ \end{matrix} \right] * \left[ \begin{matrix} X_r \\ Y_r \\ Z_r \end{matrix} \right] \right\} \left\{ \left[ \begin{matrix} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \\ \end{matrix} \right] * \left[ \begin{matrix} X_r \\ Y_r \\ Z_r \end{matrix} \right] \right\} + \left\{ \left[ \begin{matrix} X_{offset} \\ Y_{offset} \\ Z_{offset} \end{matrix} \right] \right\}
⎣⎡XcYcZc⎦⎤={R∣T}⎩⎨⎧⎣⎡001−1000−10⎦⎤∗⎣⎡XrYrZr⎦⎤⎭⎬⎫⎩⎨⎧⎣⎡001−1000−10⎦⎤∗⎣⎡XrYrZr⎦⎤⎭⎬⎫+⎩⎨⎧⎣⎡XoffsetYoffsetZoffset⎦⎤⎭⎬⎫
因为毫米波雷达的
Z
r
Z_r
Zr为0,也就时相机坐标系的
Y
c
Y_c
Yc为0,没有
Y
c
Y_c
Yc坐标轴。对上式进行化简可得:
[
X
c
Y
c
Z
c
]
=
{
[
c
o
s
(
β
)
0
−
s
i
n
(
β
)
0
1
0
s
i
n
(
β
)
0
c
o
s
(
β
)
]
}
{
[
0
−
1
0
0
0
−
1
1
0
0
]
∗
[
X
r
Y
r
Z
r
]
}
+
{
[
X
o
f
f
s
e
t
Y
o
f
f
s
e
t
Z
o
f
f
s
e
t
]
}
\left[ \begin{matrix} X_c \\ Y_c \\ Z_c \end{matrix} \right] =\left\{ \left[ \begin{matrix} cos(\beta) & 0 & -sin(\beta) \\ 0 & 1 & 0 \\ sin(\beta) & 0 & cos(\beta) \end{matrix} \right] \right\} \left\{ \left[ \begin{matrix} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \\ \end{matrix} \right] * \left[ \begin{matrix} X_r \\ Y_r \\ Z_r \end{matrix} \right] \right\} + \left\{ \left[ \begin{matrix} X_{offset} \\ Y_{offset} \\ Z_{offset} \end{matrix} \right] \right\}
⎣⎡XcYcZc⎦⎤=⎩⎨⎧⎣⎡cos(β)0sin(β)010−sin(β)0cos(β)⎦⎤⎭⎬⎫⎩⎨⎧⎣⎡001−1000−10⎦⎤∗⎣⎡XrYrZr⎦⎤⎭⎬⎫+⎩⎨⎧⎣⎡XoffsetYoffsetZoffset⎦⎤⎭⎬⎫
相机坐标系转像素坐标系:
z
c
1
(
u
v
1
)
=
{
[
1
d
x
0
u
0
0
1
d
y
v
0
0
0
1
]
[
f
0
0
0
f
0
0
0
1
]
}
{
[
X
c
Y
c
Z
c
]
}
z_{c1} \left( \begin{matrix} u \\ v \\ 1 \end{matrix} \right) = \left\{ \left[ \begin{matrix} \frac{1}{d_x} & 0 & u_0 \\ 0 & \frac{1}{d_y} & v_0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1 \end{matrix} \right] \right\} \left\{ \left[ \begin{matrix} X_c \\ Y_c \\ Z_c \end{matrix} \right] \right\}
zc1⎝⎛uv1⎠⎞=⎩⎨⎧⎣⎡dx1000dy10u0v01⎦⎤⎣⎡f000f0001⎦⎤⎭⎬⎫⎩⎨⎧⎣⎡XcYcZc⎦⎤⎭⎬⎫
附录A: 旋转矩阵的推导
一般两坐标进行旋转变换时沿逆时针旋转。
二维旋转
法一
有点P(Pa,PYa)[(Xa,Ya)],当坐标由 x –> y 旋转 b(θ) 度后,求该点在新坐标轴的坐标是多少。
法二
有点P(Xa,Ya),当坐标由 x –> y 旋转 θ 度后,求该点在新坐标轴的坐标是多少。
三维旋转
三维旋转,需要先搞清楚正、负方向(使用的是右手法则,在二维平面增加一维z,它的正方向朝向屏幕外)
绕x轴进行旋转(在yz平面逆时针旋转):
绕y轴进行旋转(在zx平面逆时针旋转):
绕z轴进行旋转(在xy平面逆时针旋转):
参考:https://mathworld.wolfram.com/RotationMatrix.html
附件B:三角公式
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)