【工作】四足机器狗-云深处绝影X20-RoboSense速腾聚创3D LiDAR-直接构建栅格地图-Hector SLAM

        续接上一篇文章:【工作】四足机器狗-云深处绝影X20-三维雷达数据转单线雷达数据-pointcloud_to_laserscan-CSDN博客

        前面已经拿到了多线激光雷达构建的ROS下的单线激光雷达扫描数据,在此基础上可采用2D SLAM方法构建栅格地图,解决三维点云地图转换栅格地图效果极差的问题。

        本文首先采用gmapping slam,但后续了解到没有里程计数据,故使用Hector SLAM,只需要激光扫描数据,具体的见ROS官方链接:hector_mapping - ROS Wiki

        但其实使用gmapping也可以,odometry信息可以通过一个ROS包激光点云匹配的方式实现,在此备忘: laser_scan_matcher 功能包 laser_scan_matcher - ROS Wiki

        本文硬件平台,四足机器狗:

         运行环境:

1、Ubuntu16.04

2、ROS kinetic

        准备工作:

1、确保Hector SLAM源码已安装

sudo apt-get install ros-kinetic-hetor-slam

2、我直接在前文创建的pointcloud_to_laserscan的工作空间下,编写launch文件

命名为hector.launch,具体内容如下:

<launch>
    
 
    <!-- start hector_mapping node -->
    <node pkg = "hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
        <!-- Frame names -->
        <param name="pub_map_odom_transform" value="true"/>
        <param name="map_frame" value="map" />
        <param name="base_frame" value="base_link" />
        <param name="odom_frame" value="odom" />
 
        <!-- Tf use -->
        <param name="use_tf_scan_transformation" value="true"/>
        <param name="use_tf_pose_start_estimate" value="false"/>
 
        <!-- Map size / start point -->
        <param name="map_resolution" value="0.05"/>
        <param name="map_size" value="8192"/>
        <param name="map_start_x" value="0.5"/>
        <param name="map_start_y" value="0.5" />
        <param name="laser_z_min_value" value = "-1.0" />
        <param name="laser_z_max_value" value = "1.0" />
        <param name="map_multi_res_levels" value="2" />
 
        <param name="map_pub_period" value="2" />
        <param name="laser_min_dist" value="0.4" />
        <param name="laser_max_dist" value="30.0" />
        <param name="output_timing" value="false" />
        <param name="pub_map_scanmatch_transform" value="true" />
 
        <!-- Map update parameters -->
        <param name="update_factor_free" value="0.4"/>
        <param name="update_factor_occupied" value="0.7" />    
        <param name="map_update_distance_thresh" value="0.2"/>
        <param name="map_update_angle_thresh" value="0.06" />
 
        <!-- Advertising config --> 
        <param name="advertise_map_service" value="true"/>
        <param name="scan_subscriber_queue_size" value="5"/>
        <param name="scan_topic" value="scan"/>
    </node>
 
    <!-- transform between base_link and odom/laser -->
    <node pkg="tf" type="static_transform_publisher" name="baselink_to_laser" args="0 0 0 0 0 0 /base_link /laser 100" />
    <node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0 0 0 0 0 0 /odom /base_link 100" /> 
 
    <!-- start rviz --> 
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
 
 
</launch>

另外, RoboSense速腾聚创雷达的frame id是rslidar,所以要修改laser为rslidar,才能正常运行,上述launch文件修改部分为:


    <!-- transform between base_link and odom/laser -->
    <node pkg="tf" type="static_transform_publisher" name="baselink_to_laser" args="0 0 0 0 0 0 /base_link /rslidar 100" />
    <node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0 0 0 0 0 0 /odom /base_link 100" /> 

 开始工作:

1、打开终端,输入以下命令启动四足机器狗激光雷达以及IMU等数据传感器:

cd ~/mapping_nav_scripts

./rslidar_imu.sh

2、打开终端输入以下命令启动pointcloud_to_laserscan功能包,构建单线激光雷达数据:

cd到工作空间并source

roslaunch pointcloud_to_laserscan point_to_scan.launch

3、打开终端输入以下命令启动Hector SLAM

cd到工作空间并source

roslaunch pointcloud_to_laserscan hector.launch

        由于目前房间过道被占用,只建立了此房间的一部分地图,经测试可用:

(后续再补上室内全图)

        由此可见直接通过3D LiDAR建立的栅格地图相比三维点云地图转化而成的效果大大改善,也不需要通过软件人工的修改。

对比三维点云地图转化而成的栅格地图:

至此,建立了后续导航navigation可用的栅格地图。

后面将基于此,完成导航工作。

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值