ROS运行管理
主要问题:
- 关联多个不同的功能包(package)
- 相关的ROS节点如何同时启动
- 功能包、节点、话题、参数等重名
- 不同主机上的节点如何进行通信
ROS元功能包(metapackage)
将多个功能包可以打包成一个元功能包
概念及作用
metapackage在ROS中是一个虚包,没有实质性的内容,但是依赖了其他的功能包,通过这种方式将其他的包组合起来
作用:只需要一个matapackage包就可以把其他相关包一同安装完成
实现(package.xml)
1、新建package.xml
2、添加可执行依赖
<!--声明元功能包依赖于哪些包-->
<exec_depend>pacakage_1</exec_depend>
<exec_depend>pacakage_2</exec_depend>
<exec_depend>pacakage_3</exec_depend>
<!---->
<export>
<!--不需要实现-->
<metapackage />
</export>
3、修改CMakeList.txt
!!! 不要有空行,四行连到一起,删掉注释
cmake_minimum_required(VERSION 3.0.2)
project(元功能包的包名)
fing_package(catkin REQUIRED)
catkin_metapackage()
ROS节点运行管理(launch文件)
launch文件是xml
格式的文件,主要用于同时启动多个节点,以及在参数服务器中设置参数,简化节点的配置与启动,提高ROS程序的启动效率
注:roslaunch命令无法保证按顺序启动节点(多进程启动)
实现
<!--在控制台输出log:warning:此文件已过时,不建议使用-->
<launch deprecated="此文件已过时,不建议使用">
<!--对节点进行分组,让节点归属与某个命名空间-->
<group ns="" clear_params="true|false (optional) 慎用!"/>
<!--启动的节点-->
<node pkg="功能包名" type="可执行文件名" name="节点名" output="screen | log(default)" />
<!--args标签的作用与 rosrun pacakege_name node_name argv1 argv2相同-->
<node pkg="功能包名" type="可执行文件名" name="节点名" args="argv1 argv2"/>
<!--将另一个xml格式的launch文件导入到当前文件-->
<!--使用场景:需要重复启动其他launch文件-->
<include file="$(find 包名)/path/to/launch/.launch"/>
<node pkg="功能包名" type="可执行文件名" name="节点名" output="screen">
<!--将一个功能包中的话题修改为另一个话题-->
<remap from="原话题" to="要修改成为的话题"/>
</node>
<!--在参数服务器上设置参数-->
<!--1、在node标签前设置参数,参数为:/参数名-->
<param name="命名空间/参数名" value="" type="str|int|double|bool|yaml"/>
<node pkg="功能包名" type="可执行文件名" name="节点名" output="screen"/>
<!--2、单独设置,在node标签内部-->
<node pkg="功能包名" type="可执行文件名" name="节点名" output="screen">
<!--参数为:/节点名/参数名-->
<param name="" type="" value=""/>
</node>
<!--从yaml文件中导入或导出参数,使用与param类似,可以在node前,或node中-->
<rosparam command="load(default)|dump|delete" file="$(find 包名)/path /to/yaml/.yaml"/>
<!--动态参数传递-->
<arg name="参数名" default="默认值" value="设定值(与default不共存)" doc="参数描述"/>
<arg name="car_length" default="0.5" />
<param name="A" value="${arg car_length}"/>
<param name="B" value="${arg car_length}"/>
<param name="C" value="${arg car_length}"/>
<!--动态参数传递: roslaunch 包名 .launch car_length:=设定值 -->
</launch>
调用
roslaunch 功能包名 文件名.launch