目录
0.前言
录制了一个激光雷达数据包,在自己电脑上rosbag play后,用rviz查看不到激光雷达点云。
录制数据包如下,其中点云的frame_id均为“rslidar”
rosbag play数据包后,用rviz查看显示:No tf data. Actual error: Fixed Frame [rslidar] does not exist即坐标系找不到的问题。
解决坐标系问题后, rviz查看还可能会出现时间戳问题: Message removed because it is too old
1 解决方案
1.1 在launch文件里添加坐标系关系
在任意需要启动的launch文件里面添加:这里命名为test.launch
<!-- static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms -->
<!-- static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms -->
<node pkg="tf" type="static_transform_publisher" name="rslidar_base_broadcaster"
args="0 0 0 0 0 0 /map /rslidar 100" />
<!-- static_transform_publisher位tf树的一个节点,安装ros是会安装,没有的话可以安装一下;
/map为参考坐标系,也可以设为/odom、/base_link之类常见的坐标系
/rslidar为自己数据的坐标系,这里为/rslidar,也以自行修改 -->
1.2 在launch文件里面添加时间关系
首先,设置使用系统时间戳,而不是数据包的ros时间戳
<param name="use_sim_time" value="true"/>
<!-- true即为使用系统时间,false为使用实际数据的时间戳 -->
设置播放数据的时间戳为系统时间戳。
<arg name="bag_file_" default="/home/meng/Desktop/data/double_lidar_calibrate/2022-03-26-19-25-56.bag" />
<node pkg="rosbag" type="play" name="rosbag" args="--clock $(arg bag_file_) -r 0.5" />
<!-- bag_file_:包文件目录,自行修改 “clock”为使用系统时间戳 -->
1.3 完整launch文件如下:test.launch
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<param name="use_sim_time" value="true"/>
<!-- true即为使用系统时间,false为使用实际数据的时间戳 -->
<node pkg="tf" type="static_transform_publisher" name="rslidar_base_broadcaster"
args="0 0 0 0 0 0 /map /rslidar 100" />
<!-- static_transform_publisher位tf树的一个节点,安装ros是会安装,没有的话可以安装一下;
/odom为参考坐标系,也可以设为/map、/base_link之类常见的坐标系
/rslidar为自己数据的坐标系,这里为/rslidar,也以自行修改 -->
<arg name="bag_file_" default="/home/meng/Desktop/data/double_lidar_calibrate/2022-03-26-19-25-56.bag" />
<node pkg="rosbag" type="play" name="rosbag" args="--clock $(arg bag_file_) -r 0.5 -l" />
<!-- bag_file_:包文件目录,自行修改 “clock”为使用系统时间戳 "-r"为播放速率 “-l”为循环播放 -->
<arg name="rviz" default="true" />
<group if="$(arg rviz)">
<node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz_meng"/>
</group>
</launch>
1.4 启动test.launch
在任意目录下直接:roslaunch test.launch即可(不需要source工作空间)
在两处箭头处设置frame和选择点云,之后在中间视图区域缩放即可看到