目录

ROS机器人操作系统launch启动文件的使用方法十三

ROS机器人操作系统——launch启动文件的使用方法(十三)

ROS机器人操作系统

https://i-blog.csdnimg.cn/blog_migrate/2380def7288299e3c276cc62c649edfa.png

文章目录

前言

前面我们学习了怎么用代码实现两个小海龟的跟随运动,很明显的感觉出真的好麻烦,在ROS中提供了一种launch文件可以帮助我们解决这一问题

一、launch是什么?

Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master)

https://i-blog.csdnimg.cn/blog_migrate/a06c16ae1a34173a47758119f4f76b7c.png

二、launch文件语法

launch文件中都是通过xml语法描述的

1.launch

launch文件中的根元素采用标签定义

https://i-blog.csdnimg.cn/blog_migrate/c92106a087dfd9d54ec56eef0d84e878.png

2.node

https://i-blog.csdnimg.cn/blog_migrate/10c6a7ea90904c340f0436015099d77d.png

output:控制某个节点是不是要日志信息打印到当前终端里

respawn:控制节点启动运行失败是否进行重启

required:表示launch文件某个节点是否要求必须启动

ns:节点命名空间,避免冲突命名

args:给每个节点输入一些参数

3.param / rosparam

https://i-blog.csdnimg.cn/blog_migrate/2a3ce3b53343f53fb4a6455224a4beed.png

4.arg

https://i-blog.csdnimg.cn/blog_migrate/ac84b1a75e24f3ffc99bedb9e697f398.png

5.重映射remap

重映射ROS计算图资源的命名。

https://i-blog.csdnimg.cn/blog_migrate/f7424eedacc1767d7bc164fce3aff955.png

6.嵌套include

包含其他launch文件,类似C语言中的头文件包含。

https://i-blog.csdnimg.cn/blog_migrate/cdf973f243b09e3ed42aa4bc99f26795.png

三、launch示例

https://i-blog.csdnimg.cn/blog_migrate/233fff5f9639c41b04d891024341c428.png

<launch>
    <node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
    <node pkg="learning_topic" type="person_publisher" name="listener" output="screen" /> 
</launch>

一个launch根标签包含两个node标签,两个node标签分别启动两个节点,output=screen将日志空间打印到终端。

launch文件启动方法:roslaunch命令

roslaunch   功能包名   功能包中launch文件名
roslaunch learning_launch simple.launch 

https://i-blog.csdnimg.cn/blog_migrate/160495e261dc2172ae86189653a5a36d.png

可以同时启动多个节点。

https://i-blog.csdnimg.cn/blog_migrate/f07942234b65444b0e4193d6cea97874.png

<launch>

	<param name="/turtle_number"   value="2"/>   #param rosparam都是设置变量的  海龟的名字和个数

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">  #启动turlesim功能包的turtlesim_node节点 名字是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>  #用rosparam标签去加载参数文件

    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
    #启动键盘控制节点
</launch>

param设置ROS系统中参数,这个是很常用的。

https://i-blog.csdnimg.cn/blog_migrate/b69ddd4e14b8abbfd22e8f4c28b13976.png

运行后可以看到名字是turtlesim_node/…因为我们把turtlesim_node写在了里面 https://i-blog.csdnimg.cn/blog_migrate/bb2e965216e4793d3934263424ccf09b.png

ROS的规则:优先将节点名作为最前面的命名空间

https://i-blog.csdnimg.cn/blog_migrate/3a62af37cc9330bb86390494e8c9a9ba.png

 <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>

https://i-blog.csdnimg.cn/blog_migrate/0cb7d7beed6002a118e5a222008626c4.png

<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"/>  #将to后面的内容替换成from后面的内容
	</node>

</launch>

总结

launch是ROS机器人操作系统中最重要的一个功能,launch的使用一定要熟练掌握。