hector_mapping是一种无需里程计数据的SLAM方法,利用激光雷达获得二维姿态估计,虽然没有回环检测功能,但对于大多真实场景,它是较准确的。该系统已用于无人地面机器人、无人地面车辆、手持测绘设备、四旋翼无人机。
1、论文
https://www.sim.informatik.tu-darmstadt.de/publ/download/2011_SSRR_KohlbrecherMeyerStrykKlingauf_Flexible_SLAM_System.pdf
2、硬件需求
为了使用hector,我们需要高精度的激光扫描仪(SICK、hokuyo等),扫描周围环境时,节点会使用tf变换,因此无需将雷达固定,并且不需要里程计数据。
3、ROS API
hector_mapping是基于SLAM算法的LIDAR节点,使用时无需里程计数据。介绍ROS API时不会以所有可用于调试的选项,而是以常用选项为介绍。
3.1 订阅话题(Subscirbed Topics)
scan(sensor_msgs/LaserScan) SLAM系统使用的激光扫描数据
Header header
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[ ] ranges
float32[ ] intensities
syscommand(Std_msgs/String)系统命令,如果命令是“reset”,那么地图和机器人位姿将重置为初始状态。
string命令
3.2 发布话题(Published Topics)
map_metadata(nav_msgs/MapMetaData) 从这个主题获取地图数据,锁定并定期更新
这个消息保存了有关栅格占用特性的基本信息
time map_load_time 加载地图时间
float32 resolution 地图分辨率[m/cell]
uint32 width 地图宽度cells
uint32 height 地图高度cells
geometry_msgs/Pose origin 原点姿势
map (nav_msgs/OccupancyGrid)从这个主题获取地图数据。。。
Heard heard //表示2D栅格地图,其中每个单元格的值表示占用的概率
MapMetaData info //地图的元数据
int8[ ] data // 以行为主顺序从(0,0)开始的地图数据,占用概率在[0,100],未知是-1
slam_out_pose( geometry_msgs/PoseStamped ) 无协方差的机器人姿态估计
Header header 头标题 带有参考坐标系和时间戳的位姿
Pose pose 位姿
poseupdate ( geometry_msgs/PoseWithCovarianceStamped ) 基于不确定性高斯估计的机器人姿态估计
表示一个带有参考坐标系和时间戳的估计位姿
Header header
PoseWithCovariance pose
3.3 服务(Service)
dynamic_map( nav_msgs/GetMap ) 调用此服务获取地图数据
nav_msgs/OccupancyGrid map
3.4 参数(Parameters)
~base_frame (string, default: base_link)
~map_frame (string, default: map_link)
~odom_frame (string, default: odom)
~map_resolution (double, default: 0.025)
~map_size (int, default: 1024)
~map_start_x (double, default: 0.5)
~map_start_y (double, default: 0.5)
~map_update_distance_thresh (double, default: 0.4)
~map_update_angle_thresh (double, default: 0.9)
~map_pub_period (double, default: 2.0)
~map_multi_res_levels (int, default: 3)
~update_factor_free (double, default: 0.4)
~update_factor_occupied (double, default: 0.9)
~laser_min_dist (double, default: 0.4)
~laser_max_dist (double, default: 30.0)
~laser_z_min_value (double, default: -1.0)
~laser_z_max_value (double, default: 1.0)
~pub_map_odom_transform (bool, default: true)
~output_timing (bool, default: false)
~scan_subscriber_queue_size (int, default: 5)
~pub_map_scanmatch_transform (bool, default: true)
~tf_map_scanmatch_transform_frame_name (string, default: scanmatcher_frame)
3.5 需要的tf变换
扫描的每帧传入SLAM中,并换算为位姿用于计算
3.6 提供的tf变换
将换算好的位姿在地图上显示
参考:http://wiki.ros.org/hector_mapping