【自动驾驶】ROS运行管理:元功能包、launch文件、param 、rosparam、args

目录

元功能包

不同功能包,打包成一个功能包。

元功能包相当于目录索引,就是虚包,依赖于真正需要按照的包。

例如安装desktop-full时,顺带安装了小乌龟功能包。

实现一个元功能包分为三步:

1.新建一个功能包:

虚包,不需要依赖于roscpp等

bash 复制代码
catkin_create_pkg packmetas 

2.修改xml文件

bash 复制代码
<?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文件修改

不能页空行

bash 复制代码
cmake_minimum_required(VERSION 3.0.2)
project(packmetas)
find_package(catkin REQUIRED)
catkin_metapackage()

编译即可。

launch文件

roslaunch启动节点是并行多进程的,不能保证实际启动的顺序。

bash 复制代码
<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标签用于话题重命名 重新映射话题,使得两个节点使用的话题名称相同,让两个节点能通讯。

bash 复制代码
<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节点下有区别

bash 复制代码
<launch>
    <param name="param_int" pkg="service" type="int" value="3"/>
</launch>

如果定义在node节点下,对应参数为/节点名/参数名,即变量加入了私有的命名空间。

rosparam批量参数操作

向参数服务器设置参数

bash 复制代码
<launch>
    <rosparam command="load" file="$(find package)/launch/params.yaml"/>
</launch>

对应yaml文件:

bash 复制代码
r:100
g:200
b:300

设置到node节点下时,参数名也会带包名的前缀命名空间

导出参数

bash 复制代码
<launch>
    <rosparam command="dump" file="$(find package)/launch/params.yaml"/>
</launch>

rosparam总是在launch文件中最先执行,故要想让其最后执行,要把其单独放在另一个launch文件内,这样人为控制该launch文件最后执行。

删除参数

bash 复制代码
<launch>
    <rosparam command="delete" param="r"/>
</launch>

即删除掉r参数

group分组

启动多个相同节点时进行分组方便管理,分组+命名空间

bash 复制代码
<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++中的宏定义,修改一处就修改多处

bash 复制代码
<launch>
    <arg name="arg1" default="0.55"/>
    <param name="A" value="$(arg arg1)" />
</launch>
相关推荐
Elastic 中国社区官方博客1 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
jwolf22 分钟前
摸一下elasticsearch8的AI能力:语义搜索/vector向量搜索案例
人工智能·搜索引擎
有Li10 分钟前
跨视角差异-依赖网络用于体积医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用
人工智能·计算机视觉
新加坡内哥谈技术31 分钟前
Mistral推出“Le Chat”,对标ChatGPT
人工智能·chatgpt
GOTXX39 分钟前
基于Opencv的图像处理软件
图像处理·人工智能·深度学习·opencv·卷积神经网络
IT古董44 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
CV学术叫叫兽1 小时前
快速图像识别:落叶植物叶片分类
人工智能·分类·数据挖掘
WeeJot嵌入式1 小时前
卷积神经网络:深度学习中的图像识别利器
人工智能
脆皮泡泡2 小时前
Ultiverse 和web3新玩法?AI和GameFi的结合是怎样
人工智能·web3
机器人虎哥2 小时前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习