4.5.10 自主探索SLAM
导航需要依赖于地图与定位,例如在上一节4.5.9 导航功能集成中,导航实现时就是以launch文件的方式集成了4.4 定位AMCL一节中的定位功能,而机器人SLAM时,也是发布地图数据与定位信息的,所以导航时也可以不借助于amcl而是直接与SLAM结合,达到自主探索的SLAM效果。
1.编写launch文件
在功能包mycar_navigation2的launch目录下新建名为auto_slam.launch.py的launch文件,并输入如下内容:
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
def generate_launch_description():
slam_pkg = get_package_share_directory("mycar_slam_slam_toolbox")
nav2_pkg = get_package_share_directory("mycar_navigation2")
slam_launch = IncludeLaunchDescription(
PythonLaunchDescriptionSource(os.path.join(slam_pkg,'launch',
'online_async_launch.py'))
)
nav2_launch = IncludeLaunchDescription(
PythonLaunchDescriptionSource(os.path.join(nav2_pkg,'launch',
'nav2.launch.py'))
)
ld = LaunchDescription()
ld.add_action(slam_launch)
ld.add_action(nav2_launch)
return ld
2.编译
终端中进入当前工作空间,编译功能包:
colcon build --packages-select mycar_navigation2
3.执行
(1)请先调用如下指令启动仿真环境:
. install/setup.bash
ros2 launch stage_ros2 my_house.launch.py
(2)然后在终端下进入当前工作空间,输入如下指令启动自主SLAM功能:
. install/setup.bash
ros2 launch mycar_navigation2 auto_slam.launch.py
(3)启动rviz2,加载/opt/ros/humble/share/nav2_bringup/rviz下的nav2_default_view.rviz文件,再通过菜单栏的Nav2 Goal设置目标点,机器人就可以自动导航至目标点,并且导航中还会实现建图的功能。