ROS学习笔记2——launch文件

一个程序中可能需要启动多个节点,比如ROS内置的小乌龟程序,实现这个案例需要开启roscore节点、小乌龟可视化节点、键盘控制节点,显然是一个很繁琐的方法。对于这样的情况,官方给出的策略是使用launch文件,可以一次性开启多个ros节点。

这里通过launch文件;来实现小乌龟的案例。

1、选定功能包右击 ---> 添加 launch 文件夹

2、选定 launch 文件夹右击 ---> 添加 launch 文件

3、编辑 launch 文件内容

<launch>
    <!--添加被执行的节点-->
    <!--node pkg="功能包名" type="节点名" name="命个名"/-->
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_key" />
</launch>

 a、<launch>

launch文件的根标签,每个launch文件都需要有这样一个根标签,并且文件的所有内容必须包含在这个标签内,只要i有这样一个根标签,运行launch文件时,就会开启roscore

<launch>
...
</launch>

 b、<node>

使用launch文件的目的就是要开启多个节点,所以<node>标签是一个重点。

roslaunch 命令不能保证按照 node 的声明顺序来启动节点(节点的启动是多进程的)

<node pkg="功能包名" type="节点名(与之前的可执行文件名相同)" name="给节点命个名" args="参数1 参数2 参数3" output="log|screen"/>

pkg、type、name是三个最主要的参数。

除此之外,<node>还有其他的属性:

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

 c、<include>

include标签用于将另一个 xml 格式的 launch 文件导入到当前文件,实现复用

<include file="$(find 功能包名)/launch/xxx.launch" ns="xxx" />
  • file=" " -> 要包含的文件路径
  • ns=" " -> 在指定命名空间导入文件

d、<remap>

用于话题重命名,他是node的一个子级标签

<node pkg=" " type=" " name=" ">
    <remap from="原始话题名" to="目标话题名" />
</node>

e、<param>

<param>标签主要用于在参数服务器上设置参数,是node的一个子级标签,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在<node>标签中时,相当于私有命名空间,设置的参数前面会加上这个命名空间。

<!--1、在launch内,node外-->
<param name="param_A" type="int" value="100" />

<!--2、在node内-->
<node pkg=" " type=" " name=" ">
    <param name="param_B" type="double" value="1.234" />
</node>

f、<rosparam>

<rosparam>标签也是node的一个子级标签,可以从 YAML 文件导入参数,或将参数导出到 YAML 文件,也可以用来删除参数,<rosparam>标签在<node>标签中时被视为私有。

<!--1、在launch内,node外-->
<rosparam command="load | dump | delete(可选)" file="xxx.yaml" />

<!--2、在node内-->
<node pkg=" " type=" " name=" ">
    <rosparam command="load | dump | delete" file="xxx.yaml" />
</node>

g、<group>

<group>标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间。除了launch 标签外的其他标签都是他的子级标签。在不同的组可以实现启动相同的节点。

<group ns="first_group">
    ...
</group>

<group ns="second_group">
    ...
</group>

h、<arg>

 <arg>标签是用于动态传参,类似于函数的参数。

  • 在launch文件文件中实现传参:
<arg name="car_length" default="0.5" />

<param name="car_A" value="$(arg car_length)" />
<param name="car_B" value="$(arg car_length)" />
<param name="car_C" value="$(arg car_length)" />
  • 命令行调用launch传参: 
roslaunch 功能包名 xxx.launch arg的name:=值

4、运行launch文件

//roslaunch 功能包名 ***.launch
roslaunch helloworld start_turtle.launch

此时,将光标点在终端,就可以实现用键盘上下左右控制小乌龟了。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值