刚开始录制的数据时没有考虑相机和IMU之间的坐标变换,但是后来发现跟踪效果不好,去查验imu数据时,发现,我采集保存的imu数据格式没有和euroc数据集中的imu数据保存格式统一,所以需要研究的是在euroc用于数据采集的设备中的相机和imu之间的坐标系变换关系,我的设备相机和imu之间的坐标系变换关系,然后按照euroc数据保存格式来保存我采集的数据。
下面是euroc数据集使用的数据采集设备,使用的是左手坐标系,相机朝向与z轴朝向相反,相机与imu之间的位姿变换是,顺时针旋转90度,
Euroc数据集的采集工具所有的设备中相机和imu之间的坐标变换。满足右手坐标系,从相机到imu的旋转是,绕着在z轴(根据圆点的标志,z轴是垂直于屏幕朝外的)顺时针(以上帝的视角对着z轴的正方向看向xoy平面)旋转90度。
下面这个图标记错了。
下面是vins室内数据采集设备, 采用右手坐标系,z轴和相机轴重合,相机朝向和z轴朝向重合,相机到imu的位姿变换是,绕z轴顺时针旋转90度。
vins用来室外数据采集的设备,相机系是右手坐标系,相机朝向和z轴方向重合,相机到imu之间的位姿变化需要经过两个步骤变换,首先是绕x轴顺时针旋转90度,然后是绕新的z轴逆时针旋转90度,绕哪个轴旋转就要从哪个轴看进去,然后判断是顺时针还是逆时针,上述连续旋转的方式,需要使用左乘的方式来表示连乘。
我们的采集设备相机和imu坐标系图。相机是标准的右手系,imu是左手系,经过测试发现,imu实际的坐标系和标注的坐标系是相反的。(哪个轴的方向和重力方向重合,哪个轴上输出的加速度的值应该为正值)。EUROC数据集中提供的imu数据的重力轴在x轴上,并且值为正,说明,x轴的正方向和重力方向重合,是朝下的。下面两个图对比可知,我们的设备IMU坐标系和EUROC数据集的IMU坐标系,X轴和Z轴是对调的,并且Y轴是相反的,所以为了将自采的imu数据向EUROC数据集中imu数据对齐则,需要进行如下操作: ax = Za; ay = -Ya; az = Xa; 将加速度数据调整的同时,也需要对对应的角速度数据进行调整:
wx = Zw; wy = -Yw; wz = Xw; 并且在之前,将自采的Imu 数据和EUROC数据集的imu数据对比,得出,后者采用的是弧度单位,而我们采集的数据是以度为单位,所以要在所有获得的角度数据上除以57.296(180/pi),并且在加速度数据上都乘以了9.8.之所以要乘以9.8,应该是与imu的前期设置有关,这个需要问一下小潘潘。
进行完数据的调整之后,再次跑数据集,仍然会出现乱漂的情况,我干脆打开配置文件,想着修改哪个参数,实现,不用每次都重新打开rviz窗口的问题,但是打开config文件后,我寻思着随便改改吧,看到了rolling_shutter这个参数,我之前一直认为我们的相机是rolling_shutter相机,就是卷帘相机,所以这个参数设置为1,但是我这次改成了0,试一下,发现,我靠,不漂了,鹏哥说是global shutter,这下才知道我们的相机是global shutter相机,哎,配置文件里的参数还是要多多研究的。长见识了。