一、安装pointcloud_to_laserscan包
注意避坑:不能用git clone来下载,即便是选择了相应版本,最终下载下来的也是默认版本。只能下载ZIP压缩包然后解压到工作空间! 我的ros版本是noetic,下载的版本是lunar-devel。
二、创建launch文件
在工作空间的目录下:xxx_ws/src/pointcloud_to_laserscan-lunar-devel/launch
新建my_node.launch,复制包里sample_node.launch里的内容,并修改
<?xml version="1.0"?>
<launch>
<!--copy from sample_node.launch-->
<!-- run pointcloud_to_laserscan node -->
<node pkg="pointcloud_to_laserscan" type="pointcloud_to_laserscan_node" name="pointcloud_to_laserscan">
<remap from="cloud_in" to="/velodyne_points"/>
<rosparam>
target_frame: velodyne # Leave disabled to output scan in pointcloud frame
transform_tolerance: 0.01
min_height: 0.0
max_height: 1.0
angle_min: -3.1415926 # -M_PI
angle_max: 3.1415926 # M_PI
angle_increment: 0.003 # 0.17degree
scan_time: 0.1
range_min: 0.2
range_max: 100
use_inf: true
inf_epsilon: 1.0
# Concurrency level, affects number of pointclouds queued for processing and number of threads used
# 0 : Detect number of cores
# 1 : Single threaded
# 2->inf : Parallelism level
concurrency_level: 1
</rosparam>
</node>
</launch>
修改内容:
1、删除开头部分的camera的内容
2、<remap from="cloud_in" to="/velodyne_points"/>
将原先的to="$(arg camera)/depth_registered/points_processed" 改为to="/velodyne_points"
3、 修改target_frame:
将原来的camera_link 改为velodyne(自己雷达话题的frame_id,可以使用命令:rostopic echo /velodyne_points | grep frame_id 查看)
4、 angle_min、angle_max、angle_increment的设置
github上下载的launch文件是针对深度相机的,所以角度范围是 [ − π / 2 , π / 2 ] ,也就是只有相机前方有点。由于多线激光雷达是360 ° 均可探测的,所以角度范围设置为[ − π , π ]
三、启动仿真
1、启动小车或雷达的仿真
roslaunch simulation.launch
2、启动第二步创建的launch文件
roslaunch my_node.launch
rviz添加laserscan,topic选择/scan (这就是pointcloud_to_laserscan转出来的),图中白线就是scan的图像。
使用rqt_graph可以查看话题节点,可以发现pointcloud_to_laserscan订阅了/velodyne_points,发布了/scan
问题:如果rviz里的 laserscan的topic没有订阅/scan,pointcloud_to_laserscan无法订阅了/velodyne_points,而是订阅了/tf,不知道是什么原因,使用时记得订阅/scan就好。