ROS与SLAM入门教程-hector_mapping参数介绍
ROS与SLAM入门教程-hector_mapping参数介绍
说明:
介绍hector_mapping建图包及相关参数
hector_mapping是可以在没有里程测量的情况下以及在展示(传感器,平台或两者的)俯仰/俯仰运动的平台上使用的SLAM方法。
它利用现代LIDAR系统(如Hokuyo UTM-30LX)的高更新率,并以传感器的扫描速率(对于UTM-30LX为40Hz)提供2D姿态估计。
虽然系统不提供明确的循环关闭能力,但对于许多真实世界场景来说它足够准确。
该系统已成功应用于无人机地面机器人,无人地面车辆,手持式地图绘制设备以及来自四旋翼无人机的记录数据。
硬件要求:
- 要使用hector_mapping,您需要一个sensor_msgs / LaserScan数据源(例如Hokuyo UTM-30LX LIDAR或bagfiles)。
- 节点使用tf来转换扫描数据,因此LIDAR不需要固定, 不需要Odom数据。
ROS API:
- hector_mapping是基于LIDAR的SLAM的节点,没有里程计量和低计算资源。
- 为了简单起见,下面详细介绍的ROS API从用户角度提供了常用选项的信息,但不是所有可用于调试的选项。
(1)订阅的话题:
- scan (sensor_msgs/LaserScan) ,SLAM系统使用的激光扫描。
- syscommand (std_msgs/String) ,系统命令。 如果字符串等于“复位”,则地图和机器人姿势被重置为其初始状态。
(2)发布的话题:
- map_metadata (nav_msgs/MapMetaData) ,从此话题获取地图元数据,将其锁定并定期更新。
- map (nav_msgs/OccupancyGrid) ,从此话题获取地图数据,将其锁定并定期更新。
- slam_out_pose (geometry_msgs/PoseStamped) ,估计的机器人姿势没有协方差
- poseupdate (geometry_msgs/PoseWithCovarianceStamped) ,估计的机器人姿态具有高斯估计的不确定性
(3)服务:
- dynamic_map (nav_msgs/GetMap) ,调用此服务以获取地图数据
(4)参数:
- ~base_frame (string, default: base_link) ,机器人基本坐标系的名称。这是用于定位和用于激光扫描数据的变换
- ~map_frame (string, default: map_link) ,map 坐标系的名称。
- ~odom_frame (string, default: odom) ,里程坐标系的名称。
- ~map_resolution (double, default: 0.025) ,地图分辨率[m]。 这是网格单元边缘的长度。
- ~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.0,1.0]中的空闲单元格的地图更新修改器。 值0.5表示没有变化。
- ~update_factor_occupied (double, default: 0.9) ,用于在范围[0.0,1.0]中更新被占用单元的地图更新修改器。 值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转换是否应该由系统发布。
- ~output_timing (bool, default: false) ,通过ROS_INFO处理每个激光扫描的输出时序信息。
- ~scan_subscriber_queue_size (int, default: 5) ,扫描订阅器的队列大小。 如果日志文件以比实时速度更快的速度回放到hector_mapping,则应将此值设置为高值(例如50)。
- ~pub_map_scanmatch_transform (bool, default: true) ,确定scanmatcher到map的转换是否发布到TF.坐标名通过tf_map_scanmatch_transform_frame_name参数确定。
- ~tf_map_scanmatch_transform_frame_name (string, default: scanmatcher_frame) ,发布scanmatcher到map转换的坐标名。
要求的TF转换:
→ base_frame,通常是固定值,通过robot_state_publisher或tf static_transform_publisher周期广播。
提供的TF转换:
- map → odom,在地图坐标系内的当前机器人姿态的预估(pub_map_odom_transform参数为true才提供)
参考:
- http://wiki.ros.org/hector_slam/Tutorials/SettingUpForYourRobot
- http://wiki.ros.org/hector_mapping
- http://www.youtube.com/playlist?list=PL0E462904E5D35E29
- http://www.sim.tu-darmstadt.de/publ/download/2011_SSRR_KohlbrecherMeyerStrykKlingauf_Flexible_SLAM_System.pdf
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号