KITTI数据集简介与使用: https://blog.csdn.net/solomon1558/article/details/70173223
接下来是我使用时遇到的坑:
一、label文件中ry的含义
按照文档中图示,ry应该是小车朝向和相机坐标系z轴的夹角,但是事实上并不是,而是和相机坐标系x轴的夹角,大家可以自行验证。
二、坐标系的转换
这个坑主要还是我个人学艺不精造成的。我欲将某点从cam坐标系转到world坐标系,于是就写了如下代码:
cam2toWorld_Pose = cam2toImu_Pose*imu2base_Pose*Pose_base2world_map[frame_id];
vector_world = cam2toWorld_Pose*vector_cam2;
事实上我把转换矩阵的相乘顺序搞反了,实际应当这样:
cam2toWorld_Pose = Pose_base2world_map[frame_id]*imu2base_Pose*cam2toImu_Pose;
vector_world = cam2toWorld_Pose*vector_cam2;
我居然认为矩阵乘法可以交换,唉,数学学不好,demo跑到老。
顺便说一句,我只所以没注意到我把顺序搞反了是因为我之前这样相反地用起来并没有出错,那是因为我之前使用时几个坐标系之间几乎只有平移而没有旋转。
三、使用kittie2bag将数据集转为bag后tf的使用
貌似tf功能包的api不好用,总是延迟,而且一旦降低播放速度就极其容易出错。于是乎我干脆,直接把/tf当作节点来订阅使用。/tf和/tf_static中消息的格式以及内容如下所示:
四、我怀疑kitti的tf中的轨迹并不准
这一点我不确定,欢迎大家指正。
五、向量的坐标系变换
将一个向量变换到另一个坐标系上?别想了!要变换只能变换某个点,把向量当作变换对象注定是要坑自己的,点才可以作为变换对象!