ROS节点运行管理launch文件

ROS运行管理launch文件

2 ROS节点运行管理launch文件

launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。

roslaunch 命令执行launch文件时,首先会判断是否启动了 roscore,如果启动了,则不再启动,否则,会自动调用 roscore

​ 下面是一个start_turtle.launch文件,后面都以这个为例分析

<launch -- deprecated = "弃用声明">  
    <!--乌龟GUI-->
    <node pkg = "turtlesim" type = "turtlesim_node" name = "turtle" output = "screen" />
    <!--键盘控制-->
    <node pkg = "turtlesim" type = "turtle_teleop_key" name = "key" output = "screen" />
    <!--圆周运动-->
    <node pkg = "plumbing_test" type = "test01_pub_twist" name = "circle" output = "screen" />
</launch>

2.1 launch标签

<launch>  

<launch> 是所有 launch 文件的根标签,充当其他标签的容器。

<launch -- deprecated = "弃用声明"> 是表明这个已经弃用。

2.2 节点node

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

2.1.1 属性

pkg="包名"   		   // 节点所属的包

type="nodeType"		// 节点类型(与之相同名称的可执行文件)

name="nodeName"		// 节点名称(在 ROS 网络拓扑中节点的名称)


output="log | screen" (可选) // 日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是log    
    
args="xxx xxx xxx" (可选)		// 将参数传递给节点

machine="机器名"	// 在指定机器上启动节点

respawn="true | false" (可选)	// 如果节点退出,是否自动重启

respawn_delay=" N" (可选)		// 如果 respawn 为 true, 那么延迟 N 秒后启动节点

required="true | false" (可选)	// 该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch

ns="xxx" (可选)	// 在指定命名空间 xxx 中启动节点  就是节点名字name前面加上了ns  eg,可以通过这个命令rosnode list查看  结果ns/name

clear_params="true | false" (可选)	// 在启动前,删除节点的私有空间的所有参数
  • ns实验
<!--启动乌龟GUI与键盘控制节点-->
<launch>
    <!--乌龟GUI-->
    <node pkg = "turtlesim" type = "turtlesim_node" name = "turtle" output = "screen" ns="shaobo"/>
    <!--键盘控制-->
    <node pkg = "turtlesim" type = "turtle_teleop_key" name = "key" output = "screen" />
    <!--圆周运动-->
    <node pkg = "plumbing_test" type = "test01_pub_twist" name = "circle" output = "screen" />
</launch>

​ 注意这里加上了ns之后,节点名字确实变了,但同时launch文件功能也残缺了,小乌龟不转了!它把话题名前面也加上了shaobo!这就导致它的话题对应不上,发布方不能正确发出话题.

在这里插入图片描述

​ 所以我们只需要把发布方的话题找到,更改话题名就可以实现.

在这里插入图片描述

2 子级标签

  • env 环境变量设置
  • remap 重映射节点名称
  • rosparam 参数设置
  • param 参数设置

2.3 include标签

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

在这里插入图片描述

2.4 remap标签

用于话题重命名

from=“xxx” 原始话题名称

to=“yyy” 目标名称

<!-- 代码中原先订阅的话题比如是imu,现在映射(订阅)/imu0话题  -->
<remap from="~imu" to="/imu0"/>
<remap from="~cam0_image" to="/cam0/image_raw"/>
<remap from="~cam1_image" to="/cam1/image_raw"/>

2.5 param标签

① 使用方法

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

1 - name="命名空间/参数名"

  参数名称,可以包含命名空间

2 - value="xxx" (可选)

  定义参数值,如果此处省略,必须指定外部文件作为参数源

3 - type="str | int | double | bool | yaml" (可选)

  指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:

  - 如果包含 '.' 的数字解析为浮点型,否则为整型
  - "true""false"bool(不区分大小写)
  - 其他是字符串

② 实验

​ 一种是放在launch下,一种是放在node

<!--启动乌龟GUI与键盘控制节点-->
<launch>
    <!--乌龟GUI-->
    <!--ns="shaobo"-->
    <!--1. 参数设置在launch下-->
    <param name = "test1" type = "int" value = "12"/>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle" output="screen">
        <!--2.参数设置在node下-->   
        <param name="test2" type="double" value="1.2"/>
    </node>

    <!--键盘控制-->
    <node pkg = "turtlesim" type = "turtle_teleop_key" name = "key" output = "screen" />
    <!--圆周运动-->
    <node pkg = "plumbing_test" type = "test01_pub_twist" name = "circle" output = "screen" />
</launch>

在这里插入图片描述

③ 运行时候遇到了两个问题

1 RLException: Invalid roslaunch XML syntax: mismatched tag: line 10, column 6 The traceback for the exception was written to the log file

这个问题很奇怪,重新编译一遍就可。

