当前位置:   article > 正文

【ROS2+slamtoolbox+nav2】实时地图构建和导航_rviz实时建图和导航

rviz实时建图和导航

本文主要用于记录学习slam建图与navigation2导航的过程,区别于之前学习的在已知地图中导航,此文记录的是在未知地图中导航。
学习资源主要是小鱼的ros2教程和navigation2教程,为避免复制粘贴影响认知,部分代码中变量名称等做了改动。
小鱼ros2
navigation2

一、实验环境

Ubuntu22(虚拟机)
ros2 humble
navigation2
slam-toolbox

二、必要软件的安装

过程中缺少的服务大都可以以该命令安装
sudo apt install ros-humble-xxx
humble是ros2版本
xxx是缺少的软件服务

三、代码结构

colcon工作空间
在这里插入图片描述

botmine_description目录
该目录主要存放自己的机器人urdf,gazebo和rviz启动文件等
在这里插入图片描述

botmine_description/launch/gazebo.launch.py

import os
from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
from ament_index_python.packages import get_package_share_directory


def generate_launch_description():
    robot_name_in_model = 'minebot'
    package_name = 'botmine_description'
    urdf_name = "minebot_gazebo.urdf"

    ld = LaunchDescription()
    pkg_share = FindPackageShare(package=package_name).find(package_name) 
    urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
    gazebo_world_path = os.path.join(pkg_share, 'world/box.world')

    # Start Gazebo server
    start_gazebo_cmd = ExecuteProcess(
        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', gazebo_world_path],
        output='screen')
        
    # Launch the robot
    spawn_entity_cmd = Node(
        package='gazebo_ros', 
        executable='spawn_entity.py',
        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')
	
    # Start Robot State publisher
    start_robot_state_publisher_cmd = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        arguments=[urdf_model_path]
    )

    # Launch RViz
    nav2_bringup_dir = get_package_share_directory('nav2_bringup')
    default_rviz_config_path = os.path.join(nav2_bringup_dir,'rviz','nav2_default_view.rviz')
    start_rviz_cmd = Node(
        package='rviz2',
        executable='rviz2',
        name='rviz2',
        output='screen',
        arguments=['-d', default_rviz_config_path]
        )

    ld.add_action(start_gazebo_cmd)
    ld.add_action(spawn_entity_cmd)
    ld.add_action(start_robot_state_publisher_cmd)
    ld.add_action(start_rviz_cmd)

    return ld
  • 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

nav2bot_bringup

该目录是 navigation2官方源码 下的启动文件目录,可以理解为官方给的使用示例

四、建图导航

启动之前的colcon build编译步骤不再赘述,注意修改启动文件也要重新编译


第一个启动项
ros2 launch botmine_description gazebo.launch.py
第一个启动项启动了gazebo和rviz,可能会遇到一些报错
在这里插入图片描述
仔细观察其实只有gazebo报错,而且这个报错不影响我们的实验,至于rviz的info日志只要不影响使用不必管它。gazebo启动较慢稍等一会儿就好,rviz刚启动是空的很正常。


第二个启动项
ros2 launch nav2_bringup navigation_launch.py
可能也会大量刷一些日志,但只要不是error就不必管它。


第三个启动项
ros2 launch slam_toolbox online_async_launch.py


三个启动项都起来后再看rviz就有东西出现了,(在已知地图中导航时需要给机器人一个初始位置,但在未知地图中导航过程中给机器人初始位置好像并没有很大必要)直接点击Nav2 Goal按钮,在图中选择目标点和目标姿态即可,机器人就会一边扫描建图一边移动到目标点
在这里插入图片描述
在这里插入图片描述
左下角给出的是导航的状态,通过feedback可以判断导航是否完成,active是正在导航中,reached是导航完成。至于Loaclization为什么是未激活状态,我也不清楚…知道的小伙伴可以说下。

五、地图保存

ros2 run nav2_map_server map_saver_cli -f ~/map
  • 1

-f后面的内容可以自定义,即保存路径和文件名称,这里保存到用户目录下,文件名map,到用户目录下查看可以看到生成了两个新的文件map.pgmmap.yaml

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

闽ICP备14008679号