ROS 用hector_slam建图

本文介绍如何安装hector_slam并详细配置三个launch文件:slam.launch、hector_mapping.launch 和 geotiff_mapper.launch,以实现机器人自主建图。此外还提供了启动激光雷达节点及hector建图的方法。

安装hector_slam

sudo apt-get install ros-kinetic-hector-slam

进入hector_slam_launch包,在launch目录下添加三个launch文件

  1. slam.launch
<launch>

    <param name="/use_sim_time" value="false"/>

      <node pkg="rviz" type="rviz" name="rviz" args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>

    <include file="$(find hector_slam_launch)/launch/hector_mapping.launch"/>

     

    <include file="$(find hector_slam_launch)/launch/geotiff_mapper.launch">

      <arg name="trajectory_source_frame_name" value="scanmatcher_frame"/>

    </include>

 </launch>

2、hector_mapping.launch

<launch>

 

<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping"   output="screen">

  <param name="pub_map_odom_transform" value="true"/>

  <param name="map_frame" value="map" />

  <param name="base_frame" value="base_link" />

  <param name="odom_frame" value="base_link" />

 

  <!-- Map size / start point -->

    <param name="map_resolution" value="0.050"/>

    <param name="map_size" value="1048"/>

    <param name="map_start_x" value="0.5"/>

    <param name="map_start_y" value="0.5" />

    <param name="map_multi_res_levels" value="2" />

   

    <!-- Map update parameters -->

    <param name="update_factor_free" value="0.4"/>

    <param name="update_factor_occupied" value="0.9" />   

    <param name="map_update_distance_thresh" value="0.4"/>

    <param name="map_update_angle_thresh" value="0.06" />

    <param name="laser_z_min_value" value = "-1.0" />

    <param name="laser_z_max_value" value = "1.0" />

 

</node>

 

<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser_frame 100" /> 

 

</launch>

3、geotiff_mapper.launch

<launch>

<arg name="trajectory_source_frame_name" default="/base_link"/>

<arg name="trajectory_update_rate" default="4"/>

<arg name="trajectory_publish_rate" default="0.25"/>

 

<node pkg="hector_trajectory_server" type="hector_trajectory_server" name="hector_trajectory_server" output="screen">

<param name="target_frame_name" type="string" value="/map" />

<param name="source_frame_name" type="string" value="$(arg trajectory_source_frame_name)" />

<param name="trajectory_update_rate" type="double" value="$(arg trajectory_update_rate)" />

<param name="trajectory_publish_rate" type="double" value="$(arg trajectory_publish_rate)" />

</node>

 

<node pkg="hector_geotiff" type="geotiff_node" name="hector_geotiff_node" output="screen" launch-prefix="nice -n 15">

<remap from="map" to="/dynamic_map" />

<param name="map_file_path" type="string" value="$(find hector_geotiff)/maps" />

<param name="map_file_base_name" type="string" value="uprobotics" />

<param name="geotiff_save_period" type="double" value="0" />

<param name="draw_background_checkerboard" type="bool" value="true" />

<param name="draw_free_space_grid" type="bool" value="true" />

</node>

</launch>

 启动激光雷达node,以rplidar为例

roslaunch rplidar_ros rplidar.launch

 启动hector建图

roslaunch hector_slam_launch slam.launch

### 3.1 hector_mapping 中的激光雷达与IMU融合 hector_mapping 是一个基于激光雷达的SLAM算法,其主要特点是不需要里程计信息,能够在没有轮式编码器或视觉里程计的情况下构。该算法对硬件要求较低,适用于资源受限的嵌入式系统,同时它也支持IMU数据的融合,以提高的稳定性和精度。 在 hector_mapping 中,IMU数据可以用于辅助激光雷达的位姿估计,尤其是在机器人运动过程中出现滑动或快速旋转时,IMU能够提供额外的姿态信息,从而减少位姿估计的误差。IMU通常提供角速度和加速度信息,这些信息可以用于修正激光雷达在短时间内因运动造成的点云畸变,提高地的一致性[^1]。 ### 3.2 IMU在 hector_mapping 中的作用 在 hector_mapping 中,IMU的作用主要体现在以下几个方面: - **姿态估计辅助**:IMU提供角速度信息,可以用于估计机器人的旋转运动,从而辅助激光雷达进行位姿匹配。在没有里程计的情况下,IMU可以作为额外的传感器输入,提升位姿估计的稳定性。 - **运动补偿**:激光雷达在扫描过程中可能会受到机器人运动的影响,导致点云数据发生畸变。通过IMU的高频率姿态更新,可以对点云进行运动补偿,减少扫描过程中的位姿误差。 - **提高鲁棒性**:在动态环境或特征稀疏的场景中,仅依赖激光雷达进行位姿估计可能会出现漂移或失准。IMU的引入可以增强系统的鲁棒性,使得过程更加稳定[^1]。 ### 3.3 hector_mapping 与IMU融合的具体实现方式 在ROS中,hector_mapping 通常通过 `hector_imu_attitude_to_tf` 节点将IMU数据转换为TF变换,从而为激光雷达的位姿估计提供先验姿态信息。具体实现步骤如下: 1. **IMU数据预处理**:使用IMU驱动节点(如 `razor_imu_9dof` 或 `imu_filter_madgwick`)获取原始IMU数据,并将其转换为四元数形式的姿态信息。 2. **姿态TF变换**:通过 `hector_imu_attitude_to_tf` 节点将IMU的姿态信息转换为 `/imu_link` 到 `/base_link` 的TF变换,使得 hector_mapping 能够利用IMU的姿态估计作为初始值。 3. **融合**:在 hector_mapping 节点中,设置参数 `use_imu_data` 为 `true`,并指定IMU的TF变换,使得算法在进行位姿匹配时能够结合IMU的预测姿态,提高的精度和稳定性。 以下是一个典型的ROS启动文件配置示例: ```xml <launch> <!-- 启动IMU驱动 --> <node pkg="razor_imu_9dof" type="imu_node.py" name="imu_node" output="screen"> <param name="port" value="/dev/ttyUSB0"/> </node> <!-- IMU姿态转换为TF --> <node pkg="hector_imu_attitude_to_tf" type="imu_attitude_to_tf_node" name="imu_attitude_to_tf_node"> <param name="base_frame_id" value="base_link"/> <param name="imu_frame_id" value="imu_link"/> <param name="angle_convention" value="ENU"/> </node> <!-- 启动 hector_mapping --> <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping"> <param name="use_imu_data" value="true"/> <param name="base_frame" value="base_link"/> <param name="map_frame" value="map"/> <param name="odom_frame" value="odom"/> </node> <!-- 可视化地 --> <node name="map_server" pkg="map_server" type="map_server" args="$(find hector_slam)/maps/map.yaml"/> </launch> ``` ### 3.4 hector_mapping 与IMU融合的优缺点 #### 优点: - 对硬件要求低,适合嵌入式系统和低成本机器人平台。 - 无需里程计信息,IMU可以作为替代的姿态估计来源。 - 支持实时,适合室内环境下的SLAM任务。 - 通过IMU辅助,可以在特征稀疏或动态环境中提高稳定性[^1]。 #### 缺点: - 没有闭环检测功能,长期运行中可能会出现累计误差。 - 地依赖激光雷达的扫描质量,特征稀少的环境可能导致匹配失败。 - IMU存在漂移问题,在长时间运行中需要结合其他传感器进行校正。 ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值