hector_mapping

        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)

  • The name of the base frame of the robot. This is the frame used for localization and for transformation of laser scan data.

~map_frame (string, default: map_link)

  • The name of the map frame.

~odom_frame (string, default: odom)

  • The name of the odom frame.

~map_resolution (double, default: 0.025)

  • The map resolution [m]. This is the length of a grid cell edge.

~map_size (int, default: 1024)

  • The size [number of cells per axis] of the map. The map is square and has (map_size * map_size) grid cells.

~map_start_x (double, default: 0.5)

  • Location of the origin [0.0, 1.0] of the /map frame on the x axis relative to the grid map. 0.5 is in the middle.

~map_start_y (double, default: 0.5)

  • Location of the origin [0.0, 1.0] of the /map frame on the y axis relative to the grid map. 0.5 is in the middle.

~map_update_distance_thresh (double, default: 0.4)

  • Threshold for performing map updates [m]. The platform has to travel this far in meters or experience an angular change as described by the map_update_angle_thresh parameter since the last update before a map update happens.

~map_update_angle_thresh (double, default: 0.9)

  • Threshold for performing map updates [rad]. The platform has to experience an angular change as described by this parameter of travel as far as specified by the map_update_distance_thresh parameter since the last update before a map update happens.

~map_pub_period (double, default: 2.0)

  • The map publish period [s].

~map_multi_res_levels (int, default: 3)

  • The number of map multi-resolution grid levels.

~update_factor_free (double, default: 0.4)

  • The map update modifier for updates of free cells in the range [0.0, 1.0]. A value of 0.5 means no change.

~update_factor_occupied (double, default: 0.9)

  • The map update modifier for updates of occupied cells in the range [0.0, 1.0]. A value of 0.5 means no change.

~laser_min_dist (double, default: 0.4)

  • The minimum distance [m] for laser scan endpoints to be used by the system. Scan endpoints closer than this value are ignored.

~laser_max_dist (double, default: 30.0)

  • The maximum distance [m] for laser scan endpoints to be used by the system. Scan endpoints farther away than this value are ignored.

~laser_z_min_value (double, default: -1.0)

  • The minimum height [m] relative to the laser scanner frame for laser scan endpoints to be used by the system. Scan endpoints lower than this value are ignored.

~laser_z_max_value (double, default: 1.0)

  • The maximum height [m] relative to the laser scanner frame for laser scan endpoints to be used by the system. Scan endpoints higher than this value are ignored.

~pub_map_odom_transform (bool, default: true)

  • Determine if the map->odom transform should be published by the system.

~output_timing (bool, default: false)

  • Output timing information for processing of every laser scan via ROS_INFO.

~scan_subscriber_queue_size (int, default: 5)

  • The queue size of the scan subscriber. This should be set to high values (for example 50) if logfiles are played back to hector_mapping at faster than realtime speeds.

~pub_map_scanmatch_transform (bool, default: true)

  • Determines if the scanmatcher to map transform should be published to tf. The frame name is determined by the 'tf_map_scanmatch_transform_frame_name' parameter.

~tf_map_scanmatch_transform_frame_name (string, default: scanmatcher_frame)

  • The frame name when publishing the scanmatcher to map transform as described in the preceding parameter.

3.5 需要的tf变换

扫描的每帧传入SLAM中,并换算为位姿用于计算

3.6 提供的tf变换

将换算好的位姿在地图上显示

参考:http://wiki.ros.org/hector_mapping

ROS2中,Hector Mapping是一个用于构建室内地图的机器人导航软件包。要配置这个软件包,你需要按照以下步骤进行: 1. **安装依赖**: 首先确保你的系统已经安装了ROS2基础包,并通过`ros2 pkg update && ros2 pkg upgrade`保持更新。然后,从官方GitHub仓库(https://github.com/tum-vision/hector_mapping)克隆Hector Mapping源码或添加到你的工作空间。 2. **构建软件包**: 使用`colcon build`命令在一个新目录下创建一个新的build空间,然后在这个空间里构建Hector Mapping。例如: ``` mkdir hector_mapping_ws cd hector_mapping_ws colcon init git clone https://github.com/tum-vision/hector_mapping.git cd hector_mapping colcon build --symlink-install ``` 3. **设置环境变量**: 添加Hector Mapping的安装路径到你的`AMENT_INDEX_PATH`环境变量,这将允许ROS2找到它的依赖。 4. **启动节点**: 要运行Hector Mapping的相关服务和节点,可以在终端中运行: ``` source install/local_setup.bash ros2 launch hector_mapping <launch_file>.launch.py ``` 其中 `<launch_file>` 是包含特定配置的`.launch.py`文件,比如`hector_mapping_launch.py` 或者自定义的配置。 5. **调整配置**: 在`<launch_file>` 中,你可以配置传感器数据来源、odom话题、地图服务器等参数,以适应你的硬件和需求。 6. **测试与监控**: 启动后,你可以通过运行`ros2 topic echo /map` 等命令来检查生成的地图信息,同时查看其他相关日志来确保一切正常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值