ROS系列教程三:roslaunch文件及参数服务器
一、标签简介
1、<launch> ... </launch> : 根标签,一般写在整个launch文件的头尾,斜杠/代表结束;
2、<node> :启动节点,如果不用roslaunch启动的话,一般都是用rosrun来运行某个功能包,node等同于rosrun,rosrun和node的调用方式区别如下:
rosrun调用指令为:rosrun 功能包名字 可执行文件名
node调用方式为:<node pkg="功能包名" type="可执行文件名" name="重定义名"/>
如我上一篇系列博文(ROS系列教程二:自定义消息类型话题的发布及订阅_皮皮爹地的博客-CSDN博客_ros订阅话题)所述,如果用rosrun的方式运行自定义话题消息的发布及订阅:
rosrun my_topic msg_pub
rosrun my_topic msg_sub
用node方式,则需要在launch文件里添加:
<launch>
<node pkg="my_topic" type="msg_pub" name="msg_publish"/>
<node pkg="my_topic" type="msg_sub" name="msg_subscribe"/>
</launch>
除了type、name外,node还有其他属性,分别为:
args:传递参数,务必写在node标签内,注意跟arg的区别,arg是独立写在外面;
output:输出日志,可以写"screen",就可以把日志输出到终端界面了;
respawn:true代表节点失效则重启,false则反之;
required:true代表节点失效则关闭整个launch文件,一般不需要设置;
ns:在命名空间中运行此节点;
3、<include>:可以包含其他launch文件或者xml文件,一般用于同时启动多个launch文件。举个栗子~~如过arg send_msg这个参数为false,那么久启动root功能包下的/launch/include/myLaunch.launch文件,则这么写:
<arg name="send_msg" default="false"/>
<include file="$(find root)/launch/include/myLaunch.launch" unless="$(arg send_msg)">
4、<arg>:在launch文件中创建一个参数,一般格式为<arg name="参数名称" default="默认值">,作用于仅局限于当前的launch文件;
5、<param>:在参数服务器添加一个参数,注意,这里添加的参数是全局的,只要在同一个rosmaster下运行的程序(launch、cpp、py文件),都可以调用这些参数,进行“增删读改”;
举个栗子~~
step1:我们在某个launch文件中先创建一个param
<param name="my_msg" type="string" value="Hello world"/>
//name后面跟的是变量名,type后面跟的是变量的数据类型,value后面跟的是值
step2:然后在某个cpp文件中调用
std::string get_msg; //创建一个get_msg变量来接收参数服务器给过来的数据
ros::NodeHandle new_nh; //创建节点句柄
new_nh.param<std::string>("my_msg", get_msg, "say nothing"); //括号里第一个是从参数服务器接收的参数名,第二个是用于接收参数服务器该参数的值,类型要跟参数服务器上的类型一致,第三个是假设参数服务器不存在该名称的参数,则采用的默认值
这样就可以调用参数服务器上的值了,另外,参数服务器还有如下指令:
rosparam list:列出参数服务器上的所有参数;
rosparam get:获取某个参数;
rosparam set:设置某个参数;
rosparam delete:删除某个参数;
rosparam· load:从文件中加载参数到服务器(如yaml文件);
rosparam dump:将参数服务器的参数写入某个文件;
此外,还可以把局部的arg变量的值赋值给全局的param变量,例如:
<arg name="isReady" default="No"/> //创建一个变量,名为isReady
<param name="checkStatus" type="string" value="$(arg isReady)"/> //把isReady变量的值赋值给checkStatus,并添加到参数服务器中
6、<rosparam>:从.yaml文件中一次性导入大量参数;
7、<group>...</group>:把多个节点放到一个命名空间内,前面介绍node的时候有个ns,可以填入自己创建的组名,这样就可以统一划分到同一个命名空间内;
常用方式有:
//创建ns命名空间
<group ns = “group_name”>
...
</group>//用于执行if条件判断,如果满足if条件,则执行group../group之间的语句
<group if = “condition”>
...
</group>
8、<remap>:重命名,格式为:<remap from = "/original_topic" to = "/new_topic" />;
二、launch文件的创建与参数服务器的应用
step1:在上一节课的基础上,打开mytopic路径,右键打开终端
mkdir launch //在mytopic文件夹内创建launch文件夹
cd launch //进入文件夹
touch Msg_launch.launch //创建launch文件
step2:编辑这个launch文件
nano Msg_launch.launch
在launch文件中添加以下内容:
<launch>
<arg name="isReady" default="No"/> //创建一个变量,名为isReady
<param name="checkStatus" type="string" value="$(arg isReady)"/> //把isReady变量的值赋值给checkStatus,并添加到参数服务器中
<node pkg="my_topic" type="msg_pub" name="msg_publish" output="screen"/> //启动节点,打印到屏幕
<node pkg="my_topic" type="msg_sub" name="msg_subscribe" output="screen"/>
</launch>
step3:启动launch文件,桌面打开一个终端
roslaunch my_topic Msg_launch.launch
最后即可看到上一节课的发布与订阅消息~~大功告成
本章完结~
转载卖钱者,子无屁眼。
ROS系列教程三:roslaunch文件及参数服务器相关推荐
- Fastify 系列教程三 (验证、序列化和生命周期)
Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...
- 汇川技术小型PLC梯形图编程系列教程(三):PLC系统程序与用户程序介绍
原文链接:汇川技术小型PLC梯形图编程系列教程(三):PLC系统程序与用户程序介绍 PLC的定义 可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统.它采用一种可编程的存储器,在其 ...
- 树莓派4B系列教程三 :优化配置
树莓派4B系列教程三 :优化配置 写在前面 树莓派4B内存增加 CPU温度控制 显存优化 Chromuim缓存转移 优化自启程序 Chromium插件安装 离线安装插件时遇到的问题 结语 写在前面 不 ...
- js系列教程4-函数、函数参数全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...
- ROS入门学习三——launch文件
launch作用:便于一次启动多个节点,可启动本地节点和远程节点及修改添加参数服务器参数. <launch> //<launch>是所有launch文件的根标签<node ...
- ClickHouse系列教程三:MergeTree引擎分析
ClickHouse系列教程: ClickHouse系列教程 Clickhouse之MergeTree引擎分析 CRUD Clickhouse支持查询(select)和增加(insert),但是不直接 ...
- 微信小程序开发系列教程三:微信小程序的调试方法
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 这个教程的前两篇文章,介绍了如何用下图所示的微信开发者工具自动生成一个Hel ...
- Cobaltstrike系列教程(三)beacon详解
0x000–前文 有技术交流或渗透测试培训需求的朋友欢迎联系QQ/VX-547006660 2000人网络安全交流群,欢迎大佬们来玩 群号820783253 0x001-Beacon详解 1.Beac ...
- ASP .NET Core Web MVC系列教程三:添加视图
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程二:添加控制器 ...
最新文章
- k8s监控之kube-state-metrics
- netty 进程挂起_这可能是目前最透彻的Netty原理架构解析
- QT设置坐标轴XY轴显示范围方法
- linux cut的用法
- int arr 13 java,java学习13 - 数组的定义、操作、异常、二维数组
- 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python 逻辑
- 通过资源名称得到资源id
- 有很多种方法来解决八数码
- 算法:获取链表的中间值Middle of the Linked List
- 黑客动画吧-古墓探险之过关题解
- vue 高德地图使用热力图
- 关于清理系统垃圾的bat
- Kvaser、C++、Qt编写监控界面(三)
- 2022数学建模美赛回顾
- java.lang.NoClassDefFoundError: Could not initialize class com.cyj.util.Jdbc
- java将小写金额转为大写金额
- java怎么使用sni,如何设置使用SNI提供两个SSL证书的Tomcat?
- 大脑构造图与功能解析_大脑的结构功能及作用是怎样?
- 科技是国之利器,人工智能与机器人发展势不可当
- AD633JRZ-ASEMI代理ADI亚德诺AD633JRZ车规级芯片