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"

建圖結果:

 

節點之間的訂閱關係如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章