机器人之Hector

简介

hector_mapping是一种在没有里程计的slam方法,也可以在显示pitch/roll运动平台上使用。它利用了现代激光雷达系统的高更新率,如Hokuyo UTM-30LX,并在传感器的扫描速率下提供2D姿态估计(UTM-30LX为40Hz)。虽然该系统不提供显式闭环功能,但对于许多现实世界的场景来说,它足够准确。该系统已成功用于无人地面机器人,无人地面车辆,手持测绘设备和四旋翼无人机的记录数据。
相关论文:A flexible and scalable SLAM system with full 3D motion estimation
传送门:论文下载直达

功能包介绍

1.0 订阅的话题
0. scan (sensor_msgs/LaserScan)					必要的雷达扫描数据
1. <scan frame> → base_frame					必要的TF
2. syscommand (std_msgs/String)					系统命令。如果字符串等于"reset",则地图和机器人姿势被重置到初始状态
1.1 发布的主题及服务及TF

话题

0. map_metadata (nav_msgs/MapMetaData)					地图的元数据
1. map (nav_msgs/OccupancyGrid)							地图数据,该数据被锁存并定期更新
2. slam_out_pose (geometry_msgs/PoseStamped)			无协方差的机器人姿态估计
3. poseupdate (geometry_msgs/PoseWithCovarianceStamped)	机器人姿态估计带有高斯估计不确定性

服务

0.	dynamic_map (nav_msgs/GetMap)			请求后以得到地图数据
1.	reset_map (std_srvs/Trigger)			调用此服务以重置地图,hector重建全新的地图。注意,不会重启机器人的姿势,将从最后记录的姿势重新启动
2.	pause_mapping (std_srvs/SetBool)		调用此服务来停止/开始处理激光扫描
3.	restart_mapping_with_new_pose (hector_mapping/ResetMapping)	调用这个服务来重置地图,机器人的姿势,并恢复映射(如果暂停)

TF

0. map → odom								构建的地图坐标系到里程计坐标系的变换
1.3 整体框图

在这里插入图片描述

配置使用

2.0 二进制安装
sudo apt-get install ros-<ros版本>-hector-slam

sudo apt install ros-noetic-hector-slam
2.1 launch文件配置

launch文件配置

<launch>
    <node pkg = "hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
        <param name="scan_topic"                            value="scan"/>
        <!-- frame name config -->
        <param name="map_frame"                             value="map" />              <!-- 地图参考系名称 -->
        <param name="base_frame"                            value="base_footprint" />   <!-- 基参考系名称 -->
        <param name="odom_frame"                            value="odom" />             <!-- 里程计参考系名称 -->
        <!-- TF -->
        <param name="use_tf_scan_transformation"        value="true"/>
        <param name="use_tf_pose_start_estimate"        value="false"/>
        <!-- map config -->
        <param name="map_resolution"                        value="0.05"/>              <!-- 默认值0.025,地图分辨率(m)  -->
        <param name="map_size"                              value="2048"/>              <!-- 默认值1024,正方形地图边长栅格数目 -->
        <param name="map_start_x"                           value="0.5"/>               <!-- 默认值0.5为居中,x轴上,map参考系的原点上相对于栅格地图的位置 -->
        <param name="map_start_y"                           value="0.5" />              <!-- 默认值0.5为居中,y轴上,map参考系的原点上相对于栅格地图的位置 -->
        <param name="map_multi_res_levels"                  value="2" />                <!-- 默认值3,地图多分辨率栅格级别的数量 -->
        <param name="map_update_distance_thresh"            value="0.4"/>               <!-- 默认值0.4,每移动此长度(m)后进行地图的更新 -->
        <param name="map_update_angle_thresh"               value="0.06"/>              <!-- 默认值0.9,每旋转此角度(rad)后进行地图的更新 -->
        <param name="update_factor_free"                    value="0.4"/>               <!-- 默认值0.4,地图更新调整关于自由单元,范围[0.0. 1.0],0.5意味着不改变 -->
        <param name="update_factor_occupied"                value="0.9" />              <!-- 默认值0.9,地图更新调整关于占用单元,范围[0.0. 1.0],0.5意味着不改变 -->
        <!-- laser config -->
        <param name="laser_min_dist"                        value="0.4" />              <!-- 默认值0.4,系统使用的雷达扫描点的最小距离(m),即扫面点小于此值时被忽略 -->
        <param name="laser_max_dist"                        value="5.5" />              <!-- 默认值30.0,系统使用的雷达扫描点的最大距离(m),即扫面点大于此值时被忽略 -->
        <param name="laser_z_min_value"                     value="-1.0" />             <!-- 默认值-1.0,系统使用的雷达扫描点相对于雷达参考系的最小高度(m),即扫面点小于此值时被忽略 -->
        <param name="laser_z_max_value"                     value="1.0" />              <!-- 默认值1.0,系统使用的雷达扫描点相对于雷达参考系的最大高度(m),即扫面点大于此值时被忽略 -->
        <!-- pub config -->
        <param name="advertise_map_service"                 value="true"/>
        <param name="map_pub_period"                        value="2.0" />              <!-- 默认值2.0,map发布的周期(s) -->
        <param name="pub_map_odom_transform"                value="true"/>              <!-- 默认值true,决定系统是否发布 map-odom 的TF -->
        <param name="pub_map_scanmatch_transform"           value="true" />             <!-- 默认值true,决定系统是否发布 scanmatcher-map 的TF,参考系名称由“tf_map_scanmatch_transform_frame_name”参数确定。 -->
        <param name="output_timing"                         value="false" />            <!-- 默认值false,决定是否通过ROS_INFO输出每次雷达扫描处理的时序信息 -->
        <param name="scan_subscriber_queue_size"            value="5"/>                 <!-- 默认值5,scan订阅的队列大小,如果将日志文件以比实时速度更快的速度播放到hector_mapping,则应置为较高的值(如50) -->
        <!-- other config -->
        <param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame"/> <!-- 默认值scanmatcher_frame,参数使用见其他参数配置 -->

    </node>
</launch>

注意事项

后面遇到在补充吧

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酸奶可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值