一、安装hector_slam包
cd ~/catkin_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
cd ~/catkin_ws
catkin_make
二、修改tutorial.launch文件
cd ~/catkin_ws/src/hector_slam/hector_slam_launch/launch
gedit tutorial.launch
修改launch文件:
主要做了两点修改:
中的true改为false;三、修改mapping_default.launch文件
cd ~/catkin_ws/src/hector_slam/hector_mapping/launch
gedit mapping_default.launch
修改launch文件:
四、修改rslidar中的frame_id
由于hector_slam从激光雷达处订阅的frame_id为laser, 而激光雷达发布的frame_id为rslidar,因此需要对rslidar中的源码进行修改,并重新编译。如下:
cd ~/catkin_ws/src/ros_rslidar/rslidar_driver/src
gedit rsdriver.cpp
将private_nh.param("frame_id", config_.frame_id, std::string("rslidar"));
rslidar改为laser
#重新编译rslidar_ros
cd ~/catkin_ws
catkin_make
五、创建slam.launch文件
cd ~/catkin_ws/src/ros_rslidar/rslidar_pointcloud/launch
gedit slam.launch
写入launch文件:
第一个是启动激光雷达,第二个是将三维point转换为二维scan,第三个是执行hector_slam功能。
这里需要注意的是,第一个和第三个都启动了rviz,需要将第一个launch文件中的rviz注释掉。如下:
cd ~/catkin_ws/src/ros_rslidar/rslidar_pointcloud/launch
gedit rs_lidar_16.launch
六、启动slam.launch 文件
cd ~/catkin_ws
source devel/setup.bash
roslaunch rslidar_pointcloud slam.launch
运行有报错:
看提示是hector_slam包的问题,找不到geotiff.launch文件。
查看该目录,确实没有找到launch文件。
参考上一章节,单独运行前两个包,可与得到三维点云和二维扫描图。
#新开一个终端,启动3d雷达驱动
cd ~/catkin_ws
source devel/setup.bash
roslaunch rslidar_pointcloud rs_lidar_16.launch
#新开一个终端,启动pointcloud_to_laserscan节点
cd ~/catkin_ws
source devel/setup.bash
roslaunch pointcloud_to_laserscan point_to_scan.launch
#新开一个终端,启动hector_slam节点
cd ~/catkin_ws
source devel/setup.bash
roslaunch hector_slam_launch tutorial.launch
根据报错信息,可以查找没有这个文件路径:
/home/bjtu/catkin_ws/src/hector_slam/hector_geotiff/launch/geotiff_mapper.launch
存在的文件路径为:
/home/bjtu/catkin_ws/src/hector_slam/hector_geotiff_launch/launch/geotiff_mapper.launch
将~/catkin_ws/src/hector_slam/hector_slam_launch/launch/tutorial.launch文件内容修改
修改前:
修改后:
修改后终于运行正常了!拿着雷达简单走动下,端着水平走的时候过道还可以,转弯的时候,雷达倾斜的时候,误差比较大。
七、保存地图
#安装mapserver
sudo apt-get install ros-melodic-map-server
#保存地图
rosrun map_server map_saver -f my_map_name