Navigation2学习笔记--总揽nav2_bringup导航包launch文件

news2024/11/26 20:42:40

launch文件是一个包的窗口,通过这个窗口我们可以知道一个软件包能干什么,具体调动了什么节点,需要加载什么参数,下面我们从总体看里面每个launch文件的作用。

环境:utuntu20.04  ros2 foxy  nav2不同版本大同小异。

具体怎么安装nav2参考:入门 — Navigation 2 1.0.0 文档

一 nav2_bringup导航包 launch文件结构

二 所有的launch文件

1 localization_launch.py

2 slam_launch.py

3 navigation_launch.py

4 rviz_launch.py

5 bringup_launch.py              

6 spawn_tb3_launch.py

7 tb3_simulation_launch.py

8 multi_tb3_simulation_launch.py
 

三 每个launch作用

我们按包含关系从简单到复杂说起,lifecycle_manager是一个控制节点启动的,不影响逻辑关系,我们先不考虑。

1 localization_launch.py

启动节点关键代码

        Node(
            package='nav2_map_server',
            executable='map_server',
            name='map_server',
            output='screen',
            parameters=[configured_params],
            remappings=remappings),

        Node(
            package='nav2_amcl',
            executable='amcl',
            name='amcl',
            output='screen',
            parameters=[configured_params],
            remappings=remappings),

executable='map_server',    #地图服务

executable='amcl',               #基于粒子过滤器的定位技术,用于静态地图的定位。

作用:启动地图服务,在地图上给机器人定位。

2 slam_launch.py

启动节点关键代码

    slam_launch_file = os.path.join(slam_toolbox_dir, 'launch', 'online_sync_launch.py')
    start_slam_toolbox_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(slam_launch_file),
        launch_arguments={'use_sim_time': use_sim_time}.items())

    start_map_saver_server_cmd = Node(
            package='nav2_map_server',
            executable='map_saver_server',
            output='screen',
            parameters=[configured_params])

start_slam_toolbox_cmd一级套娃,启动了online_sync_launch.py

online_sync_launch.py关键代码

 start_sync_slam_toolbox_node = Node(
        parameters=[
          actual_params_file,
          {'use_sim_time': use_sim_time}
        ],
        package='slam_toolbox',
        executable='sync_slam_toolbox_node',
        name='slam_toolbox',
        output='screen')

executable='sync_slam_toolbox_node',   #启动了slam工具箱同步定位建图

executable='map_saver_server',     #启动了地图储存服务节点

作用:slam同步定位建图,储存地图。

3 navigation_launch.py

启动节点关键代码

        Node(
            package='nav2_controller',
            executable='controller_server',
            output='screen',
            parameters=[configured_params],
            remappings=remappings),

        Node(
            package='nav2_planner',
            executable='planner_server',
            name='planner_server',
            output='screen',
            parameters=[configured_params],
            remappings=remappings),

        Node(
            package='nav2_recoveries',
            executable='recoveries_server',
            name='recoveries_server',
            output='screen',
            parameters=[configured_params],
            remappings=remappings),

        Node(
            package='nav2_bt_navigator',
            executable='bt_navigator',
            name='bt_navigator',
            output='screen',
            parameters=[configured_params],
            remappings=remappings),

        Node(
            package='nav2_waypoint_follower',
            executable='waypoint_follower',
            name='waypoint_follower',
            output='screen',
            parameters=[configured_params],
            remappings=remappings),

executable='controller_server',     #启动机器人控制器

executable='planner_server',        #启动机器人规划器

executable='recoveries_server',   #启动机器人恢复服务器

executable='bt_navigator',            #启动行为树

executable='waypoint_follower',   #启动路点跟随

作用:启动导航核心节点,行为树 规划器 控制器 恢复器 路点跟随

4 rviz_launch.py

启动节点关键代码

