当前位置:网站首页>ROS 笔记(10)— launch 文件启动
ROS 笔记(10)— launch 文件启动
2022-06-29 14:38:00 【wohu1104】
1. 背景
一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?
官方给出的优化策略是使用 launch 文件(通过 xml 文件实现多节点的配置和启动),可以一次性启动多个 ROS 节点,并且可以自动启动 ROS Master。
2. 实现
2.1 创建功能包
$ catkin_create_pkg launch
Created file launch/package.xml
Created file launch/CMakeLists.txt
Successfully created files in /home/wohu/project/ros/ros_demo/src/launch. Please adjust the values in package.xml.
2.2 添加 launch 文件

launch.yaml 文件内容
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="t1"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
2.3 运行
$ roslaunch launch launch.yaml
... logging to /home/wohu/.ros/log/e021148a-f125-11ec-92ca-00e070ce7d11/roslaunch-wohu-pc-17490.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://wohu-pc:35733/
SUMMARY
========
PARAMETERS
* /rosdistro: melodic
* /rosversion: 1.14.13
NODES
/
key1 (turtlesim/turtle_teleop_key)
t1 (turtlesim/turtlesim_node)
auto-starting new master
process[master]: started with pid [17500]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to e021148a-f125-11ec-92ca-00e070ce7d11
process[rosout-1]: started with pid [17512]
started core service [/rosout]
process[t1-2]: started with pid [17516]
process[key1-3]: started with pid [17520]
3. launch 文件语法

3.1 launch 标签
<launch> 标签是所有 launch 文件的根标签,充当其他标签的容器,所有其它标签都是 launch 的子级。
3.2 node 标签
<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 参数设置
3.3 include 标签

include 标签用于将另一个 xml 格式的 launch 文件导入到当前文件
属性
file=“$(find 包名)/xxx/xxx.launch”
要包含的文件路径
ns=“xxx” (可选)
在指定命名空间导入文件
子级标签
env 环境变量设置
arg 将参数传递给被包含的文件
3.4 remap 标签

用于话题重命名
from=“xxx”
原始话题名称to=“yyy”
目标名称

3.5 param 标签

<param> 标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在 <node> 标签中时,相当于私有命名空间。
属性
name=“命名空间/参数名”
参数名称,可以包含命名空间
value=“xxx” (可选)
定义参数值,如果此处省略,必须指定外部文件作为参数源
type=“str | int | double | bool | yaml” (可选)
指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:
如果包含 ‘.’ 的数字解析未浮点型,否则为整型
“true” 和 “false” 是 bool 值(不区分大小写)
其他是字符串

3.6 rosparam 标签
<rosparam> 标签可以从YAML 文件导入参数,或将参数导出到 YAML 文件,也可以用来删除参数,<rosparam> 标签在 <node> 标签中时被视为私有。
属性
command=“load | dump | delete” (可选,默认 load)
加载、导出或删除参数
file=“$(find xxxxx)/xxx/yyy…”
加载或导出到的 yaml 文件
param=“参数名称”
ns=“命名空间” (可选)
3.7 group 标签
<group> 标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间
属性
ns=“名称空间” (可选)
clear_params=“true | false” (可选)
启动前,是否删除组名称空间的所有参数(慎用…此功能危险)
子级标签
除了launch 标签外的其他标签
3.8 arg 标签

<arg> 标签是用于动态传参,类似于函数的参数,可以增强 launch 文件的灵活性。
属性
name=“参数名称”
default=“默认值” (可选)
value=“数值” (可选)
不可以与 default 并存
doc=“描述”
参数说明
示例:
- launch文件传参语法实现,hello.lcaunch
<launch>
<arg name="xxx" />
<param name="param" value="$(arg xxx)" />
</launch>
- 命令行调用launch传参
roslaunch hello.launch xxx:=值
边栏推荐
- Evaluation index of high concurrency software (website, server interface)
- Underlying implementation principle of five data structures of redis
- 他山之石 | 丁香园 医疗领域图谱的构建与应用
- k8s部署redis哨兵
- 《canvas》之第12章 其他应用
- Stm32 mbed tutorial (IV) --pwm
- Can futures accounts be opened offline? Is it safe to open an account online?
- 我登录RDB的数据库,提示需要主账号授权,这个我怎么知道该找谁?
- CKS CKA CKAD 将终端更改为远程桌面
- Uncover the secret! Pay attention to those machines under the membership system!
猜你喜欢

synchronized 与多线程的哪些关系

【牛客网刷题系列 之 Verilog快速入门】~ 移位运算与乘法
![[practical chapter of correlation analysis] why can't Bi software do correlation analysis](/img/f2/4f99deb63b1beffae90b8a1fb270d1.png)
[practical chapter of correlation analysis] why can't Bi software do correlation analysis

EMC-浪涌防护及退耦设计

The first lesson on cloud - how easy is it to build a small broken station? The old driver of cloud computing will take you one hour to finish it
![[Verilog quick start of Niuke online question series] ~ shift operation and multiplication](/img/ea/457abb2ad0d39ffe4b235576c49a8f.png)
[Verilog quick start of Niuke online question series] ~ shift operation and multiplication

两个字的名字如何变成有空格的3个字符的名字

Chapter 12 other applications of canvas

k8s部署redis哨兵

论文学习——考虑场次降雨年际变化特征的年径流总量控制率准确核算
随机推荐
宜明昂科冲刺港股:年内亏损7.3亿 礼来与阳光人寿是股东
校园跑腿微信小程序跑腿同学带直播新版源码
EXCEL的查询功能Vlookup
Chapter 12 other applications of canvas
Redis installation in windows and Linux Environment
《canvas》之第10章 canvas路径
在平面坐标上画斜线
《canvas》之第5章 文本操作
揭秘!付费会员制下的那些小心机!
June 27 talk SofiE
《canvas》之第12章 其他应用
Using polymorphism to realize simple calculator
word如何自动生成目录
June 27 talk SofiE
Configuration tutorial for swagger2
Campus errands wechat applet errands students with live new source code
卫星运动的微分方程
MySQL 数据库 - 通用语法 DDL DML DQL DCL
熊市慢慢,Bit.Store提供稳定Staking产品助你穿越牛熊
Deploy redis sentry in k8s