一、标签简介
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
最后即可看到上一节课的发布与订阅消息~~大功告成
本章完结~
转载卖钱者,子无屁眼。