R—Fans激光雷达三维PiontCloud2数据转二维LaserScan数据进行2D建图

本文所用的源码地址https://github.com/ros-perception/pointcloud_to_laserscan.git
ROS官网的说明http://wiki.ros.org/pointcloud_to_laserscan
激光SLAM算法种类比较多:
其中就不乏人们所常用的:Hector,Karto,gmapping,cartographer;其中Hector算法只需激光雷达就能建图,给没有里程计的小伙伴带去福利(我也是迫于此),建图效果也是依次递增的;我此次使用的激光雷达是北科天绘的R—Fans的16线激光雷达,官方自带的驱动是两个计算node,如下图,
最终得到使用的是/rfans_driver/rfans_points话题,此话题类型sensor_msgs/PointCloud2,为三维的点云数据,而上面的算法的输入都是二维的sensor_msgs/LaserScan这就需要我们增加一个新的ROS节点来订阅sensor_msgs/PointCloud2类型的/rfans_driver/rfans_points话题,然后发布一个sensor_msgs/LaserScan类型的/scan话题在这里插入图片描述

pointcloud_to_laserscan包

包里有两个cpp的node对应的两个launch文件,我只用到了sample_node.launch对应的节点为pointcloud_to_laserscan_node
launch文件需要修改:

  <?xml version="1.0"?>
    <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="/rfans_driver/rfans_points"/>
            
           <rosparam>
                transform_tolerance: 0.01
                min_height: 0.0
                max_height: 1.0
    
                angle_min: -3.14159 # -M_PI/2
                angle_max: 3.14159 # M_PI/2
                angle_increment: 0.0087 # M_PI/360.0
                scan_time: 10
                range_min: 0.05
                range_max: 30.0
                use_inf: true
                inf_epsilon: 1.0
                
                concurrency_level: 1
            </rosparam>
        </node>
    </launch>

上面的参数修改之处可以对照github源码主要的一处改动就是:
<remap from="cloud_in" to="/rfans_driver/rfans_points"/>
改为你自己的三维点云数据topic
今后在你启动激光雷达之后启动此launch文件或将此launch文件include到激光雷达启动文件里面就能完成数据的转换,中间的rosparam参数可以自己根据要求自由改动以更加适合自己的需要。
附上加入转换节点后的计算图:
在这里插入图片描述
以及rviz的显示图:
在这里插入图片描述
在这里插入图片描述
我的下一文将介绍利用hector建立2D地图,场地为实验室。
note:
在使用pointcloud_to_laserscan将多线激光降为1线时,程序里面发布的topic(/scan)是没有时间戳的(header.stamp)所以在跑gmapping时出现 slam_gmapping stop in Registering First Scan problem也就是注册第一帧后程序不动了,然后rviz里面的地图也不更新,然后我找到、scan消息发现无时间戳,遂在pointcloud_to_laserscan_nodelet.cpp程序里面加上一句

output.header.stamp = ros::Time::now()

即可顺利建图。
你问我为什么要用16线激光建2维图?实验室太穷只有多线而无1线,只能勉强降低身份。
你问我建图效果咋样?其实除了容易出错,我目前发现还是差不多,缺点就是扫描频率相对40Hz的要求还是达不到,所以hector_slam旋转时容易跑偏,其他的都还不错。

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: pointcloud_to_laserscan是一种ROS(Robot Operating System)中的节点,用于将点云数据转换为激光扫描数据。它通常用于机器人感知和导航系统,帮助机器人理解周围环境。 ### 回答2: pointcloud_to_laserscan是一个在ROS(机器人操作系统)中使用的功能包,用于将点云数据转换为激光扫描数据。 点云数据是通过激光雷达等传感器获取的三维空间中点的集合。它可以提供周围环境的详细信息,但处理点云数据可能比较复杂。激光扫描数据是一种更简化的数据类型,通常是通过将点云数据转换为角度和距离的数值表示来实现。这种表示方式更容易处理和解析,通常用于机器人导航、障碍物检测等任务。 pointcloud_to_laserscan功能包提供了将点云数据转换为激光扫描数据的功能。它接收一个点云数据的ROS消息,并基于设置的参数将其转换为激光扫描数据的ROS消息。转换过程中,它会根据雷达扫描的最小和最大角度范围、扫描角度分辨率等参数进行数据处理。 通过使用pointcloud_to_laserscan功能包,我们可以轻松地将点云数据转换为激光扫描数据,以便在其他ROS节点中使用。例如,我们可以将激光扫描数据输入到导航算法中,实现机器人的精确定位和路径规划。同时,该功能包还可以用于障碍物检测和环境建模等应用。 总而言之,pointcloud_to_laserscan是一个方便的ROS功能包,可用于将点云数据转换为激光扫描数据,以便于机器人的导航、环境感知和障碍物检测等任务。 ### 回答3: pointcloud_to_laserscan是一个ROS(机器人操作系统)包,它可以将三维点云数据转换为激光扫描数据。在机器人导航和感知中,激光扫描数据是一种常用的传感器数据,它提供了关于环境中障碍物的信息,使机器人能够进行路径规划和避障等任务。 pointcloud_to_laserscan包主要用于将来自激光雷达等传感器的点云数据处理成类似激光扫描数据的形式。处理过程包括将点云数据转换为柱状扫描,根据扫描角度和距离等参数将点云数据映射到激光扫描数据结构中。这样就可以利用针对激光雷达数据的算法进行进一步的数据处理,并与其他机器人功能模块进行集成和交互。 使用pointcloud_to_laserscan包可以帮助机器人实现更准确、更稳定的环境感知,从而提高导航和控制的效果。通过将三维点云数据转换为激光扫描数据,可以简化数据处理的复杂度,降低算法的计算负载,提高机器人系统的实时性和响应速度。 总之,pointcloud_to_laserscan是一个在ROS中常用的包,它能够将三维点云数据转换为激光扫描数据,为机器人的导航和感知提供了重要的数据支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值