Karto
1. 计算图
Karto SLAM和Gmapping SLAM在工作方式上类似:
输入的Topic同样是/tf和/scan,其中/tf里有odom_frame和laser_frame,laser_frame和base_frame,与GmappingSLAM的完全一样。
唯一不同的是输出:slam_katro的输出比slam_gmapping的车、输出少了一个位子位姿估计的分散程度。
2. 服务
与Gmapping相同,提供/dynamic_map服务
3. 参数
test/param/katro_params.yaml:
# General Parameters
use_scan_matching: true
use_scan_barycenter: true
minimum_travel_distance: 0.2
minimum_travel_heading: 0.174 #in radians
scan_buffer_size: 70
scan_buffer_maximum_scan_distance: 20.0
link_match_minimum_response_fine: 0.8
link_scan_maximum_distance: 10.0
loop_search_maximum_distance: 4.0
do_loop_closing: true
loop_match_minimum_chain_size: 10
loop_match_maximum_variance_coarse: 0.4 # gets squared later
loop_match_minimum_response_coarse: 0.8
loop_match_minimum_response_fine: 0.8
# Correlation Parameters - Correlation Parameters
correlation_search_space_dimension: 0.3
correlation_search_space_resolution: 0.01
correlation_search_space_smear_deviation: 0.03
# Correlation Parameters - Loop Closure Parameters
loop_search_space_dimension: 8.0
loop_search_space_resolution: 0.05
loop_search_space_smear_deviation: 0.03
# Scan Matcher Parameters
distance_variance_penalty: 0.3 # gets squared later
angle_variance_penalty: 0.349 # in degrees (gets converted to radians then squared)
fine_search_angle_offset: 0.00349 # in degrees (gets converted to radians)
coarse_search_angle_offset: 0.349 # in degrees (gets converted to radians)
coarse_angle_resolution: 0.0349 # in degrees (gets converted to radians)
minimum_angle_penalty: 0.9
minimum_distance_penalty: 0.5
use_response_expansion: false
Hector
1. 计算图
Hector SLAM算法与Gmapping SLAM、Karto SLAM不同,Hector只需要激光雷达数据,不需要里程计数据,比价适合手持式激光雷达,并对激光雷达的扫描频率有一定的要求。
Hector算法的效果不如Gmapping、Karto,因为它仅仅用到激光雷达信息,这样的建图与定位的依据不如多传感结合的效果好,Hector更适合于手持移动或者本身没有里程计的机器人使用。
计算图:
中心的节点为hector_mapping,它的输入和其它SLAM类似,都包含了/tf和/scan另外Hector还订阅了一个/syscommanTopic,这是一个字符串型的topic,当接收到reset消息时,地图和机器人的位置都会初始化到最初的位置。
输出的topic,Hector多了一个/poseupdate和/slam_out_pose,前者是具有协方差的机器人位姿估计,后者是没有协方差的位姿估计。
2. 服务
与Gapping相同,提供/dynamic_map查询地图服务
3. 参数
test/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>