ROS学习记录10——.launch文件的编写与使用

零.前言

roslacunch,只是方便我们一次运行大量节点,或者通过单个脚本运行多个节点的工具。
这部分没啥好讲的,主要使用为机翻+调校官方文档,外加一些实例,
官方文档的地址:roslaunch/XML

一.元素结构

roslaunch也是由xml语言构成,文件后缀为.launch.
launch文件因该由<launch></launch>开始与结束,其他参数均为该TAG的子元素。
其子元素有:
<node><machine><include><remap>``<env><param><rosparam><group><test><arg>
文本着重会讲个别的元素。

二.标签讲解

2.1 <node>

<node>标记指定您希望启动的ROS节点。
这是最常见的roslaunch标签,因为它支持最重要的功能:启动和关闭节点。
roslaunch不保证节点开始的顺序,因为无法从外部知道何时完全初始化节点,因此所有启动的代码都必须能够按任意顺序启动。
举例:

<node name=“listener1” pkg=“rospy_tutorials” type=“listener.py” args="–test" respawn=“true” />

以带有命令行参数--test的方式去调用rospy_tutorials包中的可执行文件listener.py ,来启动listener1节点。如果该节点意外终止,则会重新启动该节点。

<node>里可以添加以下常见的参数

  • pkg=“mypackage”, 包名
  • type=“nodetype” ,执行文件的名称如果是用Python编写的就填写xxx.py,如果是cpp就写编译生成的可执行文件名
  • name=“nodename”,这将会覆盖掉ros::init()定义的node_name
  • args=“arg1 arg2 arg3”, 带的参数
  • respawn=“true”,默认为false,节点挂掉/退出后是否重新启动。
  • required=“true”,如果该节点退出/挂掉,会杀死roslaunch的所有进程。
  • clear_params=“true|false”,在启动之前,删除节点的私有名称空间中的所有参数。
  • output=“log|screen”, 若为screen,stdout/stderr 会显示在屏幕上,若为logstdout/stderr 会被记录到$ROS_HOME/log,仅显示stderr。注stderr是那个红色的错误字体。

2.2 <param>

<param name=“publish_frequency” type=“double” value=“10.0” />

比如这行代码则为整个ros运行期间创建一个publish_frequency的变量(参数),类型为double,值为10.0
也就是说,这个变量在节点中也可以使用。

2.3 <arg>

类似于linux的bash文件,通过这样可以定义一个在该launch文件里有效的变量名。比如<arg name="test" value="123"/>, 这样,后面的launch文件里所有的$(arg test)均会被"123"替换.

三.实例

本节通过启动上篇文章的.urdf来实现通过自定义launch来实现Rviz的启动。
首先创建功能包,我就以学习记录3的top举例。(好了,假设现在功能包创建好了)
创建urdf文件夹并复制我们上篇的意大利炮进文件夹。
在这里插入图片描述

创建launch文件夹和.launch文件

<launch>
    <param name="robot_description" textfile="$(find top)/urdf/mortar.urdf" />
    <param name="use_gui" value="true"/>
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find top)/urdf/config.rviz" />
</launch>

解释:

  • robot_description 这个变量是rviz节点会用的,需要写入urdf的文件路径。$(find xxx)可以找到xxx包的位置,这样textfile就是我们的路径了。
  • use_gui 是下个节点的需要的变量,用于是否可视化显示调节关节移动的信息。
  • 紧接着的两个node是用于发布joint的状态和发布joint和link相对位置(TF实现)的节点。
  • rviz是显示rviz的节点,且添加了参数,若有rviz的配置文件,则可以读取,若没有,等会儿保存一个就行。

如果没有出现机器人模型,要么是工作空间的问题,要么就是launch的代码与你工作空间或者文件不匹配
ros noetic需要改成

<launch>
    <param name="robot_description" textfile="$(find slam_nb)/urdf/car.urdf" />
    <param name="use_gui" value="true"/>
    <node name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find slam_nb)/urdf/config.rviz" required="true"></node>
</launch>

现在 我们运行下这个launch:

roslaunch top show_mortar.urdf

得到这个
在这里插入图片描述
我们暂时将这个改为base_link:
在这里插入图片描述
再添加显示RobotModel的选项:
在这里插入图片描述我们的迫击炮就出来了:
在这里插入图片描述这里选择file->save config as: 到我们的launch文件里所描述的位置
在这里插入图片描述在这里插入图片描述
再次运行就默认配置啦:
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康娜喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值