start_rviz_cmd = Node(
        condition=UnlessCondition(use_namespace),
        package='rviz2',
        executable='rviz2',
        name='rviz2',
        arguments=['-d', rviz_config_file],
        output='screen')

executable='rviz2',

作用:启动rviz2可视化机器人及导航

5 bringup_launch.py

启动节点关键代码

        IncludeLaunchDescription(
            PythonLaunchDescriptionSource(os.path.join(launch_dir, 'slam_launch.py')),
            condition=IfCondition(slam),
            launch_arguments={'namespace': namespace,
                              'use_sim_time': use_sim_time,
                              'autostart': autostart,
                              'params_file': params_file}.items()),

        IncludeLaunchDescription(
            PythonLaunchDescriptionSource(os.path.join(launch_dir,
                                                       'localization_launch.py')),
            condition=IfCondition(PythonExpression(['not ', slam])),
            launch_arguments={'namespace': namespace,
                              'map': map_yaml_file,
                              'use_sim_time': use_sim_time,
                              'autostart': autostart,
                              'params_file': params_file,
                              'use_lifecycle_mgr': 'false'}.items()),

        IncludeLaunchDescription(
            PythonLaunchDescriptionSource(os.path.join(launch_dir, 'navigation_launch.py')),
            launch_arguments={'namespace': namespace,
                              'use_sim_time': use_sim_time,
                              'autostart': autostart,
                              'params_file': params_file,
                              'default_bt_xml_filename': default_bt_xml_filename,
                              'use_lifecycle_mgr': 'false',
                              'map_subscribe_transient_local': 'true'}.items()),

通过条件选择condition=IfCondition(slam),二选一启动:

slam_launch.py

localization_launch.py

'slam',default_value='False  所以默认启动 localization_launch.py

启动 navigation_launch.py

作用:这是一个通过launch文件套娃集齐了nav2导航需要的所有节点,按默认设置启动地图服务,在地图上给机器人定位,启动导航行为树 规划器 控制器 恢复器 路点跟随。

如果没有实体机器人,开启gazebo仿真机器人+bringup_launch.py+rviz_launch.py

如果有实体机器人,启动机器人底盘程序+bringup_launch.py+rviz_launch.py  nav2导航服务全部节点就都集齐了,可以开始自由导航了。

如果想同时建图并导航只需给launch文件加参数,启动 bringup_launch.py slam:=True 这时在陌生环境不需要提供地图,程序会一边建图,一边导航。

注意仿真机器人所有节点 use_sim_time=true (启用仿真时间),实体机器人所有节点use_sim_time=false (不启用仿真时间),时间设置错了会出现莫名其妙的问题。

6 spawn_tb3_launch.py

启动节点关键代码

            package='nav2_gazebo_spawner',
            executable='nav2_gazebo_spawner',
            output='screen',
            arguments=[
                '--robot_name', launch.substitutions.LaunchConfiguration('robot_name'),
                '--robot_namespace', launch.substitutions.LaunchConfiguration('robot_name'),
                '--turtlebot_type', launch.substitutions.LaunchConfiguration('turtlebot_type'),
                '-x', launch.substitutions.LaunchConfiguration('x_pose'),
                '-y', launch.substitutions.LaunchConfiguration('y_pose'),
                '-z', launch.substitutions.LaunchConfiguration('z_pose')]),

executable='nav2_gazebo_spawner',   

作用:启动gazebo产卵节点,在gazebo规定位置生成机器人

7 tb3_simulation_launch.py

