hector-slam安装与使用 (ubuntu 16.04)(使用数据包运行hector-slam)

安装hector-slam需要ros系统,首先通过官方教程进行安装,需要根据系统找好对应的ros系统版本,Ubuntu16.04对应Kinetic版本,安装教程如下():

ROS Kinetic ONLY supports Wily (Ubuntu 15.10), Xenial (Ubuntu 16.04) and Jessie (Debian 8) for debian packages.

  • sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  • sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  • curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
  • sudo apt-get update
  • sudo apt-get install ros-kinetic-desktop-full

安装完成ros之后开始安装hector-slam:

首先创建工作目录以及配置环境

  • echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
  • source ~/.bashrc
  • mkdir -p catkin_ws/src
  • cd catkin_ws
  • catkin_make
  • echo "source /home/robot/catkin_ws/devel/setup.bash" >> ~/.bashrc

下载安装hector-slam

编译过程中报错

c++: internal compiler error: Killed (program cc1plus)

是因为系统内存不够导致的,参考这篇文章

https://blog.csdn.net/me1171115772/article/details/105111299

执行完之后重新运行catkin_make

至此编译完成

Hector-slam使用

 

hector-slam针对高频率激光设备效果较好,低频建图基本不太准确。

hector-slam官方介绍有三种使用方式:

  1. Use in place of gmapping(通过gmapping发布map到odom的tf变换)

  2. Use without odom frame(不使用odom里程计信息)

  3. Use without Broadcasting of transformations(不使用任何tf数据)

因为我使用机器人录制了一下厂房的数据包,其中包括了激光数据和odom数据,这里暂时不使用odom(其实是没看出来在哪里使用/(ㄒoㄒ)/~~)。

数据包地址以及相关的launch文件:https://download.csdn.net/download/me1171115772/12271884

首先进入hector_slam的launch目录下,查看一下launch文件:

  • roscd hector_slam_launch/launch

默认的是使用tutorial.launch ,打开文件查看文件内容:

这里开到它包含了mapping_default.launch文件,查看文件内容:

 

在这个文件里面看到了base_frama | odom_frame  |  scan_topic 这几个参数,首先base_frame不需要改,这个程序默认的,然后odom_frame也不需要改,程序会自己发布,最后scan_topic根据自己的激光主题发布,因为这里发布的主题就是scan所以不做改动。

更改文件之后运行报错,提示

这说明没有laser scan 到base_frame的tf变换,添加下行到launch文件中,发布一个静态变换:

  • <node pkg="tf" type="static_transform_publisher" name="base_frame_laser" args="0 0 0 0 0 0 /base_footprint /velodyne 100" />

这里提示一下,laser scan对应的不应该是scan的主题,而是scan的frama_id,因为我使用的是velodyne激光,所以这里对应的改成/velodyne.

改完之后的两个文件:

<?xml version="1.0"?>

<launch>

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

  <param name="/use_sim_time" value="true"/>
  <node pkg="tf" type="static_transform_publisher" name="base_frame_laser" args="0 0 0 0 0 0 /base_footprint /velodyne 100" />
  <!--node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0.0 0.0 0.0 0 0 0.0 /odom /base_footprint 100" /-->
  <node pkg="rosbag" type="play" name="bagplayer" args="--clock /home/robot/rosbag/whole-room_2020-02-27-11-31-12.bag"/>
  <node pkg="rviz" type="rviz" name="rviz"
    args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>

  <include file="$(find hector_mapping)/launch/whole_room_mapping.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>

</launch>
hector_slam/hector_slam_launch/launch/whole_room.launch

<?xml version="1.0"?>

<launch>
  <arg name="tf_map_scanmatch_transform_frame_name" default="scanmatcher_frame"/>
  <arg name="base_frame" default="base_footprint"/>
  <arg name="odom_frame" default="odom"/>
  <arg name="pub_map_odom_transform" default="true"/>
  <arg name="scan_subscriber_queue_size" default="5"/>
  <arg name="scan_topic" default="scan"/>
  <arg name="map_size" default="2048"/>

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

    <!-- Frame names -->
    <param name="map_frame" value="map" />
    <param name="base_frame" value="$(arg base_frame)" />
    <param name="odom_frame" value="$(arg odom_frame)" />

    <!-- Tf use -->
    <param name="use_tf_scan_transformation" value="true"/>
    <param name="use_tf_pose_start_estimate" value="false"/>
    <param name="pub_map_odom_transform" value="$(arg pub_map_odom_transform)"/>

    <!-- Map size / start point -->
    <param name="map_resolution" value="0.050"/>
    <param name="map_size" value="$(arg map_size)"/>
    <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" />

    <!-- Advertising config -->
    <param name="advertise_map_service" value="true"/>

    <param name="scan_subscriber_queue_size" value="$(arg scan_subscriber_queue_size)"/>
    <param name="scan_topic" value="$(arg scan_topic)"/>

    <!-- Debug parameters -->
    <!--
      <param name="output_timing" value="false"/>
      <param name="pub_drawings" value="true"/>
      <param name="pub_debug_output" value="true"/>
    -->
    <param name="tf_map_scanmatch_transform_frame_name" value="$(arg tf_map_scanmatch_transform_frame_name)" />
  </node>

  <!--<node pkg="tf" type="static_transform_publisher" name="map_nav_broadcaster" args="0 0 0 0 0 0 map nav 100"/>-->
