ROS系列:第四章(三)

本文聚焦ROS运行管理,介绍元功能包使用语法,可组合其他包;阐述launch文件用法,能简化节点启动;分析工作空间覆盖问题及解决办法;还讲解节点名称重复时,通过rosrun、launch文件、C++编码设置命名空间与重映射来解决的方法。

四、ROS运行管理

本章主要为解决多级层深的ROS系统中,关联不同功能包,启动繁多ROS节点,功能包、节点、话题、参数重名以及不同主机之上的节点之间的通信问题;

  • 掌握元功能包使用语法;
  • 掌握launch文件的使用语法;
  • 理解什么是ROS工作空间覆盖,以及存在什么安全隐患;
  • 掌握节点名称重名时的处理方式;
  • 掌握话题名称重名时的处理方式;
  • 掌握参数名称重名时的处理方式;
  • 能够实现ROS分布式通信。

1.ROS元功能包

元功能包(metapackage)是Linux的一个文件管理系统的概念。是ROS中的一个虚包,里面没有实质性的内容,但是它依赖了其他的软件包,通过这种方法可以把其他包组合起来 。

作用:

元功能包依赖于ROS中的其他一些功能包,安装该包时会一并安装其他依赖;

实现流程:

  1. 右键src选择Create Catkin Package;
  2. 输入功能包名字 plumbing_my,添加功能包依赖处无所依赖的功能包,直接回车后在package.xml中添加依赖包:

<exec_depend>plumbing_pub_sub</exec_depend>
<exec_depend>plumbing_server_client</exec_depend>
<exec_depend>plumbing_param_server</exec_depend>

​ 添加元功能包请求:

<export>
 <!-- Other tools can request additional information be placed here -->
 <metapackage/>
</export>
  1. 修改 CMakeLists.txt,内容如下:

    cmake_minimum_required(VERSION 3.0.2)
    project(demo)
    find_package(catkin REQUIRED)
    catkin_metapackage()
    

    注意:该 CMakeLists.txt 中最后一行不可以有换行,保证只有四行代码 ,其中第二行是功能包的名字。

    编译运行即可;

2.ROS节点运行管理launch文件

launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数;
作用:

简化节点的配置与启动,提高ROS程序的启动效率

使用:
以小乌龟为例:

  1. 新建launch文件
    在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件:
<launch>
    <node pkg="turtlesim" type="turtlesim_node"     name="myTurtle" output="screen" />
    <node pkg="turtlesim" type="turtle_teleop_key"  name="myTurtleContro" output="screen" />
</launch>
  1. 调用launch文件
roslaunch 包名 xxx.launch

**注意:**roslaunch 命令执行launch文件时,会自动判断是否存在roscore,如果没有则调用 roscore;ctrl+shift+~快速启动终端

2.1 launch文件—launch标签

标签是所有 launch 文件根标签,充当其他标签的容器

属性:

deprecated = “弃用声明”

作用:

告知用户当前 launch 文件已经弃用 ,不会运行

子集标签:

所有其它标签都是launch的子级

代码示例:

<launch deprecated = "当前版本已经过时,请停止使用!">
    <node pkg="turtlesim" type="turtlesim_node"     name="myTurtle" output="screen" />
    <node pkg="turtlesim" type="turtle_teleop_key"  name="myTurtleContro" output="screen" />
</launch>

2.2 launch文件—node标签

标签用于指定 ROS 节点,是最常见的标签,需要注意的是: roslaunch 命令不能保证按照 node 的声明顺序来启动节点(节点的启动是多进程的)

属性:

属性 功能
pkg=“包名” 节点所属的包
type=“nodeType” 节点类型(与之相同名称的可执行文件)
name=“nodeName” 节点名称(在 ROS 网络拓扑中节点的名称)
args=“xxx xxx xxx” (可选) 将参数传递给节点
machine=“机器名” 在指定机器上启动节点
respawn=“true|false” (可选) 如果节点退出,是否自动重启
respawn_delay=" N" (可选) 如果 respawn 为 true, 那么延迟 N 秒后启动节点
require
### ROS 2 第四章 Launch 文件使用教程 #### 创建并配置Launch文件 为了创建和运行一个ROS 2的launch文件,首先需要建立一个新的包来容纳这些launch脚本。对于名为`my_turtle_launch`的新包来说,可以通过命令行工具执行如下操作[^2]: ```bash ros2 pkg create my_turtle_launch --build-type ament_python ``` 这会自动生成必要的目录结构和支持Python构建系统的文件。 #### 编写简单的Launch Python脚本 在上述创建好的软件包内编写`.py`扩展名的启动脚本,比如`simple_turtlesim.launch.py`。此脚本可以用来启动`turtlesim_node`节点以及任何其他想要一起初始化的服务或动作服务器等组件[^1]: ```python from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='turtlesim', executable='turtlesim_node', name='sim' ), # 可以继续添加更多Node实例... ]) ``` 这段代码定义了一个包含两个主要部分的对象——一个是描述整个发射过程的`LaunchDescription`对象;另一个是由多个`Node`组成的列表,每个代表要启动的一个进程。 #### 执行Launch文件 一旦完成了launch文件的编辑工作,则可通过CLI轻松调用它来进行一系列复杂任务的同时激活: ```bash ros2 launch learning_launch simple_turtlesim.launch.py ``` 这条指令将会读取指定路径下的Python模块,并按照其中编写的逻辑顺序依次加载各个节点和服务。 #### 参数传递给Launch文件 除了基本的功能外,在实际应用中可能还需要动态调整某些设置项而不必每次都修改源码本身。这时就可以利用命令行参数的方式向launch文件传入额外的信息,例如开启IMU传感器数据发布功能[^5]: ```bash roslaunch base_control base_control.launch pub_imu:=true ``` 需要注意的是这里的语法适用于旧版本ROS环境(`roslaunch`),而在最新的ROS 2环境中应当采用对应的`ros2 launch ...`形式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会是要长脑子了吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值