TF设置
rviz添加数据做可视化的时候经常会出现这样的问题:
这是因为tf关系缺失,图中我们的数据“/scan"的参考系是“base_laser_link”,固定坐标系是“map”,需要确定从“base_laser_link”到“map”这两个坐标系之间的位姿关系才能显示。这里只需要给定一个固定的 tf 即可:
rosrun tf static_transformublisher 0.0 0.0 0.0 0.0 0.0 0.0 map base_laser_link 100
该命令的含义如下:
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
消息时间戳
如果我们使用的数据是来自rosbag的回放,很有可能会出现这样的问题:用于可视化的数据时间戳和tf关系时间戳相差太大,无法匹配因此被丢弃了,错误如下:
有两种处理方式:
1.把fix frame设置成想可视化的数据的坐标系(“base_laser_link”)
2.把ros的时间设置成模拟时间
首先启动roscore,然后设置参数 /use_sim_time
rosparam set /use_sim_time true
然后再启动 rosbag play 节点,加上参数 --clock以同时发布时钟信息,-l 用于循环播放
rosbag play -l --clock XXX.bag
再启动rviz和发布静态tf
rosrun tf static_transformublisher 0.0 0.0 0.0 0.0 0.0 0.0 map base_laser_link 100
此时发布的 tf 消息时间戳和rosbag中的消息时间戳一致。
参考链接:https://answers.ros.org/question/52788/error-in-display-of-pointcloud-in-base_link-frame/