自动驾驶系列(五)hector_slam建地图

一、安装hector_slam包

cd ~/catkin_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
cd ~/catkin_ws
catkin_make

二、修改tutorial.launch文件

cd ~/catkin_ws/src/hector_slam/hector_slam_launch/launch
gedit tutorial.launch

修改launch文件:

<?xml version="1.0"?>

<launch>

  <arg name="geotiff_map_file_path" default="$(find hector_geotiff)/maps"/>

  <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_mapping)/launch/mapping_default.launch"/>

  <include file="$(find hector_geotiff)/launch/geotiff_mapper.launch">
    <arg name="trajectory_source_frame_name" value="scanmatcher_frame"/>
    <arg name="map_file_path" value="$(arg geotiff_map_file_path)"/>
  </include>

  <node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0.0 0.0 0.0 0 0 0.0 /odom /base_link 10"/>

  <node pkg="tf" type="static_transform_publisher" name="base_frame_laser" args="0 0 0 0 0 0 /base_link /laser 10"/>

</launch>

主要做了两点修改:

  1. <param name="/use_sim_time" value="false"/>中的true改为false;
  2. 添加了两个tf变换坐标。
三、修改mapping_default.launch文件
cd ~/catkin_ws/src/hector_slam/hector_mapping/launch
gedit mapping_default.launch

修改launch文件:

  <arg name="base_frame" default="base_link"/>
  <arg name="odom_frame" default="base_link"/>

四、修改rslidar中的frame_id

由于hector_slam从激光雷达处订阅的frame_id为laser, 而激光雷达发布的frame_id为rslidar,因此需要对rslidar中的源码进行修改,并重新编译。如下:

cd ~/catkin_ws/src/ros_rslidar/rslidar_driver/src
gedit rsdriver.cpp

private_nh.param("frame_id", config_.frame_id, std::string("rslidar"));rslidar改为laser 

#重新编译rslidar_ros
cd ~/catkin_ws
catkin_make

五、创建slam.launch文件

cd ~/catkin_ws/src/ros_rslidar/rslidar_pointcloud/launch
gedit slam.launch

写入launch文件:

<launch>

  <include file="$(find rslidar_pointcloud)/launch/rs_lidar_16.launch" />

  <include file="$(find pointcloud_to_laserscan)/launch/point_to_scan.launch" />

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

</launch>

第一个是启动激光雷达,第二个是将三维point转换为二维scan,第三个是执行hector_slam功能。

这里需要注意的是,第一个和第三个都启动了rviz,需要将第一个launch文件中的rviz注释掉。如下:

cd ~/catkin_ws/src/ros_rslidar/rslidar_pointcloud/launch
gedit rs_lidar_16.launch
  <!-- <node name="rviz" pkg="rviz" type="rviz"  args="-d $(find rslidar_pointcloud)/rviz_cfg/rslidar.rviz" /> -->

六、启动slam.launch 文件

cd ~/catkin_ws
source devel/setup.bash
roslaunch rslidar_pointcloud slam.launch

运行有报错:

 看提示是hector_slam包的问题,找不到geotiff.launch文件。

 查看该目录,确实没有找到launch文件。

参考上一章节,单独运行前两个包,可与得到三维点云和二维扫描图。

#新开一个终端,启动3d雷达驱动
cd ~/catkin_ws
source devel/setup.bash
roslaunch rslidar_pointcloud rs_lidar_16.launch

#新开一个终端,启动pointcloud_to_laserscan节点
cd ~/catkin_ws
source devel/setup.bash
roslaunch pointcloud_to_laserscan point_to_scan.launch

#新开一个终端,启动hector_slam节点
cd ~/catkin_ws
source devel/setup.bash
roslaunch hector_slam_launch tutorial.launch

 根据报错信息,可以查找没有这个文件路径:

/home/bjtu/catkin_ws/src/hector_slam/hector_geotiff/launch/geotiff_mapper.launch

存在的文件路径为:

/home/bjtu/catkin_ws/src/hector_slam/hector_geotiff_launch/launch/geotiff_mapper.launch

将~/catkin_ws/src/hector_slam/hector_slam_launch/launch/tutorial.launch文件内容修改

修改前:  
    <include file="$(find hector_geotiff)/launch/geotiff_mapper.launch">
修改后:
    <include file="$(find hector_geotiff_launch)/launch/geotiff_mapper.launch">

        修改后终于运行正常了!拿着雷达简单走动下,端着水平走的时候过道还可以,转弯的时候,雷达倾斜的时候,误差比较大。

七、保存地图

#安装mapserver
sudo apt-get install ros-melodic-map-server
#保存地图
rosrun map_server map_saver -f my_map_name

 

### Hector SLAM地图效果 Hector SLAM 是一种基于激光扫描数据的地图算法,适用于高精度二维环境。它主要依赖于激光传感器的数据来实现定位和地图更新功能[^3]。该算法的核心优势在于无需外部里程计输入即可完成实时任务,在某些场景下表现出较高的稳定性和鲁棒性。 然而,Hector SLAM 对硬件性能有一定要求,尤其是在动态环境中表现可能会受到影响。由于其设计初衷是为了处理静态或准静态环境下的需求,因此在面对快速移动的机器人或者复杂动态障碍物时,可能出现漂移现象或错误匹配的情况[^2]。 ### 可能的优化方法 为了提升 Hector SLAM 地图的质量及其适应能力,可以考虑以下几种技术手段: #### 1. **改进前端点云配准** 通过引入更先进的 scan-to-scan 配准策略(例如 LOAM 中使用的边缘和平面特征提取),能够显著提高姿态估计的准确性。这种方法不仅减少了累计误差的影响,还增强了系统的抗干扰能力[^1]。 #### 2. **增强回环检测机制** 尽管原始版本的 Hector SLAM 并不包含显式的闭环修正模块,但是可以通过集成第三方库(如 CSM 或者 g2o)来进行全局一致性调整。具体来说,就是在发现重复区域之后重新计算整个轨迹并同步更新关联的地图结构。 #### 3. **融合多传感信息** 如果条件允许的话,则议增加额外感知渠道比如 IMU 数据流用于辅助推测瞬态加速度变化趋势;或者是视觉摄像头捕捉纹理细节补充稀疏几何约束不足之处。这种跨模态协作方式往往可以获得更加全面可靠的导航解决方案[^4]。 ```python import rospy from sensor_msgs.msg import LaserScan from nav_msgs.msg import OccupancyGrid def hector_slam_optimization(): # Initialize ROS node and subscribers/publishers here. pass if __name__ == '__main__': try: hector_slam_optimization() except rospy.ROSInterruptException: pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值