gmapping建图(只有激光)

声明:这是在turtlebot上跑gmapping成功后修改的(具体教程在创客智造)

1.利用激光生成odom信息

ros中gmapping建图时,需要提供odom和激光信息,但是手中只有激光,这时可以用laser_scan_matcher包模拟出odom信息。
在工作空间catkin_ws/src中:

git clone https://github.com/ccny-ros-pkg/scan_tools.git

下载后编译:

sudo apt-get install ros-kinetic-csm
cd catkin_ws
catkin_make
source	devel/setup.bash

2.修改turtlebot_navigation包里hokuyo_gmapping_demo.aunch文件(自己的gmapping文件)
在上面添加以下代码:

  <node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" 
    args="0.0 0.0 0.0 0.0 0.0 0.0 /base_link /laser 200" />
  <node pkg="laser_scan_matcher" type="laser_scan_matcher_node" name="laser_scan_matcher_node" output="screen">

    <param name="fixed_frame" value = "odom"/>
    <param name="max_iterations" value="10"/>

    <param name="base_frame" value = "base_link"/>
    <param name="use_odom" value = "false"/>
    <param name="publy_pose" value = "true"/>
    <param name="publy_tf" value = "true"/>

  </node>  

其中

<node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" 
    args="0.0 0.0 0.0 0.0 0.0 0.0 /base_link /laser 200" />

解释:static_transform_publisher是tf静态发布一个从父坐标系到子坐标系的一个坐标变换。
前三个0.0是子坐标相对父坐标的x,y,z(单位米)
后三个0.0是子坐标相对父坐标的三个轴的旋转角度(单位弧度)
base_link是父坐标系
laser是子坐标系
200是刷新频率

完整代码为以下:

<launch>
  <node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" 
    args="0.0 0.0 0.0 0.0 0.0 0.0 /base_link /laser 200" />
  <node pkg="laser_scan_matcher" type="laser_scan_matcher_node" name="laser_scan_matcher_node" output="screen">

    <param name="fixed_frame" value = "odom"/>
    <param name="max_iterations" value="10"/>

    <param name="base_frame" value = "base_link"/>
    <param name="use_odom" value = "false"/>
    <param name="publy_pose" value = "true"/>
    <param name="publy_tf" value = "true"/>

  </node>  
  
  <!-- Define laser type-->
  <arg name="laser_type" default="hokuyo" />

  <!-- laser driver -->
  <include file="$(find turtlebot_navigation)/laser/driver/$(arg laser_type)_laser.launch" />

  <!-- Gmapping -->
  <arg name="custom_gmapping_launch_file" default="$(find turtlebot_navigation)/launch/includes/gmapping/$(arg laser_type)_gmapping.launch.xml"/>
  <include file="$(arg custom_gmapping_launch_file)"/>

  <!-- Move base -->
  <include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>


</launch>

由于turtlebot中使用的base_frame是base_footprint,我们此时使用的是base_link,所以我们修改gmapping目录里的hokuyo_gmapping.launch.xml文件

<arg name="base_frame"  default="base_footprint"/>

改为:

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

剩下的过程和turtlebot gmapping一样

参考(https://blog.csdn.net/dzhongjie/article/details/84592376)

你可能感兴趣的:(gmapping建图(只有激光))