元功能包
不同功能包,打包成一个功能包。
元功能包相当于目录索引,就是虚包,依赖于真正需要按照的包。
例如安装desktop-full时,顺带安装了小乌龟功能包。
实现一个元功能包分为三步:
1.新建一个功能包:
虚包,不需要依赖于roscpp等
catkin_create_pkg packmetas
2.修改xml文件
<?xml version="1.0"?>
<package format="2">
<name>packmetas</name>
<version>0.0.0</version>
<description>The packmetas package</description>
<maintainer email="root@todo.todo">root</maintainer>
<license>TODO</license>
<buildtool_depend>catkin</buildtool_depend>
<!-- 添加需要依赖的包 -->
<exec_depend>publisher</exec_depend>
<exec_depend>service</exec_depend>
<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- 新增元功能包描述 -->
<metapackage />
</export>
</package>
3.cmakelist文件修改
不能页空行
cmake_minimum_required(VERSION 3.0.2)
project(packmetas)
find_package(catkin REQUIRED)
catkin_metapackage()
编译即可。
launch文件
roslaunch启动节点是并行多进程的,不能保证实际启动的顺序。
<launch>
<node name="myservice" pkg="service" type="service_node" output="screen" respawn="true"/>
</launch>
配置文件
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 中启动节点,为节点名称设置前缀如/hello/jiedian
clear_params=“true | false” (可选)
在启动前,删除节点的私有空间的所有参数
output=“log | screen” (可选)
日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log
使用include功能复用launch
## remap标签用于话题重命名 重新映射话题,使得两个节点使用的话题名称相同,让两个节点能通讯。<launch>
<node name="myservice" pkg="service" type="service_node" output="screen" respawn="true">
<remap from="/turtel/a" to="/turtel/a">
</node>
</launch>
param
name=“命名空间/参数名”
参数名称,可以包含命名空间
value=“xxx” (可选)
定义参数值,如果此处省略,必须指定外部文件作为参数源
type=“str | int | double | bool | yaml” (可选)
指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:
如果包含 ‘.’ 的数字解析未浮点型,否则为整型
“true” 和 “false” 是 bool 值(不区分大小写)
其他是字符串
主要用于向参数服务器设置参数:这个参数放在launch下和放在node节点下有区别
<launch>
<param name="param_int" pkg="service" type="int" value="3"/>
</launch>
如果定义在node节点下,对应参数为/节点名/参数名,即变量加入了私有的命名空间。
rosparam批量参数操作
向参数服务器设置参数
<launch>
<rosparam command="load" file="$(find package)/launch/params.yaml"/>
</launch>
对应yaml文件:
r:100
g:200
b:300
设置到node节点下时,参数名也会带包名的前缀命名空间
导出参数
<launch>
<rosparam command="dump" file="$(find package)/launch/params.yaml"/>
</launch>
rosparam总是在launch文件中最先执行,故要想让其最后执行,要把其单独放在另一个launch文件内,这样人为控制该launch文件最后执行。
删除参数
<launch>
<rosparam command="delete" param="r"/>
</launch>
即删除掉r参数
group分组
启动多个相同节点时进行分组方便管理,分组+命名空间
<launch>
<group ns="first">
<node name="myservice" pkg="service" type="service_node" output="screen" respawn="true" />
</group >
<group ns="second">
<node name="myservice" pkg="service" type="service_node" output="screen" respawn="true" />
</group >
</launch>
此时用rosnode list 发现节点名称前加了前缀,避免了重名问题
args
相当于c++中的宏定义,修改一处就修改多处
<launch>
<arg name="arg1" default="0.55"/>
<param name="A" value="$(arg arg1)" />
</launch>
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 【自动驾驶】ROS运行管理:元功能包、launch文件、param 、rosparam、args
发表评论 取消回复