第2章:标定基础理论:坐标系定义与变换
各位同学,大家好。今天我们聊聊标定里最基础、也最容易搞混的东西——坐标系。
说实话,我刚入行那会儿,被这几个坐标系绕得晕头转向。相机坐标系、车辆坐标系、图像坐标系……每个项目都要重新捋一遍。后来我发现,搞懂它们之间的关系,标定就成功了一半。
2.1 车辆坐标系
先说说车辆坐标系。这是整个ADAS系统的“世界原点”。
我个人习惯用ISO 8855标准。简单来说:
- X轴:指向车辆前方(正方向)
- Y轴:指向车辆左侧(正方向)
- Z轴:指向车辆上方(正方向)
嗯,这里要注意:不同车厂可能有自己的定义。比如有些用右手系,有些用左手系。我遇到过一家供应商,他们的坐标系Z轴朝下……结果融合数据时,高度值全是负的。排查了整整两天。
2.2 相机坐标系
相机坐标系,说白了就是“以摄像头为原点”的坐标系。
它的定义是这样的:
- X轴:指向相机右侧
- Y轴:指向相机下方(注意,是下方!)
- Z轴:指向相机前方(沿着光轴方向)
为什么Y轴朝下?因为图像坐标系的原点在左上角,Y轴朝下。这样从相机坐标系投影到图像坐标系时,符号不会乱。你想想看,如果Y轴朝上,投影时还得取反,多麻烦。
我记得有一次做环视标定,四个鱼眼相机的坐标系定义不一致。左前的相机Y轴朝下,右前的相机Y轴朝上……结果拼接出来的全景图,地面是扭曲的。后来我强制统一了定义,问题才解决。
2.3 图像坐标系
图像坐标系,就是像素的“地盘”。
它分两种:
- 像素坐标系:以图像左上角为原点,u轴向右,v轴向下。单位是像素。
- 物理坐标系:以图像中心(主点)为原点,x轴向右,y轴向下。单位是毫米。
两者之间就差一个平移和缩放。公式很简单:
u = x / dx + u0
v = y / dy + v0
其中dx、dy是每个像素的物理尺寸,u0、v0是主点坐标。
2.4 内参与外参
好了,坐标系定义清楚了,接下来就是怎么把它们联系起来。这就涉及到内参和外参。
2.4.1 内参
内参,是相机本身的“性格”。它描述了从相机坐标系到图像坐标系的映射关系。
内参矩阵K长这样:
K = [fx 0 cx
0 fy cy
0 0 1]
其中:
- fx, fy:焦距(像素单位)
- cx, cy:主点坐标(像素单位)
为什么会有两个焦距?因为像素不一定是正方形的。我遇到过一些工业相机,fx和fy能差5%以上。如果不校正,测距误差会很大。
内参还包括畸变系数。径向畸变(桶形/枕形)和切向畸变(镜头安装倾斜)。
2.4.2 外参
外参,是相机在车辆坐标系里的“位置和姿态”。
它由旋转矩阵R和平移向量t组成:
P_vehicle = R * P_camera + t
说白了,就是把相机坐标系下的点,变换到车辆坐标系下。
旋转矩阵R有3个自由度(俯仰角、偏航角、翻滚角)。平移向量t有3个自由度(X、Y、Z)。一共6个自由度。
嗯,这里要注意:外参是动态的。车辆载重变化、轮胎气压变化,都会影响外参。我曾经在项目里发现,空载和满载时,相机俯仰角能差0.5度。对于100米外的目标,测距误差能到1米。
2.5 刚体变换与透视投影
这两个概念,是坐标系变换的“灵魂”。
2.5.1 刚体变换
刚体变换,就是物体在三维空间里“平移+旋转”,不改变形状和大小。
数学上,它用一个4x4的齐次变换矩阵表示:
T = [R t
0 1]
其中R是3x3旋转矩阵,t是3x1平移向量。
为什么用齐次坐标?因为可以把旋转和平移合并成一次矩阵乘法。方便,也容易求逆。
我个人习惯用欧拉角表示旋转,但要注意万向锁问题。如果你做连续旋转,建议用四元数。我在做IMU融合时,就吃过万向锁的亏——俯仰角到90度时,偏航角和翻滚角突然“跳变”。
2.5.2 透视投影
透视投影,就是把3D点“拍扁”到2D图像上。
公式很简单:
u = fx * X / Z + cx
v = fy * Y / Z + cy
注意,这里有个除法——除以Z。这就是为什么远处的物体看起来小,近处的看起来大。
你想想看,如果Z=0,公式就炸了。所以相机正前方的点(Z=0)是投影不出来的。这也是为什么标定板不能放在相机正前方。
2.6 总结
好了,这一章的内容就这些。我们来捋一下:
- 车辆坐标系:世界原点,X前Y左Z上
- 相机坐标系:X右Y下Z前
- 图像坐标系:像素坐标和物理坐标
- 内参:相机本身的焦距、主点、畸变
- 外参:相机在车辆坐标系下的位置和姿态
- 刚体变换:旋转+平移,用齐次矩阵
- 透视投影:3D到2D,除以Z
下一章,我们聊聊具体的标定方法——怎么用标定板算出这些参数。到时候我会分享一些实战中的“骚操作”。
记住:坐标系搞清楚了,标定就成功了一半。别嫌基础,我见过太多工程师在这上面翻车了。