机器人SLAM与自主导航(三)

2021/8/31 ROSPython机器人开发SLAM

# 一、在Gazebo中仿真机器人导航

# 1.1创建launch文件

整体思路:首先启动Gazebo仿真环境,然后启动move_base导航功能节点

  • 第一步:启动的Gazebo仿真环境的激光雷达SLAM仿真环境mrobot_gazebo/launch/mrobot_laser_nav_gazebo.launch
  • 第二步:启动move_base导航功能节点mrobot_navigation/launch/fake_nav_cloister_demo.launch,代码如下:
<launch>
    <!-- 设置地图的配置文件 -->
    <arg name="map" default="cloister_gmapping.yaml" />
    <!-- 运行地图服务器,并且加载设置的地图-->
    <node name="map_server" pkg="map_server" type="map_server" args="$(find mrobot_navigation)/maps/$(arg map)"/>
    <!-- 运行move_base节点 -->
    <include file="$(find mrobot_navigation)/launch/move_base.launch"/>
    <!-- 运行虚拟定位,兼容AMCL输出 -->
    <node pkg="fake_localization" type="fake_localization" name="fake_localization" output="screen" />
    <!-- 对于虚拟定位,需要设置一个/odom与/map之间的静态坐标变换 -->
    <node pkg="tf" type="static_transform_publisher" name="map_odom_broadcaster" args="0 0 0 0 0 0 /map /odom 100" />
    <!-- 运行rviz -->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find mrobot_navigation)/rviz/nav.rviz"/>
</launch>

# 1.2运行效果

$ roslaunch mrobot_gazebo mrobot_laser_nav_gazebo.launch
$ roslaunch mrobot_navigation fake_nav_cloister_demo.launch

2021-08-31 10-12-17 的屏幕截图.png

# 1.3避障效果

在Gazebo仿真环境中加入一些障碍物,机器人在运动到障碍物附近时会停止运动并重新规划线路,规划成功后,机器人会绕过障碍物继续向目标点移动

move_base功能包不仅可以实现全局最优路径的规划,同时可以利用本地路径规划避开出现的障碍物

# 二、自主探索SLAM

解决问题:让机器人在避免人为控制的情况下进行自主SLAM过程

思路:将SLAM与导航功能结合在一起,在导航避障的过程中建立环境地图

实现机器人自主探索式SLAM,不再需要人工控制

# 2.1创建launch文件

在原有的gmapping_demo.launch文件基础上加入move_base节点的设置,文件mrobot_navigation/launch/exploring_slam_demo.launch

<launch>
    <include file="$(find mrobot_navigation)/launch/gmapping.launch"/>
    <!-- 运行move_base节点 -->
    <include file="$(find mrobot_navigation)/launch/move_base.launch" />
    <!-- 运行rviz -->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find mrobot_navigation)/rviz/nav.rviz"/>
</launch>

# 2.2通过RViz设置探索目标

启动环境

$ roslaunch mrobot_gazebo mrobot_laser_nav_gazebo.launch
$ roslaunch mrobot_navigation exploring_slam_demo.launch

在RViz环境中手动选择位置,机器人会自动导航至目标位置

如果无法导航至该位置,会出现相应错误提示

2021-08-31 12-03-24 的屏幕截图.png

# 2.3实现自主探索SLAM

以上的实现过程需要不断点击目标位置,引导机器人实现SLAM过程

可以通过代码设置一些关键点,让机器人随机导航,从而实现自主探索SLAM

# 三、解决问题

  • Warning: Invalid argument “/map” passed to canTransform argument target_frame in tf2 frame_ids cannot start with a ‘/’ like: at line 134 in /tmp/binarydeb/ros-melodic-tf2-0.6.5/src/buffer_core.cpp

如果警告将无法再RViz中操纵智能车进行规划

解决办法:

2021-08-31 11-27-54 的屏幕截图.png