SLAM学习笔记——从零搭建完整的gazebo多机仿真SLAM(四)

引言

到了本次教程的最后一章,之前我们使用了单机器人SLAM,多机器人地图融合SLAM,以及多个机器人在地图中的导航。最后一章(后面可能会有新的章节,第一系列到此为止),我们将使用explore_lite功能包,使机器人在建图的过程中,自主已经建立地图中最适合拓展的前沿,并自动边导航,边构建地图,直到整张地图构建完成。
源代码在gitee上,可以看第一篇文章。

总体launch文件

主要是融合了第二课和第三课内容,在多机slam中加入了move_base导航,再利用explore_lite进行坐标发布

<launch>
    <!--SLAM算法 -->
    <arg name="slam_method" default="gmapping"/>
    <arg name="simulation" default="true"/>
    <arg name="move_forward_only" default="false"/>

    <group if="$(arg simulation)" >
        <!-- 开启仿真世界 -->
        <include file="$(find gazebo_tutorials)/launch/create_world.launch" />
         <!-- 放置机器人 -->
        <include file="$(find gazebo_tutorials)/launch/place_robot.launch">
            <arg name="robot_x_pos" value="0.0"/>
            <arg name="robot_y_pos" value="0.0"/>
            <arg name="robot_z_pos" value="0.0"/>
            <arg name="robot_yaw"   value="0.0"/>
            <arg name="robot_name" value="tb3_0"/>
        </include>
         <!-- 放置机器人 -->
        <include file="$(find gazebo_tutorials)/launch/place_robot.launch">
            <arg name="robot_x_pos" value="-3"/>
            <arg name="robot_y_pos" value="0.0"/>
            <arg name="robot_z_pos" value="0.0"/>
            <arg name="robot_yaw"   value="0.0"/>
            <arg name="robot_name" value="tb3_1"/>
        </include>
    </group>
    <!-- 开启SLAM -->
    <include file="$(find gazebo_tutorials)/slam_methods/$(arg slam_method).launch">
        <arg name="ns" value="tb3_0"/>
    </include>
    <include file="$(find gazebo_tutorials)/slam_methods/$(arg slam_method).launch">
        <arg name="ns" value="tb3_1"/>
    </include>

    <!-- 启动地图融合节点并加入1号机器人地图信息 -->
     <include file="$(find gazebo_tutorials)/launch/map_merging.launch">
        <arg name="if_first_robot" value="True"/>
        <arg name="robot_x_pos" value="0.0"/>
        <arg name="robot_y_pos" value="0.0"/>
        <arg name="robot_z_pos" value="0.0"/>
        <arg name="robot_name" value="tb3_0"/>
    </include>
    <!-- 加入2号机器人地图信息 -->
    <include file="$(find gazebo_tutorials)/launch/map_merging.launch">
        <arg name="if_first_robot" value="False"/>
        <arg name="robot_x_pos" value="-3"/>
        <arg name="robot_y_pos" value="0.0"/>
        <arg name="robot_z_pos" value="0.0"/>
        <arg name="robot_name" value="tb3_1"/>
    </include>   

    <!-- move_base导航-->
    <include file="$(find gazebo_tutorials)/launch/move_base.launch">
        <arg name="ns" value="tb3_0" />
        <arg name="move_forward_only" value="$(arg move_forward_only)"/>
    </include> 
        <include file="$(find gazebo_tutorials)/launch/move_base.launch">
        <arg name="ns" value="tb3_1" />
        <arg name="move_forward_only" value="$(arg move_forward_only)"/>
    </include> 

    <!-- 自主探索 -->
    <include file="$(find gazebo_tutorials)/launch/explore_costmap.launch">
        <arg name="ns" value="tb3_0" />
    </include>
    <include file="$(find gazebo_tutorials)/launch/explore_costmap.launch">
        <arg name="ns" value="tb3_1" />
    </include>

    <!-- rviz -->
    <include file="$(find gazebo_tutorials)/launch/rviz_two_robots.launch" />
</launch>

explore_costmap.launch

这个功能包就是计算出栅格地图的边缘,然后通过某些手段计算边的权重,决定往什么方向进行拓展。这不是自带的功能包,要自己下载。

sudo apt-get install ros-melodic-explore-lite

主要是costmap_topic和costmap_updates_topic两个参数,他们接收到的地图将决定他们根据什么来进行导航。

<launch>
<arg name="ns"  default="tb3_0"/>

<node pkg="explore_lite" type="explore" respawn="false" name="$(arg ns)_explore" output="screen">
  <remap from="move_base_simple/goal" to="$(arg ns)/move_base_simple/goal"/>
  <remap from="move_base" to="$(arg ns)/move_base"/>
    
  <param name="robot_base_frame" value="$(arg ns)/base_footprint"/>
  <param name="costmap_topic" value="$(arg ns)/map"/>
  <param name="costmap_updates_topic" value="$(arg ns)/map_updates"/>
  <!--指定是否发布可视化边界-->
  <param name="visualize" value="true"/>  
  <!--计算新边界和重新考虑目标的频率(Hz)-->
  <param name="planner_frequency" value="0.33"/>
  <!--时间以秒为单位。当机器人在 progress_timeout 没有任何进展时,当前目标将被放弃。-->
  <param name="progress_timeout" value="30.0"/>
  <!--用于加权边界。这个乘法参数影响前沿权重的前沿潜在分量(到前沿的距离)。-->
  <param name="potential_scale" value="3.0"/>
  <!--用于加权边界。这个乘法参数影响前沿权重的前沿方向分量。此参数目前不执行任何操作,仅用于向前兼容。-->
  <param name="orientation_scale" value="0.0"/>
  <!--用于加权边界。这个乘法参数影响边界权重(边界大小)的边界增益分量。-->
  <param name="gain_scale" value="1.0"/>
  <!--变换机器人姿势时使用的变换容差。-->
  <param name="transform_tolerance" value="0.3"/>
  <!--将边界视为探索目标的边界的最小大小。以米为单位。-->
  <param name="min_frontier_size" value="0.1"/>
</node>
</launch>

启动

最后使用命令roslaunch gazebo_tutorials two_robots_autoslam.launch启动即可。
在rviz中可以添加MarkerArray来显示地图前沿
最后我们可以看到两台机器人自己动了起来,并且地图相互融合,但是非常笨,毕竟这个功能包是为了一个机器人准备的,我后面可能自己想办法写多台机器人的决策程序,敬请期待。
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值