启动节点关键代码

     start_gazebo_server_cmd = ExecuteProcess(
        condition=IfCondition(use_simulator),
        cmd=['gzserver', '-s', 'libgazebo_ros_init.so', world],
        cwd=[launch_dir], output='screen')

    start_gazebo_client_cmd = ExecuteProcess(
        condition=IfCondition(PythonExpression([use_simulator, ' and not ', headless])),
        cmd=['gzclient'],
        cwd=[launch_dir], output='screen')

   
   
    start_robot_state_publisher_cmd = Node(
        condition=IfCondition(use_robot_state_pub),
        package='robot_state_publisher',
        executable='robot_state_publisher',
        name='robot_state_publisher',
        namespace=namespace,
        output='screen',
        parameters=[{'use_sim_time': use_sim_time}],
        remappings=remappings,
        arguments=[urdf])

    rviz_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(os.path.join(launch_dir, 'rviz_launch.py')),
        condition=IfCondition(use_rviz),
        launch_arguments={'namespace': '',
                          'use_namespace': 'False',
                          'rviz_config': rviz_config_file}.items())

    bringup_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(os.path.join(launch_dir, 'bringup_launch.py')),
        launch_arguments={'namespace': namespace,
                          'use_namespace': use_namespace,
                          'slam': slam,
                          'map': map_yaml_file,
                          'use_sim_time': use_sim_time,
                          'params_file': params_file,
                          'default_bt_xml_filename': default_bt_xml_filename,
                          'autostart': autostart}.items())

 start_gazebo_server_cmd     #启动gazebo服务端,加载ros插件

start_gazebo_client_cmd        #启动gazebo客户端

executable='robot_state_publisher',  #启动机器人模型

PythonLaunchDescriptionSource(os.path.join(launch_dir, 'rviz_launch.py')),  #启动rviz2显示机器人

PythonLaunchDescriptionSource(os.path.join(launch_dir, 'bringup_launch.py')), #启动导航

作用:生成gazebo仿真机器人,启动导航服务,rviz显示机器人导航

7 multi_tb3_simulation_launch.py

作用:这个我也没有仔细研究,总体来说是在gazebo仿真环境生成多个机器人并导航。

 参考:Nav2 — Navigation 2 1.0.0 文档

 我也是在学习阶段,写的不一定都对,欢迎朋友们留言讨论,共同进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/969392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

keil 编译stm32,编译信息释义

文章目录 上图中: Code:表示代码大小,占用 279420 字节。 RO-Data:表示只读数据所占的空间大小,一般是指 const 修饰的数据大小。 RW-Data:表示有初值(且非 0)的可读写数据所占的空…

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤 本教程详细介绍了如何在Ubuntu操作系统上安装CUDA(NVIDIA的并行计算平台)和cuDNN(深度神经网络库),以及如何验证安装是否成功。通过按照这些步骤操作,您将能够…

git企业级使用

1.初始Git 1.1创建Git仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。创建⼀个Git本地仓库对应的命令为 git init ,注意命令要在⽂件⽬录下执⾏,例如:…

Elasticsearch、Kibana以及Java操作ES 的快速使用

docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…

sqli-labs复现

sqli-labs第一关复现 环境搭建下载phpstudy下载sqli-labs浏览器加载 第一关复现 环境搭建 下载phpstudy phpstudy是一个可以快速帮助我们搭建web服务器环境的软件 官网:https://www.xp.cn/ 这里我选择的是windows 64bit 客户端版本,安装路径为C:\php…

docker 安装xxljob

1. 安装mysql镜像 2.初始化xxljob的数据库和表 一、初始化db:https://codechina.csdn.net/mirrors/xuxueli/xxl-job/-/blob/2.3.1/doc/db/tables_xxl_job.sql 对脚本进行修改,添加ROW_FORMATDYNAMIC 安装xxljob 镜像 docker pull xuxueli/xxl-job-admin:2.3.1 …

networkX-02-基础指标

文章目录 1.度1.1 度1.2 入度1.3 出度1.4 加权度1.5 邻居节点1.5.1 邻居节点计算1.5.2 出度邻居节点1.5.3 入度邻居节点 2.节点数、边数3.最短路径3.1 最短路径(不带权重)3.2 最短路径(带权重) 4.计算图中所有的最短路径 教程仓库地址:github networkx_tutorial imp…

