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

最后即可看到上一节课的发布与订阅消息~~大功告成

本章完结~

转载卖钱者,子无屁眼。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮爹地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值