9.4 Hector
Hector SLAM效果
9.4.1 Hector SLAM计算图
Hector SLAM算法不同于前面两种算法,Hector只需要激光雷达数据,而不需要里程计数据。这种算法比较适合手持式的激光雷达,并且对激光雷达的扫描频率有一定要求。
Hector算法的效果不如Gmapping、Karto,因为它仅用到激光雷达信息。这样建图与定位的依据就不如多传感器结合的效果好。但Hector适合手持移动或者本身就没有里程计的机器人使用。
Hector的计算图,如下所示
位于中心的节点叫作hector_mapping
,它的输入和其他SLAM框架类似,都包括了/tf
和/scan
,另外Hector还订阅一个/syscommand
Topic,这是一个字符串型的Topic,当接收到reset
消息时,地图和机器人的位置都会初始化到最初最初的位置。
在输出的Topic方面,hector多了一个/poseupdate
和/slam_out_pose
,前者是具有协方差的机器人位姿估计,后者是没有协方差的位姿估计。
9.3.2 服务
与Gmapping相同,提供/dynamic_map
查询地图服务
9.3.3 参数
以ROS-Academy-for-Beginners
中的hector_slam
为例,选取了它的launch文件slam_sim_demo/launch/hector_demo.launch
为例,关键位置做了注释:
<node pkg="hector_mapping" type="hector_mapping" name="hector_height_mapping" output="screen">
<param name="scan_topic" value="scan" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="odom" />
<param name="output_timing" value="false"/>
<param name="advertise_map_service" value="true"/>
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>
<param name="pub_map_odom_transform" value="true"/>
<param name="map_with_known_poses" value="false"/>
<param name="map_pub_period" value="1"/>
<param name="update_factor_free" value="0.45"/>
<param name="map_update_distance_thresh" value="0.1"/>
<param name="map_update_angle_thresh" value="0.05"/>
<param name="map_resolution" value="0.05"/>
<param name="map_size" value="1024"/>
<param name="map_start_x" value="0"/>
<param name="map_start_y" value="0"/>
</node>
演示截图
hector算法演示效果图如下: