四、ROS运行管理
本章主要为解决多级层深的ROS系统中,关联不同功能包,启动繁多ROS节点,功能包、节点、话题、参数重名以及不同主机之上的节点之间的通信问题;
- 掌握元功能包使用语法;
- 掌握launch文件的使用语法;
- 理解什么是ROS工作空间覆盖,以及存在什么安全隐患;
- 掌握节点名称重名时的处理方式;
- 掌握话题名称重名时的处理方式;
- 掌握参数名称重名时的处理方式;
- 能够实现ROS分布式通信。
1.ROS元功能包
元功能包(metapackage)是Linux的一个文件管理系统的概念。是ROS中的一个虚包,里面没有实质性的内容,但是它依赖了其他的软件包,通过这种方法可以把其他包组合起来 。
作用:
元功能包依赖于ROS中的其他一些功能包,安装该包时会一并安装其他依赖;
实现流程:
- 右键src选择Create Catkin Package;
- 输入功能包名字 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>
- 修改 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程序的启动效率
使用:
以小乌龟为例:
- 新建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>
- 调用launch文件
roslaunch 包名 xxx.launch
**注意:**roslaunch 命令执行launch文件时,会自动判断是否存在roscore,如果没有则调用 roscore;ctrl+shift+~快速启动终端
2.1 launch文件—launch标签
标签是所有 launch 文件根标签,充当其他标签的容器
属性:
deprecated = “弃用声明”
作用:
告知用户当前 launch 文件已经弃用
子集标签:
所有其它标签都是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 秒后启动节点 |
required=“true|false” (可选) | 该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch |
ns=“xxx” (可选) | 在指定命名空间 xxx 中启动节点 |
clear_params=“true|false” (可选) | 在启动前,删除节点的私有空间的所有参数 |
output=“log|screen” (可选) | 日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log |
子集标签:
- env 环境变量设置
- remap 重映射节点名称
- rosparam 参数设置
- param 参数设置