肖sir__设计测试用例方法之等价类02_(黑盒测试)

设计测试用例方法之等价类02_(黑盒测试) 一、掌握常用的设计方法: 黑盒测试方法:等价类、边界值,状态迁移法、场景法、判定表、因果图、正交表,(7种) 经验测试方法:错误推测法、异常…

file.raw和file在formdata中上传时遇到的坑!!

首先是这样,我在写一个表单上传页面的时候,结合elementeplus遇到了需要上传图片文件和视频文件的情况,一顿上网猛搜,经过一二十篇博客浏览下来,找到了三四篇可以参考,但是对于到底是上传file还是file.raw说…

通过ref 操作dom , 点击按钮后跳转到页面指定图片位置

滚动图片到视图 定义了一个名为 scrollToIndex 的函数,它接受一个参数 index。当按钮被点击时,这个函数会被调用,并根据传入的 index 值来滚动到对应的图片。 以 alt 来标记图片位置 alt“Tom” import { useRef } from "react";c…

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

JDK8安装及系统变量配置(包含错误处理)

jdk安装 一.下载JDK二.安装三.配置系统变量四.可能遇到的问题1.显示已经安装的问题 或者 读取注册表项值失败2.原因3.解决 五.验证安装成功 一.下载JDK JDK下载官网 二.安装 双击之后,一直下一步就ok 三.配置系统变量 1.找到配置系统变量的地方 2.配置系统变…

[E2E Test] Python Behave Selenium 一文学会自动化测试

前言 本文将使用Python Behave与Selenium,和同学们一起认识自动化测试,并附上完整的实践教程。 项目源码已上传:CSDN 郭麻花 Azure Repo python-behave-selenium 核心概念 1. 什么是E2E Test E2E即End-to-end,意思是从头到尾…

Linux执行命令

命令格式 主命令 选项 参数(操作对象)例如: 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令(builtin):shell程序自带的命令。 外部命令:有独立…

tensorRT从零起步高性能部署:课程总结

目录 前言1. cuda驱动API2. cuda运行时API3. tensorRT基础4. tensorRT高级5. tensorRT封装6. 自动驾驶案例项目总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍&…

1、Flutter移动端App实战教程【环境配置】

一、概述 Flutter是Google用以帮助开发者在IOS和Android 两个平台开发高质量原生UI的移动SDK,一份代码可以同时生成IOS和Android两个高性能、高保真的应用程序。 二、渲染机制 之所以说Flutter能够达到可以媲美甚至超越原生的体验,主要在于其拥有高性…

自然语言处理:提取长文本进行文本主要内容(文本意思)概括 (两种方法,但效果都一般)

本文主要针对长文本进行文本提取和中心思想概括&#xff0c;原文档放在了附件里面&#xff1a;<科大讯飞公告> -----------------------------------方法一&#xff1a;jieba分词提取文本&#xff08;句子赋分法&#xff09;------------------------- 1、首先导入相关…

docker笔记7:Docker微服务实战

1.通过IDEA新建一个普通微服务模块 建Module docker_boot 改POM <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

【聚类】K-Means聚类

cluster&#xff1a;簇 原理&#xff1a; 这边暂时没有时间具体介绍kmeans聚类的原理。简单来说&#xff0c;就是首先初始化k个簇心&#xff1b;然后计算所有点到簇心的欧式距离&#xff0c;对一个点来说&#xff0c;距离最短就属于那个簇&#xff1b;然后更新不同簇的簇心&a…

nginx中模块的设置以及反向代理

nginx设置 nginx http 模块的配置文件位于 "/apps/nginx/conf/nginx.conf"&#xff08;以自己安装时选择的目录为准&#xff0c;若使用yum安装&#xff0c;则在 /etc/nginx/nginx.conf&#xff09;。在该文件中&#xff0c;需要定义一些常见的配置项&#xff0c;包括…