ROS节点管理 launch 文件
时间:2021-08-20
本文章向大家介绍ROS节点管理 launch 文件,主要包括ROS节点管理 launch 文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
第四章 ROS运行管理
4.1 ROS节点管理 launch 文件
之前的文章中我们已经介绍过了 launch 文件的基本使用方法,本节的内容为 launch 的进阶使用方法
4.1.1 launch 文件的标签表
标签名 | 标签作用 |
---|---|
launch | <launch> 标签是所有 launch 文件的根标签,充当其他标签的容器 |
属性 | 属性说明 |
deprecated |
"弃用声明",继续使用会输出警告日志所有其它标签 |
子集标签 | |
其他标签都是都是launch的子级 | |
--- | |
标签名 | 标签作用 |
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,但常用 screen |
子集标签 | |
env 环境变量设置 | |
remap 重映射节点名称 | |
rosparam 参数设置 | |
param 参数设置 | |
--- | |
标签名 | 标签作用 |
include |
include标签用于将另一个 xml 格式的 launch 文件导入到当前文件 |
属性 | 属性说明 |
file="$(find 包名)/xxx/xxx.launch" |
要包含的文件路径 |
ns="xxx" (可选) |
在指定命名空间导入文件 |
子集标签 | |
env 环境变量设置 | |
arg 将参数传递给被包含的文件 | |
--- | |
标签名 | 标签作用 |
remap |
用于话题重命名 |
属性 | 属性说明 |
from="xxx" |
原始话题名称 |
to="yyy" | 目标名称 |
子级标签 | |
无 | |
--- | |
标签名 | 标签作用 |
param |
<param> 标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在<node> 标签中时,相当于私有命名空间。 |
属性 | 属性说明 |
name="命名空间/参数名" |
参数名称,可以包含命名空间 |
value="xxx" (可选) |
定义参数值,如果此处省略,必须指定外部文件作为参数源 |
type="str | int | double | bool | yaml" (可选) |
指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:1. 如果包含 '.' 的数字解析未浮点型,否则为整型。2."true" 和 "false" 是 bool 值(不区分大小写)。3.其他是字符串 |
子级标签 | |
无 | |
--- | |
标签名 | 标签作用 |
rosparam |
<rosparam> 标签可以从 YAML 文件导入参数,或将参数导出到 YAML 文件,也可以用来删除参数,<rosparam> 标签在<node> 标签中时被视为私有。 |
属性 | 属性说明 |
command="load | dump | delete" (可选,默认 load) |
加载、导出或删除参数 |
file="$(find xxxxx)/xxx/yyy...." |
加载或导出到的 yaml 文件 |
param="参数名称" |
如字面意思 |
ns="命名空间" (可选) |
与之前相同 |
子级标签 | |
无 | |
--- | |
标签名 | 标签作用 |
group |
<group> 标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间 |
属性 | 属性说明 |
ns="名称空间" (可选) |
- |
clear_params="true | false" (可选) |
启动前,是否删除组名称空间的所有参数(慎用....此功能危险) |
子级标签 | |
无 | |
--- | |
标签名 | 标签作用 |
arg | <arg> 标签是用于动态传参,类似于函数的参数,可以增强launch文件的灵活性 |
属性 | 属性说明 |
name="参数名称" |
- |
default="默认值" (可选) |
- |
value="数值" (可选) |
不可以与 default 并存 |
doc="描述" |
参数说明 |
子级标签 | |
无 |
4.1.2 一些例子
例1:
<!--launch deprecated= "out of date"-->
<launch>
<!-- 启动的节点-->
<!-- respawn= "true" 节点关闭后自动重启-->
<!-- <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" respawn="true"/> -->
<!-- required="true" 节点推出后关闭整个系统 -->
<!-- <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" required="true"/> -->
<!-- ns="NS" 设置节点的命名空间 -->
<!-- <node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen" ns="NS"/> -->
<!-- param 使用:向参数服务器设置参赛-->
<!-- 格式1: launch 下, node 外-->
<param name="param_A" type="int" value="100"/>
<!-- rosparam 使用: 操作参数服务器数据-->
<!-- 格式1: launch 下, node 外-->
<!-- 加载参数-->
<rosparam command="load" file="$(find launch01_basic)/launch/params.yaml"/>
<!-- 导出参数-->
<!-- <rosparam command="dump" file="$(find launch01_basic)/launch/params_out.yaml"/> -->
<node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen">
<!-- 格式2: launch 下, node 内-->
<param name="param_B" type="double" value="3.14"/>
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
<!-- 格式2: launch 下, node 外-->
<rosparam command="load" file="$(find launch01_basic)/launch/params.yaml"/>
</node>
<!-- 键盘控制节点 -->
<node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
</launch>
例2:
<!-- 需要复用 start_turtle.launch -->
<launch>
<include file="$(find launch01_basic)/launch/start_turtle.launch" />
<!-- 启动其他自己需要的节点-->
</launch>
例2:
<launch>
<rosparam command="dump" file="$(find launch01_basic)/launch/params_out.yaml"/>
<!-- 删除参数-->
<rosparam command="delete" param="bg_B"/>
</launch>
例3:
<launch>
<!-- 启动两对乌龟gui 与 键盘控制节点-->
<group ns="A" >
<node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
</group>
<group ns="B" >
<node pkg="turtlesim" type="turtlesim_node" name="my_turtle" output="screen"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="my_key" output="screen" />
</group>
</launch>
例4:
<launch>
<!-- 需求: 演示 arg 的使用,需要设置多个参数,这县参数使用的是同一个指(小车的长度),怎么设置?-->
<!-- <param name="A" value="0.5"/>
<param name="B" value="0.5"/>
<param name="C" value="0.5"/> -->
<arg name="car_width" dafault="0.32"/>
<param name="A" value="$(arg car_width)"/>
<param name="B" value="$(arg car_width)"/>
<param name="V" value="$(arg car_width)"/>
</launch>
原文地址:https://www.cnblogs.com/Alexbeast-CN/p/15166915.html
- VUE 入门基础(6)
- 五年换4高管,6000员工裁95%剩300人,王健林为何抛弃万达网科?
- Android Permission中英对照
- 你知道人脸识别技术是如何实现的吗?
- WordPress REST API 定制化输出
- ASP.NET MVC的Action Filter
- Android LayoutInflater详解
- 在Android中实现service动态更新UI界面
- VUE 入门基础(5)
- Android的UI设计与后台线程交互
- 更强悍的Silverlight: WCF RIA Services
- Java究竟该怎么学?文末有彩蛋!
- python-IDLE清屏和标记行数,其他推荐
- 从0到1:PostCSS 插件开发最佳实践
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- redis实战第七篇 使用redis工具(redis-cli)搭建redis cluster
- 使用ROS2机器人操作系统进行多机器人编程技术实践(Multi-Robot Programming Via ROS2 )
- 自动化运维实践 | Ansible playbook重用
- 手把手教你打造高效的 Kubernetes 命令行终端
- docker save load export import的区别
- 使用ABAC控制数据访问
- linux 压力测试工具之ab
- 什么是Python Wheels?为什么要关心它?
- Nginx fastcgi_cache权威指南
- 玩转dockerfile
- redis实战第六篇 手动创建redis cluster
- docker容器入门最佳教程
- redis实战第五篇 jedis 连接 redis sentinel详解
- redis实战第四篇 手动容灾故障转移记录
- 10条很棒的Python一行代码