使用OpenCV生成深度图的非真实模拟数据(CARLA)
我正在卡拉模拟器(虚幻引擎环境)中使用两个RGB摄像头(+深度摄像头)。摄像头连接到车辆上(位置相对于车辆),位于使用OpenCV生成深度图的非真实模拟数据(CARLA),opencv,rotation,camera-calibration,disparity-mapping,carla,Opencv,Rotation,Camera Calibration,Disparity Mapping,Carla,我正在卡拉模拟器(虚幻引擎环境)中使用两个RGB摄像头(+深度摄像头)。摄像头连接到车辆上(位置相对于车辆),位于[0.5,-1,1.8]和[0.5,1,1.8](分别为左和右,虚幻坐标系)。在模拟过程中,第一个摄像机被认为是固定的,而第二个摄像机的位置在位置和旋转上都受到高斯噪声的干扰 摄像机像普通的立体设置一样水平移动。直观地,第二照相机的相对位置是[0+n_x,2+n_y,0+n_z],其中n_x,n_y,n_z是三个方向上的高斯噪声。将坐标更改为OpenCV坐标,得到的相对位置为[2+n
[0.5,-1,1.8]
和[0.5,1,1.8]
(分别为左和右,虚幻坐标系)。在模拟过程中,第一个摄像机被认为是固定的,而第二个摄像机的位置在位置和旋转上都受到高斯噪声的干扰
摄像机像普通的立体设置一样水平移动。直观地,第二照相机的相对位置是[0+n_x,2+n_y,0+n_z]
,其中n_x
,n_y
,n_z
是三个方向上的高斯噪声。将坐标更改为OpenCV坐标,得到的相对位置为[2+n_y,-n_z,n_x]
(n_z
上的减号来自轴反转的事实)。
基本上,我运行以下代码来获取OpenCV中的相对位置:
relative_pos[0] = -camL_pos.at<double>(1) + camR_pos.at<double>(1); //baseline ~2mt
relative_pos[1] = -camL_pos.at<double>(2) + camR_pos.at<double>(2); //height difference
relative_pos[2] = camL_pos.at<double>(0) - camR_pos.at<double>(0);
relative_pos[0]=-camL_pos.at(1)+camR_pos.at(1)//基线~2mt
相对位置[1]=-凸轮位置(2)+凸轮位置(2)//高差
相对位置[2]=在(0)处的凸轮位置-在(0)处的凸轮位置;
由于OpenCV期望的是平移向量,而不是相对于第一个摄影机的坐标,因此该向量将乘以-1
。除位置外,还通过单独计算的高斯噪声,在滚转、俯仰和偏航三个角度施加旋转扰动。位置和旋转的噪波值存储在每一帧中
我想计算的是使用OpenCV的视差图。我知道我有一个深度相机,但我用它只是作为一个地面真相
在所有这些介绍之后,以下是问题:
- 上面的翻译公式是正确的,还是我遗漏了从一个坐标系到另一个坐标系的转换
- 我应该如何管理轮换?我真的很困惑。我还不知道是否需要变换角度(我想至少应该反转偏航值,因为两个坐标系中两个轴的方向相反)
- 我应该向
函数传递什么?由
定义的相对位置和相对旋转t
是否正常R
- 虚幻的变换顺序:
Scale->Rotation->Translation
roll->pitch->yaw