# 一、在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
# 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环境中手动选择位置,机器人会自动导航至目标位置
如果无法导航至该位置,会出现相应错误提示
# 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中操纵智能车进行规划
解决办法: