硬件要求

hector_mapping是基于激光雷达的SLAM的节点,不需要里程计信息,适用于运算能力差的计算机。该算法使用TF对scan数据进行坐标变换,所以雷达不必与指定的基帧相关进行固定,也不需要里程计。

API

hector_mapping

订阅的话题

scan (sensor_msgs/LaserScan)

  • 雷达scan的数据用于SLAM

syscommand (std_msgs/String)

  • 系统命令. 如果字符串等于“重置”,则地图和机器人姿势将重置为其初始状态。

发布的话题

map_metadata (nav_msgs/MapMetaData)

  • 定时的从话题中得到已经被锁存的地图数据

map (nav_msgs/OccupancyGrid)

  • 定时的从话题中得到已经被锁存的地图数据

slam_out_pose (geometry_msgs/PoseStamped)

  • 忽略协方差情况下的机器人位姿预测

poseupdate (geometry_msgs/PoseWithCovarianceStamped)

  • 高斯估计下的机器人位姿预测

服务

dynamic_map (nav_msgs/GetMap)

  • 调用此服务以获取地图数据

reset_map (std_srvs/Trigger)

  • 调用此服务重置地图,hector将从头开始一个全新的地图。请注意,这不会重新启动机器人的姿势,它将从上次录制的姿势重新启动。

pause_mapping (std_srvs/SetBool)

  • 调用此服务以停止/开始处理激光扫描

restart_mapping_with_new_pose (hector_mapping/ResetMapping)

  • 调用此服务以重置地图、机器人的姿势和恢复地图(如果暂停)

参数

~base_frame (string, default: base_link)

  • T机器人基架的名称,用于定位和转换激光扫描数据的框架

~map_frame (string, default: map_link)

  • 地图框的名称

~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)

  • x 轴上 /map 框的原点 [0.0, 1.0] 相对于格网地图的位置。0.5 在中间

~map_start_y (double, default: 0.5)

  • y 轴上 /map 框的原点 [0.0, 1.0] 相对于格网地图的位置。0.5 在中间。

~map_update_distance_thresh (double, default: 0.4)

  • 执行地图更新的阈值 [m]。在地图更新发生之前,平台必须以米为单位行驶这么远,否则会经历自上次更新以来map_update_angle_thresh参数所描述的角度变化

~map_update_angle_thresh (double, default: 0.9)

  • 执行地图更新的阈值 [rad]。在地图更新发生之前,平台必须经历自上次更新以来map_update_distance_thresh参数指定的角度变化,如此行程参数所描述的

~map_pub_period (double, default: 2.0)

  • 地图发布周期 [s]

~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)

  • 确定系统是否应发布地图>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)

  • 确定是否应将要映射转换的扫描匹配器发布到 tf。帧名称由“tf_map_scanmatch_transform_frame_name”参数确定

~tf_map_scanmatch_transform_frame_name (string, default: scanmatcher_frame)

  • 将扫描匹配器发布到映射转换时的帧名称,如上述参数中所述

所需的 tf 转换

<the frame attached to incoming scans>` → `base_frame

提供的 tf 转换

map → odom
  • 机器人在地图框中姿势的当前估计值(仅在参数“pub_map_odom_transform”为真时提供)

hector_geotiff

geotiff_node

geotiff_node是生成地理地图以及地理配准信息的节点

订阅的话题

syscommand (std_msgs/String)

  • 系统命令。如果字符串等于“savegeotiff”,则节点保存地理文件

参数

~map_file_path (string, default: ".")

  • 生成的地理地图将保存到路径

~map_file_base_name (string, default: "GeoTiffMap")

  • 为生成的地理文件指定的基本名称。保存地图时,当前时间将追加到此基本名称中

~geotiff_save_period (double, default: 0.0)

  • 定期自动保存地理文件的时间段(以秒为单位)。如果设置为 0.0,则禁用自动保存

~plugins (string, default: "")

  • 应为节点加载的插件名称的空格分隔列表。默认情况下,不加载任何内容

hector_trajectory_server

hector_trajectory_server是一个节点,用于保存轨迹数据

订阅的话题

syscommand (std_msgs/String)

  • 系统命令。如果字符串等于“重置”,则清除保存的轨迹

trajectory (nav_msgs/Path)

  • 从这个锁定的主题中获取行进轨迹

服务

trajectory (hector_nav_msgs/GetRobotTrajectory)

  • 调用此服务以获取行驶轨迹

参数

~target_frame_name (string, default: "map")

  • tf 目标帧的名称

~source_frame_name (string, default: "base_link")

  • tf 源帧的名称

~trajectory_update_rate (double, default: 4.0)

  • 保存轨迹的更新速率 [hz]

~trajectory_publish_rate (double, default: 0.25)

  • 在“轨迹”主题上发布的轨迹的发布速率 [hz]
最后修改:2023 年 11 月 10 日
如果觉得我的文章对你有用,请随意赞赏