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,就可以看到这样的一个场景,

SLAM从入门到精通(第一次hector slam建图)_第1张图片

2、运行hector程序

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

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

3、利用rviz查看建图效果

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

SLAM从入门到精通(第一次hector slam建图)_第2张图片

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

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

SLAM从入门到精通(第一次hector slam建图)_第3张图片

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

SLAM从入门到精通(第一次hector slam建图)_第4张图片

    

5、保存地图

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

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

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

feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ ls -l
total 1044
drwxrwxr-x 11 feixiaoxing feixiaoxing    4096 9月  27 09:57 build
drwxrwxr-x  5 feixiaoxing feixiaoxing    4096 9月  26 14:56 devel
-rw-rw-r--  1 feixiaoxing feixiaoxing 1048630 9月  28 16:28 map.pgm
-rw-rw-r--  1 feixiaoxing feixiaoxing     131 9月  28 16:28 map.yaml
drwxrwxr-x  5 feixiaoxing feixiaoxing    4096 9月  24 13:45 src

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

image: map.pgm
resolution: 0.025000
origin: [-12.812499, -12.812499, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

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

SLAM从入门到精通(第一次hector slam建图)_第5张图片

注:

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

你可能感兴趣的:(SLAM从入门到精通,算法)