SLAM-hector_slam 简介与使用

67
0
2021年2月11日 09时15分

hector_slam功能包使用高斯牛顿方法,不需要里程计数据,只根据激光信息便可构建地图。
所以他的总体框架如下:

 

在这里插入图片描述

 

hector-slam功能包

 

hector_slam的核心节点是hector_mapping,它订阅“/scan”话题以获取SLAM所需的激光数据。与gmapping相同的是,hector_mapping节点也会发布map话题,提供构建完成的地图信息;不同的是,hector_mapping节点还会发布slam_out_pose和poseupdate这两个话题,提供当前估计的机器人位姿。

 

在ROS的软件源中已经集成了hector-slam相关的功能包,可以使用如下命令安装:

 

$ sudo apt-get install ros-kinetic-hector-slam

 

下面先来了解hector_slam功能包的各种接口。
话题和服务
hector_mapping节点中发布/订阅的话题和提供的服务如表所示。

 

在这里插入图片描述

 

坐标变换

hector_mapping节点提供的坐标变换如表所示。

 

在这里插入图片描述

 

参数
参数默认就可以,学习后可以根据自己的要求修改~

 

hector_mapping节点的配置与运行

 

依然无需关注hector_mapping节点的内部实现,使用其提供的接口即可实现SLAM功能。

 

1.hector.launch

与gmapping节点一样,hector_mapping节点也有不少参数需要设置,单独实现一个my_robot_navigation/launch/hector.launch文件完成节点的启动,代码如下:

 

<launch>
<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="base_link" />
<!—— 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="2048"/>
<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="5.5" />
<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>
</launch>

 

hector_demo.launch
然后创建一个用于演示hector_slam的my_robot_navigation/launch/hector_demo.launch文件,启动hector_mapping节点和rviz可视化界面,代码如下:

 

<launch>
<include file="$(find my_robot_navigation)/launch/hector.launch"/>
<!—— 启动rviz——>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find my_robot_navigation)/rviz/gmapping.rviz"/>
</launch>

 

然后启动自己的小车底盘和雷达,再启动hector-slam的launch文件,就可以建图了。
个人感觉虽然不用里程计和imu模块,但是建图效果并不差!

 

在这里插入图片描述

发表评论

后才能评论