ROS学习笔记(四) launch启动文件的使用方法

第十九讲  launch启动文件的使用方法

一、理论
Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master)
<launch>
    <node pkg="turtlesim" name="sim1" type="turtlesim_node"/>
    <node pkg="turtlesim" name="sim2" type="turtlesim_node"/>
</launch>

<luanch> launch文件中的根元素采用<launch>标签定义
<node> 
1.启动节点
<node pkg="package-name" name="node-name" type="executable-name"/>
pkg:节点所在的功能包名称
type:节点可执行文件名称
name:节点运行时的名称,节点名会取代程序初始化时的节点名称,比如同时运行两个海龟节点,运行的是同一个程序,但是会起不同的名字
2.其他可选属性:
output控制当前节点的日志信息要不要打印到终端里,防止很多的节点日志都输出导致终端凌乱
respawn控制节点突然挂掉是不是要重启
required控制launch中的节点是不是一定要启动起来(必须要启动的)
ns(name_space)给每个节点定义命名空间,避免命名冲突
args给每个节点输入参数使用
3.参数设置
(1)设置ROS系统运行中的参数(一个参数),存储在参数服务器中:<param>/
<param name="output_frame"value="odom"/>
name:参数名
value:参数值
(2)加载参数文件中的多个参数:<rosparam>
<rosparam file="params.yaml"command="load"ns="params"/>

(3)luunch文件内部的局部变量,仅限于launch文件使用<arg>
<arg name="arg-name"default="arg-value"/>
name:参数名
value:参数值
调用
<param name="foo"value="$(arg arg-name)"/>
<node name="node"pkg="package"type="type"args="$(arg arg-name)"/>
4.重映射ROS计算图的资源的命名<remap>
<remap from="/turtlebot/cmd_vel"to="/cmd_evl"/>
from:原命名
to:映射之后的命名
5.嵌套(包含其他launch文件,类似C语言中的头文件包含)<include>
<include file="$(dirname)/other.launch"/>
file:包含的其他launch文件路径
6.更多标签可参见:https://wiki.ros.org/roslaunch/XML

二、实际操作
1.创建launch文件夹
在功能包文件夹里$ cd ~/test1/src /功能包
$ catkin_creat_pkg learning_launch  (不需要依赖,创建之后有CmakeLists.txt和package.xml)
创建一个文件夹命名为launch,用于存放launch文件

实例一:(基本启动)
2.在launch文件夹内创建一个simple.launch文件,内容如下:
<launch>
    <node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
    <node pkg="learning_topic" type="person_publisher" name="listener" output="screen" /> 
</launch>
3.编译
回到工作空间根目录$ cd ~/test1
编译工作空间 $ catkin_make
使用roslaunch命令启动launch文件 $ roslaunch 功能包名 launch文件名
$ roslaunch learning_launch simple.launch

实例二:(设置参数)
1.在launch文件夹内创建一个turtlesim_parameter_config.launch文件,内容如下:
<launch>

    <param name="/turtle_number"   value="2"/>

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
        <param name="turtle_name1"   value="Tom"/>
        <param name="turtle_name2"   value="Jerry"/>

        <rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
    </node>

    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>

</launch>
2.在learning_launch文件夹内创建一个config文件夹,里面创建一个param.yaml文件,内容如下:
A: 123
B: "hello"

group:
  C: 456
  D: "hello"
3.编译
回到工作空间根目录$ cd ~/test1
编译工作空间 $ catkin_make
使用roslaunch命令启动launch文件 $ roslaunch 功能包名 launch文件名
$ roslaunch learning_launch turtlesim_parameter_config.launch
4.在终端中可以用上下左右建控制海龟移动
5.新建一个终端,输入 $ rosparam list
显示的参数是通过launch文件和yaml文件加载出来的
通过对照终端和turtlesim_parameter_config.launch文件,可以看到/turtle_number参数,然后利用$ rosparam get /turtle_number 命令可以看到其值为2
然后turtle_name1和turtle_name2是在turtlesim_node内的,这就算param写在node内和写在外的区别(定义在不同的命名空间,在外没有,在内(优先加ROS节点名作为命名空间):命名空间为name="turtlesim_node"),同样yaml文件定义的A、B、grop/C、grop/D也都被加载进来,(其次加设置为命名空间):grop是命名空间

实例三:(include)
在launch文件夹内创建一个start_tf_demo_c++.launch文件,内容如下:
 <launch>

    <!-- Turtlesim Node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>

    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />

    <node pkg="learning_tf" type="turtle_tf_listener" name="listener" />

 </launch>
 
在launch文件夹内创建一个start_tf_demo_py.launch文件,内容如下:
<launch>

    <!-- Turtlesim Node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>

    <node name="turtle1_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
      <param name="turtle" type="string" value="turtle1" />
    </node>
    <node name="turtle2_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
      <param name="turtle" type="string" value="turtle2" /> 
    </node>

    <node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" />

</launch>


在launch文件夹内创建一个turtlesim_remap.launch文件,内容如下:
<launch>

    <include file="$(find learning_launch)/launch/simple.launch" />

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
        <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
    </node>

</launch>

在终端运行
$ roslaunch learning_launch start_tf_demo_c++.launch  (移动上下左右实现跟随)
$ roslaunch learning_launch start_tf_demo_py.launch  (移动上下左右实现跟随)


$ roslaunch learning_launch turtlesim_remap.launch 
新开一个终端 $ rostopic list 可以看到/turtle1/cmd_vel已经替换为了cmd_vel
尝试发布速度指令  
$ rostopic pub /cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0" 
可以看待海龟移动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值