hector slam可以在没有里程计的情况下,以及展示俯仰的平台上使用建图
在hector_slam程序中,最重要的是hector_mapping节点。
hector_mapping:
订阅的主题:
scan (sensor_msgs/LaserScan) :激光雷达的扫描数据,通常由设备的运行的节点提供,例如:hokuyo node
syscommand (std_msgs/String) : 系统命令,直接受“reset”,当接受该命令时,重设map frame 和robot 位置到初始的状态
发布的主题:
map_metadata (nav_msgs/MapMetaData) : 其余节点可以获取到map元数据,锁定并且定期更新
map (nav_msgs/OccupancyGrid) : 其余节点可以获取到map数据,锁定并且定期更新
slam_out_pose (geometry_msgs/PoseStamped):无协方差的预估机器人姿态
poseupdate (geometry_msgs/PoseWithCovarianceStamped) : 使用高斯预估不确定性的预估机器人姿态
服务:
dynamic_map (nav_msgs/GetMap) :使用该服务,获取地图数据
需要的tf
->base_frame 通常是固定值,由 robot_state_publisher, or a tf static_transform_publisher 周期发布。
提供的tf
map->odom :在map坐标系中预估的robot姿态,当pub_map_odom_transform为true时发布。
参数:
~base_frame (string, default: base_link) : 机器人基础坐标系的名称。这个坐标系用来定位和激光扫描器数据的改变(transformation)
~map_frame (string, default: map_link) :地图坐标系名称,通常是map,也就是所谓的全局world坐标系
~odom_frame (string, default: odom):里程计坐标系名称,默认是odom
~map_resolution (double, default: 0.025) : 地图分辨率,单位为m,一个网格单元的长度。默认为0.025
~map_size (int, default: 1024) :地图中一行网格的数量。地图是正方形的,并且有(map_size×map_size)个网格
~map_start_x (double, default: 0.5) :map 坐标系定位原点[0.0, 1.0] 的位置到网格上,在x轴方向上。0.5是中间值
~map_start_y (double, default: 0.5) :map 坐标系定位原点[0.0, 1.0] 的位置到网格上,在y轴方向上。0.5是中间值
~map_update_distance_thresh (double, default: 0.4) :地图更新的长度阀值,单位m。在一次更新后,平台必须移动这个参数代表的值的距离后,才能再次更新地图。
~map_update_angle_thresh (double, default: 0.9) :地图更新的角度阀值,单位rad。在一次更新后,平台必须转动这个参数代表的值的角度后,才能再次更新地图。
~map_pub_period (double, default: 2.0) :地图发布的周期,单位秒
~map_multi_res_levels (int, default: 3) :地图多级分辨率网格级数
~update_factor_free (double, default: 0.4) :地图更新调节器,用来更新空闲单元的变化。0.5代表没有更改
~update_factor_occupied (double, default: 0.9):地图更新调节器,用来更新占用单元的变化。0.5代表没有更改
~laser_min_dist (double, default: 0.4) :系统使用的最短扫描端点,单位m。小于此距离的扫描端点将会被忽略
~laser_max_dist (double, default: 30.0) :系统使用的最长扫描端点,单位m。大于此距离的扫描端点将会被忽略
~laser_z_min_value (double, default: -1.0) : 系统使用的最低扫描端点,单位m。低于此距离的扫描端点将会被忽略
~laser_z_max_value (double, default: 1.0) :系统使用的最高扫描端点,单位m。高于此距离的扫描端点将会被忽略
~pub_map_odom_transform (bool, default: true) : 是否需要发出map->odom transform的标志位
~output_timing (bool, default: false) : 通过ROS_INFO 输出每个laser扫描过程的时序信息
~scan_subscriber_queue_size (int, default: 5) :订阅/scan的队列大小(buffer)。如果有日志回放速度大于实际速度,那这个值应该被设的很高,例如 50。
~pub_map_scanmatch_transform (bool, default: true) :决定是否发布scanmatcher->map的transform的标志。scanmatcher 坐标系名称由'tf_map_scanmatch_transform_frame_name' 参数决定。
~tf_map_scanmatch_transform_frame_name (string, default: scanmatcher_frame) :用来发布scanmatch到map转换的坐标名