</launch>

"/home/robot/catkin_ws/src/hector_slam/hector_mapping/launch/whole_room_mapping.launch"

建图结果:

 

节点之间的订阅关系如下:

 

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 以下是在Ubuntu 18.04上安装hector-slam的步骤: 1. 打开终端并更新软件包列表: sudo apt-get update 2. 安装hector-slam: sudo apt-get install ros-melodic-hector-slam 3. 安装hector-slam所需的其他依赖项: sudo apt-get install ros-melodic-geographic-msgs ros-melodic-tf2-geometry-msgs ros-melodic-laser-geometry ros-melodic-tf2-sensor-msgs 4. 启动hector-slamroslaunch hector_slam_launch tutorial.launch 5. 打开另一个终端并启动激光扫描仪: roslaunch hector_slam_launch laser_scan.launch 6. 打开rviz并添加hector-slam节点: rosrun rviz rviz 7. 在rviz中添加hector_mapping节点并设置其参数。 以上是在Ubuntu 18.04上安装hector-slam的步骤。 ### 回答2: Hector-slam是一个开源的二维激光雷达SLAM算法,可以用于在ROS中进行移动机器人的自主导航。在Ubuntu18.04 LTS上安装Hector-slam相对来说比较容易。下面是安装Hector-slam的步骤: 1. 首先要安装ROS Melodic(或更高版本)和雷达驱动程序。可以参考官方文档 https://wiki.ros.org/melodic/Installation/Ubuntu 安装ROS Melodic。 2. 打开终端,输入以下命令,将hector-slam安装ROS中: ``` sudo apt-get install ros-melodic-hector-slam ``` 3. 安装完后,输入以下命令,启动Hector-slam演示节点: ``` roslaunch hector_slam_launch tutorial.launch ``` 4. 接下来,启动雷达驱动程序节点: ``` rosrun hokuyo_node hokuyo_node ``` 如果你使用的是其他品牌的激光雷达,需要使用相应的驱动程序节点,例如SICK的雷达需要使用sicktoolbox_wrapper节点。 5. 最后,启动Rviz可视化工具,用于显示SLAM的结果: ``` roslaunch hector_slam_launch tutorial.launch ``` 现在,你应该可以在Rviz中看到机器人的地图和轨迹了。 总的来说,安装hector-slam相对来说比较简单,只需要按照以上步骤依次操作即可, 但在安装过程中,可能会出现一些报错或者其他问题,需要针对具体的问题进行调试。 ### 回答3: 在Ubuntu 18.04上安装Hector SLAM,需要做以下几个步骤: 一、安装Ros: 1、打开终端(Ctrl + Alt + T)。 2、在终端中执行以下命令,来添加ROS软件包的源: ``` sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' ``` 3、添加ROS软件包的密钥: ``` sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 ``` 4、更新软件包列表: ``` sudo apt-get update ``` 5、安装ros-desktop-full: ``` sudo apt-get install ros-melodic-desktop-full ``` 二、安装Hector SLAM: 1、安装hector-slam包: ``` sudo apt-get install ros-melodic-hector-slam ``` 2、安装ros-kinetic-gmapping: ``` sudo apt-get install ros-melodic-gmapping ``` 三、运行Hector SLAM: Hector SLAM包提供了hector_mapping节点,通过该节点可以启动Heitor码购买地图建图: ``` roslaunch hector_mapping hector_mapping.launch ``` 启动hector_mapping节点后,还需要订阅雷达或者深度相机的数据,并发布TF变换。 四、查看地图: 在地图生成过程中,hector_mapping节点会发布/map话题,该话题包含了SLAM构建出来的地图。 可以通过rviz来查看地图,启动rviz: ``` rosrun rviz rviz ``` 在rviz中,通过添加Map部分的话题来显示hector_mapping节点发布的地图。可以通过添加LaserScan(或PointCloud2)部分的话题来显示雷达(或深度相机)返回的数据。 以上操作就可以在Ubuntu 18.04上安装Hector SLAM,进行地图建图
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值