之前用ros的时候,总是害怕用到tf,因为还要牵扯到frame_id, child_frame_id这些,总是让人傻傻分不清楚。
今天工程实践中研究了一下,发现其实tf还是很香的,尤其是利用它来结合里程计和点云信息在RVIZ中可视化,确实方便。
ros中tf的介绍总是涉及很多概念,让人困惑。那我决定以实例出手,来讨论tf的作用和使用方法。
工程需求:
我们需要根据很多单帧的点云信息以及每一帧的里程计信息,判断:
1.里程计的估计是否合理
2.点云在地图坐标系可视化
我们需要从rosbag中获取点云,里程计信息,生成新的rosbag,确保新的rosbag在播放时,可以在rviz中显示在全局坐标系中的点云。
方法一:
为了显示每一帧点云在地图坐标系的位置,其实最容易想到的,就是对每一帧的点云进行操作,对点云所有点进行坐标系转换,然后发布。
Eigen::Affine3f transLidar2Cam = pcl::getTransformation(L_C_TX, L_C_TY, L_C_TZ, L_C_RX, L_C_RY, L_C_RZ);
pcl::PointCloud<PointType>::Ptr laser_cloud_in_camera(new pcl::PointCloud<PointType>());
pcl::transformPointCloud(*laser_cloud_in, *laser_cloud_in_camera, transLidar2Cam);
//pcl转化为ros msg
这