ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

像素坐标系相机坐标系自车ego坐标系世界坐标系

像素坐标系相机坐标系自车ego坐标系世界坐标系 像素坐标系pixel coordinate system图像左上角是原点向右宽width是X轴向下高height是Y轴像素坐标系随着车辆运动而运动相对相机是不变的单位是像素。神经网络处理图片时用的就是它图像坐标系image coordinate system相机光心的光轴和虚拟成像面的交点就是主点主点就是图像坐标系的原点经过主点且在虚拟成像面且平行width宽且向右的就是X轴经过主点且在虚拟成像面且平行height高且向下的就是Y轴图片旋转一般就是在图像坐标系旋转以主点为原点来旋转opencv的旋转就是这么实现的相机坐标系 (camera coordinate system)原点光心 C根据针孔成像的原理在针孔后面的像是翻转倒过来的不太方便理解的推导所以就有了针孔前面的虚拟成像面虚拟成像面在针孔前面且成像是正立的。相机光心垂直成像面朝前也就是光轴就是Z轴和成像面的交点是【主点】平行成像面的width宽且经过光心的朝右的是X轴平行成像面的height高且经过光心的朝下的是Y轴当光轴Z轴在水平面时此时X轴水平朝右Y轴竖直向下三个轴的交点就是光心相机坐标系随着车辆运动而运动相对相机是不变的深度d是ZcZ_cZc​沿着Z轴的距离不是光心到物体的直线距离也不是垂直地面的距离自车坐标系 (ego vehicle coordinate system)自车坐标系的原点一般是人为规定的并没有明确的要求下图中的原点在后面胎接地点的中心X轴一般朝前Y轴一般朝左Z轴一般竖直向上自车坐标系随着车辆运动而运动相对车辆是不变的相机坐标系变换到自车ego坐标系是存在轴交换的而且包括旋转平移世界坐标系 (world coordinate system)在车辆刚刚启动时还没有开始运动imu位移都是0X轴一般朝前Y轴一般朝左Z轴一般竖直向上车辆启动行驶以后该坐标系保持不变一直在车辆启动的位置。所以世界坐标系不随车辆运动而运动一直保持启动时的状态imu会记录位移和旋转在车辆启动的那一刻若世界坐标系都是0此时imu坐标系和世界坐标系是重合的自车ego坐标变换到世界坐标时只需要旋转和平移不需要轴变换。自车ego坐标变换到世界坐标的旋转矩阵R和平移矩阵T都是随时间变化的需要实时获取IMU的pose数据计算得到才行。每一帧的图像像素点变换到世界坐标需要用当时的IMU数据才行的。很多人以为 “车没动就重合”其实上电后那几秒 IMU 还在估计零偏这期间的位姿是不准的。真正应该把世界系锚定的时刻是 IMU 报告 “对准完成” 的那一帧不是车打火线。两个反例实际项目里经常并不重合接了 GNSS / 高精地图世界系是 UTM / 地图全局坐标系这时候 t0 时刻 ego 系和世界系之间差一个初始经纬度 初始航向角R_we(0)根本不是单位阵。IMU 不装在后轮接地点ego 原点在轮胎接地点IMU 装在车厢里某个位置中间隔着一个 lever arm 外参。严格说 t0 时是 “IMU 系” 和世界系对齐了要再乘一个 IMU→ego 的固定外参R_e_imu, t_e_imu才是 ego 系。初始对准有姿态误差低成本 IMU 静止对准时航向可能差几度这意味着R_we(0)虽然被你赋值成 I但物理真实姿态和这个 I 之间有个小偏角 —— 这是 BEV 远处横向误差的来源之一。bev也就是鸟瞰视角从上往下俯视俯视图只包括自车坐标系的x轴和y轴或者世界坐标系的x轴和y轴此时z轴消失了相机坐标系和ego自车坐标系的轴不相同需要加上旋转矩阵才行。附录下面来自豆包对了一半——旋转轴向层面成立平移原点层面不成立。拆成两层看1. 旋转部分轴向你的说法是对的IMU 机械编排mechanization内部积分出来的本质上就是从t0 对准完成那一刻的 IMU 坐标系b 系到当前时刻 IMU 坐标系的旋转R_b(t)和平移p_b(t)。所以里程计里那个世界系它的轴向确实是被钉死在 t0 IMU 系的朝向上的。这一层你说对了。2. 平移部分原点不对差一个 lever armIMU 芯片有自己的物理中心它不是你笔记里那个 ego 原点后轮接地点。从 IMU 芯片中心到后轮接地点隔着一个固定的安装向量t_e_imu系原点在物理上是哪一点里程计原生世界系t0 IMU系t0 时刻IMU 芯片中心你业务里的世界系t0 ego系t0 时刻后轮接地点两者差一个固定向量t_e_imuX 米前后、Y 米左右、Z 米高低。这个向量是标定出来的不是 0。3. 还有一个隐藏的旋转R_e_imuIMU 板子在车上很少和 ego 系完全对齐可能斜装、可能芯片本身轴向定义就不是 X前Y左Z上。完整外参是 6 DoFP_ego R_e_imu · P_imu t_e_imu如果 IMU 正着装、轴向和 ego 一致 →R_e_imu I可以偷懒否则连轴向都要对齐光平移不够。工程上常见的合并做法大部分算法栈Apollo、Autoware、OpenCDA 那一套在初始化时就把世界系直接定义为t0 时刻的 ego 系而不是t0 时刻的 IMU 系。做法是在 IMU 驱动出口处把机械编排输出的位姿先乘上固定外参(R_e_imu, t_e_imu)这样上层拿到的R_we(t), t_we(t)就已经是ego→世界的变换不用在每个投影点都补一次外参。一句话修正你的话里程计内部积分的世界系 t0 对准完成时刻的IMU 系你算法里最终用的世界系 t0 对准完成时刻的ego 系两者之间夹着一个固定的 IMU→ego 安装外参6 DoFR_e_imut_e_imu。所以你之前笔记里写世界系 X 前 Y 左 Z 上、和 ego 同向——这个描述是对的但它描述的是经过 IMU→ego 外参对齐之后的业务世界系不是 IMU 机械编排原生吐出来的那个系。要不要接着讲这个 lever armt_e_imu错个几厘米在 BEV 投影上会造成多大偏差和你之前那个后视相机差 2cm 就漏检是同一类问题。
返回列表