当前位置:   article > 正文

【ROS机器人】 --- 2-5.自主导航并slam建图_ros 自主建图

ros 自主建图

本节目标:加载一张未知地图,为机器人设置目标点,机器人会边走路,边建图,最后还可以用map_server保存.
实现:

  1. 打开gazebo和模型文件(car_move.launch)
  2. 编写launch文件(实际是slam和导航(move_base)相关等的配置)
  3. 启动机器人
  4. 配置rviz,并保存为新的rviz文件存入launch文件中
  5. 在rviz中通过2D Nav Goal设置目标点,机器人开始自主移动并建图,查看效果

前期准备

  1. 延用工作空间test2_ws;
  2. 功能包demo5_navigation存放代码;
  3. launch文件为demo5_navigation/launch/nav4_slam_auto.launch;
  4. 对于move_base用到的参数全放在demo5_navigation/param/文件夹下;
  5. rviz配置在demo5_navigation/config/rviz/nav4_2map.rviz;

基础知识

提问:
----导航时需要地图信息,之前导航实现时,是通过 map_server 包的 map_server 节点来发布地图信息的,如果没有通过SLAM建图,那么如何发布地图信息呢?
回答:
----SLAM建图过程中本身就会时时发布地图信息,所以无需再使用map_server,SLAM已经发布了话题为 /map 的地图消息了,且导航需要定位模块,SLAM本身也是可以实现定位的。

编写launch文件

实际上是引入了slam的配置文件和上一节导航所用到的几个配置文件.
源码如下(rviz已更改)

<launch>
	<!-- 启动SLAM节点 -->
	<include file="$(find demo5_navigation)/launch/nav1_slam.launch" /> 

	<!-- 运行move_base节点 -->
	<include file="$(find demo5_navigation)/launch/nav3_set_yaml.launch" />

	<!-- 运行rviz,这里的是第一次运行并且配置保存完rviz之后的 -->
	<include>
	<node pkg="rviz" type="rviz" name="rviz" />
	<!-- args="-d $(find demo5_navigation)/config/rviz/nav1.rviz"  /> -->
</launch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

执行流程

  1. 打开世界环境(gazebo机器人+模型)
roslaunch demo4_urdf_gazebo car_move.launch 
  • 1
  1. 运行launch文件
roslaunch demo5_navigation nav4_slam_auto.launch 
  • 1
  1. 配置rviz并保存
  • 取消posearray(获得更好的视觉效果)

  • 添加本地地图map,订阅话题选择local那个,配色选raw

  • 在这里插入图片描述

  • 添加全局地图,订阅话题选择glabal那个,配色选costmap
    在这里插入图片描述

  • 添加本地路径,path,订阅话题带local

  • 在这里插入图片描述

  • 添加全局路径,path 订阅话题带global,更改颜色和线束以获得更好的观测效果

  • 在这里插入图片描述

  • 设置目标点,开始自动导航和建图
    在这里插入图片描述

  • 保存rviz,并更改launch文件

保存rviz,命名为nav4_2map.rviz

最后重写launch文件

因为一个rviz不能存在导入两份rviz配置的操作,而我们的slam有对应rviz配置,所以我们应该重写slam文件代码到我们自己的launch文件中,并且在最后一句加入我们自己的rviz环境.而不是简单的文件调用.
更改之后的源码如下:

<launch>
<!-- 启动SLAM节点 -->
        <!-- if simulation then true -->
        <param name="use_sim_time" value="true"/>
        <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
        <!-- laser's topic name -->
        <remap from="scan" to="scan"/>
                <!--param list-->
                <!-- 关键坐标系设置 -->
                <param name="base_frame"    value="base_footprint" />
                <param name="map_frame"    value="map" />
                <param name="odom_frame"    value="odom" />

                <param name="map_update_interval" value="5.0"/>
                <param name="maxUrange" value="16.0"/>
                <param name="sigma" value="0.05"/>
                <param name="kernelSize" value="1"/>
                <param name="lstep" value="0.05"/>
                <param name="astep" value="0.05"/>
                <param name="iterations" value="5"/>
                <param name="lsigma" value="0.075"/>
                <param name="ogain" value="3.0"/>
                <param name="lskip" value="0"/>
                <param name="srr" value="0.1"/>
                <param name="srt" value="0.2"/>
                <param name="str" value="0.1"/>
                <param name="stt" value="0.2"/>
                <param name="linearUpdate" value="1.0"/>
                <param name="angularUpdate" value="0.5"/>
                <param name="temporalUpdate" value="3.0"/>
                <param name="resampleThreshold" value="0.5"/>
                <param name="particles" value="30"/>
                <param name="xmin" value="-50.0"/>
                <param name="ymin" value="-50.0"/>
                <param name="xmax" value="50.0"/>
                <param name="ymax" value="50.0"/>
                <param name="delta" value="0.05"/>
                <param name="llsamplerange" value="0.01"/>
                <param name="llsamplestep" value="0.01"/>
                <param name="lasamplerange" value="0.005"/>
                <param name="lasamplestep" value="0.005"/>
        </node>

        <!-- 坐标系变换发布 -->
        <!-- 关节以及机器人状态发布节点 -->
        <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
        <!-- 运行rviz,这里的是第一次运行并且配置保存完rviz之后的 -->
        <node pkg="rviz" type="rviz" name="rviz" args="-d $(find demo5_navigation)/config/rviz/nav4_2map.rviz"  />

<!-- 运行move_base节点 -->
<include file="$(find demo5_navigation)/launch/nav3_set_yaml.launch" />

</launch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

前几天忙了下校验的事,从今天开始回归挚爱的车.


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/339272
推荐阅读
相关标签
  

闽ICP备14008679号