• SLAM从入门到精通(第一次hector slam建图)


    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

            目前建图的方法一般有视觉建图和激光建图两种。其中激光建图,又可以分成hector、gmapping、cartographer这几种。要说最简单的建图方法,那还真是非hector莫属。因为hector建图的话,本身需要的数据类型非常少,只需要lidar的输入数据即可,不再需要其他的数据。当然,hector建图也有自己的缺点,比如说长走廊,就不太合适hector。当然我们这里只是为了演示hector的使用方法,可以先暂时不用考虑hector的缺点。

    1、构建一个虚拟场景

            之前我们运行的环境时wpb_simple.launch,这是一个开放的环境。周围没有什么阻挡物,不太适合建图。因此,我们需要重新构建一个环境,即wpb_stage_slam.launch,这样输入roslaunch wpr_simulation wpb_stage_slam.launch,就可以看到这样的一个场景,

    2、运行hector程序

            之前因为我们执行过./install_for_noetic.sh,所以这里其实已经安装了hector建图工具。所以,此时只需要执行rosrun hector_mapping hector_mapping即可。这个程序没有界面,只有一串信息打印,

    1. feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ rosrun hector_mapping hector_mapping
    2. HectorSM map lvl 0: cellLength: 0.025 res x:1024 res y: 1024
    3. HectorSM map lvl 1: cellLength: 0.05 res x:512 res y: 512
    4. HectorSM map lvl 2: cellLength: 0.1 res x:256 res y: 256
    5. [ INFO] [1695888755.513829820]: HectorSM p_base_frame_: base_link
    6. [ INFO] [1695888755.514334898]: HectorSM p_map_frame_: map
    7. [ INFO] [1695888755.514401831]: HectorSM p_odom_frame_: odom
    8. [ INFO] [1695888755.514438917]: HectorSM p_scan_topic_: scan
    9. [ INFO] [1695888755.514475273]: HectorSM p_use_tf_scan_transformation_: true
    10. [ INFO] [1695888755.514511768]: HectorSM p_pub_map_odom_transform_: true
    11. [ INFO] [1695888755.514548172]: HectorSM p_scan_subscriber_queue_size_: 5
    12. [ INFO] [1695888755.514585010]: HectorSM p_map_pub_period_: 2.000000
    13. [ INFO] [1695888755.514621462]: HectorSM p_update_factor_free_: 0.400000
    14. [ INFO] [1695888755.514657209]: HectorSM p_update_factor_occupied_: 0.900000
    15. [ INFO] [1695888755.514692564]: HectorSM p_map_update_distance_threshold_: 0.400000
    16. [ INFO] [1695888755.514727980]: HectorSM p_map_update_angle_threshold_: 0.900000
    17. [ INFO] [1695888755.514765486]: HectorSM p_laser_z_min_value_: -1.000000
    18. [ INFO] [1695888755.514817751]: HectorSM p_laser_z_max_value_: 1.000000

    3、利用rviz查看建图效果

            虽然小车还没有移动,但是这个时候已经可以看到一点建图的效果。输入rosrun rviz rviz,通过添加RobotModel和Map,订阅/map话题,就可以看到这样的建图效果,

    4、移动小车,构建完整的小车地图

            当前小车还没有移动功能。需要我们输入rosrun rqt_robot_steering rqt_robot_steering,通过速度和角度控制,就可以让小车开始移动起来了,最好让小车走完所有可以行走的空间。

            移动小车的目的还是为了建图。通过移动小车,这样激光可以扫描到所有的空间,也就可以实现完整的建图过程了。

        

    5、保存地图

            所有这一切都做好之后,就可以用map_server保存地图了。直接输入rosrun map_server map_saver即可。不出意外,我们会先看到这样的打印,

    1. feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ rosrun map_server map_saver
    2. [ INFO] [1695889679.741268757]: Waiting for the map
    3. [ INFO] [1695889680.082678456, 1022.812000000]: Received a 1024 X 1024 map @ 0.025 m/pix
    4. [ INFO] [1695889680.098000854, 1022.821000000]: Writing map occupancy data to map.pgm
    5. [ INFO] [1695889680.164918813, 1022.856000000]: Writing map occupancy data to map.yaml
    6. [ INFO] [1695889680.165438028, 1022.856000000]: Done

            等待一会之后,ls一下,可以看到多了两个文件,

    1. feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ ls -l
    2. total 1044
    3. drwxrwxr-x 11 feixiaoxing feixiaoxing 4096 927 09:57 build
    4. drwxrwxr-x 5 feixiaoxing feixiaoxing 4096 926 14:56 devel
    5. -rw-rw-r-- 1 feixiaoxing feixiaoxing 1048630 928 16:28 map.pgm
    6. -rw-rw-r-- 1 feixiaoxing feixiaoxing 131 928 16:28 map.yaml
    7. drwxrwxr-x 5 feixiaoxing feixiaoxing 4096 924 13:45 src

            这多出来的文件,一个叫map.pgm,一个叫map.yaml。从大小来看,map.pgm就是地图文件数据,可以用gimp打开。而map.yaml是配置文件,内容如下所示,

    1. image: map.pgm
    2. resolution: 0.025000
    3. origin: [-12.812499, -12.812499, 0.000000]
    4. negate: 0
    5. occupied_thresh: 0.65
    6. free_thresh: 0.196

            将pgm文件拷贝到windows平台,用gimp软件打开,就可以看到这个地图信息,其实就是一张图片,这就是我们要的地图数据。

    注:

            没有安装hector的同学可以通过sudo apt-get install ros-noetic-hector-slam安装。

  • 相关阅读:
    数据结构学习笔记 - 带权并查集(食物链题解)
    Servlet学习笔记2
    RocketMQ单机环境搭建
    Android第三方库的使用
    maven报错:[ERROR] 不再支持源选项 7。请使用 8 或更高版本。
    Error: no matching distribution found for tensorflow-cpu==2.6.*
    面向对象分析?如何进行面向对象分析-获取需求?面向对象分析模型由三个独立模型组成:功能模型,对象模型,动态模型
    使用 EasyCV Mask2Former 轻松实现图像分割
    手把手带你开发你的第一个前端脚手架
    Spring Securit的详细使用(一)
  • 原文地址:https://blog.csdn.net/feixiaoxing/article/details/133385653