2 Use arrow keys to move the turtle. 'q' to quit.
[ WARN] [1690121652.359007669]: Shutdown request received.
[ WARN] [1690121652.360915919]: Reason given for shutdown: [[/key] Reason: new node registered with same name]
[ WARN] [1690121652.365210823]: Shutdown request received.
[ WARN] [1690121652.371896881]: Reason given for shutdown: [[/circle] Reason: new node registered with same name]
[ INFO] [1690121652.607872628]: Starting turtlesim with node name /turtle

意思就是出现了同样节点名字,这个是因为多次运行之后,好像并没有杀死之前的节点,因为之前的param设置的是param_Aparam_B,改了其它param之后即可运行,而且在rosparam list最前面两个可以看出来,这个好像没有被杀死!

2.6 rosparam标签

① 使用方法

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

1 command="load | dump | delete" (可选,默认 load)

  加载、导出或删除参数

2 file="$(find xxxxx)/xxx/yyy...."

  加载或导出到的 yaml 文件

3 param="参数名称"

4 ns="命名空间" (可选)

② 实验

1 加载

​ 加载params.yaml参数,使用命令查看。

<!--启动乌龟GUI与键盘控制节点-->
<launch>
    <!--乌龟GUI-->
    <!--ns="shaobo"-->
    <!--参数设置再launch下-->
    <param name = "test1" type = "int" value = "12"/>
    <rosparam command = "load" file = "$(find plumbing_test)/launch/params.yaMl"/>
    
    <!--注意下面这个node最后没有/,直到</node>才结束-->
    <node pkg="turtlesim" type="turtlesim_node" name="turtle" output="screen"> 
        <!--参数设置再node下-->   
        <param name="test2" type="double" value="1.2"/>
        <rosparam command = "load" file = "$(find plumbing_test)/launch/params.yaMl"/>
    </node>

    <!--键盘控制-->
    <node pkg = "turtlesim" type = "turtle_teleop_key" name = "key" output = "screen" />
    <!--圆周运动-->
    <node pkg = "plumbing_test" type = "test01_pub_twist" name = "circle" output = "screen" />
</launch>

在这里插入图片描述

2 导出

​ 导出的化要单独写一个launch文件,否则很多的参数不能导出!

<launch>

    <rosparam command = "dump" file = "$(find plumbing_test)/launch/params_out.yaMl"/>

</launch>

报错:RLException: Invalid roslaunch XML syntax: no element found: line 1, column 0 The traceback for the exception was written to the log file删除第一行空行即可

在这里插入图片描述

最终结果,将参数导出到指定文件

在这里插入图片描述

3 删除
<launch>

    <rosparam command = "delete" param = "/bg_B"/>

</launch>

在这里插入图片描述

2.7 group标签

<group>标签可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间。这样可启动多个节点对组而不会使得因为名称重复而报错。

<!--启动乌龟GUI与键盘控制节点-->
<launch>
    
    <!--第一组-->
    <group ns = "first">
        <node pkg="turtlesim" type="turtlesim_node" name="turtle" output="screen"/> 
        <!--键盘控制-->
        <node pkg = "turtlesim" type = "turtle_teleop_key" name = "key" output = "screen" />
        <!--圆周运动-->
        <node pkg = "plumbing_test" type = "test01_pub_twist" name = "circle" output = "screen" />
    </group>
    
    <!--第二组-->
    <group ns = "second">
        <node pkg="turtlesim" type="turtlesim_node" name="turtle" output="screen"/> 
        <!--键盘控制-->
        <node pkg = "turtlesim" type = "turtle_teleop_key" name = "key" output = "screen" />
        <!--圆周运动-->
        <node pkg = "plumbing_test" type = "test01_pub_twist" name = "circle" output = "screen" />
    </group>
</launch>
p@p:~/ROS/ros_vscode_test$ rosnode list
/first/circle	# 节点名前也多了ns
/first/key
/first/turtle
/rosout
/second/circle
/second/key
/second/turtle
/turtle

​ 因为由了ns,所以话题名称变了,小乌龟它就不会动了。

在这里插入图片描述

2.8 arg标签

① 方法

​ 标签是用于动态传参,类似于函数的参数

1 name="参数名称"

2 default="默认值" (可选)

3 value="数值" (可选)  // 不可以与 default 并存

4 doc="描述"			// 参数说明

② 实验

<launch>
    <arg name = "shaobo" default = "25" doc = "shaobo is 25 years"/>
    <param name = "A" value = "$(arg shaobo)"/>
    <param name = "B" value = "$(arg shaobo)"/>
</launch>
# 可以直接在命令行修改参数的值
p@p:~/ROS/ros_vscode_test$ roslaunch plumbing_test arg.launch shaobo:=3

p@p:~/ROS/ros_vscode_test$ rosparam get /A 
3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值