【ROS】ROS(十) : launch文件

ROS2-launch文件 我们在之前运行listener和talker两个节点的时候肯定注意到过一个问题,就是我们需要重复打开两个终端,运行两次,那如果我们做一个大型项目,里面包含了一万个节点,难道我们要打开一万个终端,输入一万个指令吗?这显然是浪费生命且D疼的一件事,这也是不可能出现在发展了这么久的ROS上的。于是乎,launch应运而生,他就可以很好地解决这个问题。launch文件主要就是将所有要运行的节点信息写在该文件中,然后运行这个launch文件即可,这样就省去了极大的麻烦。 阅读详情

为什么要写这个ros中的launch文件,哈哈,当然是因为在ROS的使用中非常重要.

使用rosrun只能运行一个对应的节点,接触过ROS的小伙伴根据教程就知道通常要完成一系列的rosrun操作才能完成我们最终的目标.但是如果我们写一个文件,那么就可以解决开很多新终端,并且输入很多遍代码开启一堆的节点的问题~

同时,launch文件还支持参数重载,根据不同的机器人的参数可以使用不同的参数而不需要修改原始代码.

(o)/~下面就是launch文件的整理,争取下次遇到launch文件的问题可以快速找到对应的解决方案!

1.使用launch文件

(1)运行launch文件

roslaunch package_name launch_file_name

Tip1: launch文件可以不被包含于package中。此时,只需指出该launch文件的绝对路径,即可运行。

roslaunch completely_path

Tips2:为便于执行,每个node最好是相互独立的.

(2)详细显示(request verbosity)

roslaunch -v package_name launch_file_name

可以看到信息的打出,如下图所示:

这里写图片描述
(3)结束launch文件

ctrl+c

2.创建launch文件
(1) launch文件一般以.launch后缀作为文件名,放在package的launch文件夹下.

(2)launch文件是XML文件,每个XML文件必须有一个root element.而launch文件的root element由一对launch标签定义

<launch>
...
</launch>

Launch文件中的其他elements必须都在这一对tags之间。

(3) launch文件的核心是一系列node elements,每个node element启动一个node。Node element看起来如下:

<node
  pkg=”package_name” type=”executable_name” name=”node_name”
/>

Tip1: 最后的“/”是必不可少的.
Tip2: 也可以写成

<node pkg=”..” type=”...” name=”...”></node>

如果该node中有其他tags,则必须使用这种形式。

(4) 一个node element包含三个必须的属性:pkg, type, name.

pkg和type属性指出ROS应该运行哪个pkg中的哪个node,注意:此处的type是可执行文件的名称,而name则是可以任意给出的,它覆盖了原有文件中ros::init指定的node name。

(5) 使用匿名(anonymous name)

//这是LZ好像还没碰到过
  name=”$(anon base_name)”

(6) node 日志文件(log file)
运行roslaunch和用rosrun运行单个节点的区别之一是,默认情况下,roslaunch运行的nodes的标准输出会重定向到log file,不显示在控制台。

该日志文件的位置和名称如下:

~/.ros/log/run_id/node_name-number-stdout.log

LZ的输出如下:

... logging to /home/felaim/.ros/log/34b30178-5299-11e8-a3e9-b01041523dc7/roslaunch-felaim-PC-14369.log

其中,run_id是master启动后生成的特殊标识符,number是表示nodes数量的整数。如,turtlesim-1-stdout.log; teleop_key-3-stdout.log.

(7) 输出到控制台
用output属性, output=”screen”;这种方法仅显示一个node。
若显示所有nodes的输出,用–screen命令行。

roslaunch --screen package_name launch_file_name

黄色部分就是对应的output

这里写图片描述

如果正在运行的文件没有显示想要对输出,可以查看该node属性集中是否有 output=”screen”

(8) 要求重生(request respawning)
开启所有nodes后,roslaunch会监视每个node,记录那些仍然活动的nodes。对于每个node,当其终止后,我们可以要求roslaunch重启该node,通过使用respawn属性。

respawn=”true”

(10) 必需的nodes
required属性与respawn相反,不能同时对同一个node使用。

required=”true”

当一个required node终止后,所有其他的nodes都会终止,并退出。这种命令有时很有用。比如,当一个很重要的node失败后,整个会话都会被扔掉,那些加上了respawn属性的nodes也会停止。

(11) 在独立的窗口运行各nodes
我们在各自的terminal运行rosrun node_name;但是运行roslaunch时,所有的nodes共用一个相同的terminal,这对于那些需要从控制台输入的nodes很不方便。可以使用launch-prefix属性。

launch-prefix=”command-prefix”

//Eg:
launch-prefix=”xterm -e”
//等价于xterm -e rosrun turtlesim turtle_teleop_key
//xterm 命令表示新建一个terminal; -e参数告诉xterm执行剩下的命令行。
//当然,launch-prefix属性不仅仅限于xterm。它可用于调试(通过gdb或valgrind),或用于降低进程的执行顺序(通过nice). 
//这个LZ还没接触过具体的实例其实.

3.在namespace中执行nodes
为node设置默认的namespace的常用方法——被称为“pushing down into a namespace”的进程,用于launch文件,并在其node element中指定ns属性。

ns=”namespace”

launch文件中的node names是relative names。同一个launch文件中,允许不同namespace中出现相同的node names。Roslaunch要求node names必须是base names——不指定任何namespaces的relative names;如果node element中出现node name为global name,则会报错。

4、重映射names(remapping names)

除了解析relative names和private names,ROS也支持重映射,用于修改nodes当前使用的名称。

重映射相当于换名,每次重映射需提供一个original name和一个new name。每次node使用它的original name, ROS client library都会将其替换为remapping name。

创建remapping name两种方法:

(1) 对于单个node,在命令行进行remapping(remap对象可以是node,topic等)。

original-name:=new-name
//Eg:
rosrun turtlesim turtlesim_node turtle1/pose:=tim

(2) 在launch文件内remap names,使用remap element,这种方法使用的比较多,因为可以直接写在launch文件中而不用在终端中再次设定对应的重映射.

<remap from=”original_name” to “new_name”>

如果remap出现在launch文件开头,作为launch文件的子元素,则该remapping将被用于随后所有的nodes。如果remap作为某个node的子元素,则只用于该节点。例如:

<node pkg=”turtlesim” type=”turtlesim_node” name=”turtle1”>
    <remap from =”turtle1/pose” to “tim”>
</node>

注意:在ROS进行remapping之前,remaping的所有name,包括original和new names,都将被解析为global names。所以,remapping之后所有的名字通常都是relative names。

5.其他的launch elements

5.1 including其他文件

为包含其他launch文件,包括这些launch文件的所有nodes和parameters,用include element.

<include file=”path-to-launch-file”>

这种情况下,file属性必须写出该launch文件的全部路径名称,显得很繁琐。因此,常用

<include file=”$(find package_name)/launch_file_name”/>

注意,执行该launch文件时,roslaunch会搜索该package下的所有子目录;因此,必须给出package_name。此外,include也支持ns属性,将它的内容放进指定的namespace。

<include file=”...” ns=”namespace_name”/>

5.2 Launch arguments
为便于launch文件重构,roslaunch支持launch arguments,也成为arguments或者args,类似于局部变量。

注意:尽管argument和parameter有时可互换,但他们在ROS中的意义完全不同。Parameters是ROS系统使用的数值,存在parameter server上,nodes可通过ros::param::get函数编程得到,用户可通过rosparam获取。与之不同,arguments仅在launch文件内部有意义,nodes不能直接获取它们的值。

(1) 声明argument

<arg name=”arg_name”>

(2)指定argument的值

Launch文件中的每个argument都必须有指定值。赋值方法有好几种。

第一种,在命令行赋值

//这个最常用的是修改/dev/ttyUSB0的时候
roslaunch package_name launch_file_name arg-name:=arg_value

第二种,在声明argument时赋值

<arg name=”arg_name” default=”arg_name”/>
<arg name=”arg_name” value=”arg_name”/>

上面两行的区别在于,命令行参数可以覆盖default,但是不能重写value的值.

(3) 获取变量值

一旦声明某个argument并赋值后,我们可以通过arg使用该argument.

(arg arg-name)

如果该行出现,roslaunch将会用给定arg-name的值替换其左边的值。

(4)将argument值传给included launch文件

<include file=”path-to-file”>
<arg name=”arg_name” value=”arg_value”/>
......
</include>

若在launch文件中,launch文件及其包含的launch文件出现出现相同的arguments,则需在launch文件及included launch文件中同时写:

<arg name=”arg_name” value=”$(arg arg_name)”/>

第一个arg_name表示indluded launch文件中的argument,第二个arg_name表示launch文件中的argument.其结果是指定的argument在launch文件及included launch文件中都有相同的值。

5.3 创建groups
Group element可以再大型的launch文件中将指定的nodes组织起来。它有两个用处:

其一,group可以将几个nodes放进同一个namespace

<group ns=”namespace”>
<node pkg=”..” .../>
<node pkg=”..” .../>
......
</group>

注意,如果grouped node已经有它自己的namespace,并且是relative name,那么该node的namespace是其relative name,并以group namespace为后缀。

其二,group可以同时启动或者终止一组nodes。

<group if=”0 or 1”>
......
</group>

如果该属性的值是1,一切正常;如果该属性的值为0,那么group内所有的nodes都不会运行。

同理,除了if,还有unless。

<group unless=”0 or 1”>
......
</group>

注意,这些属性的合法值只有0和1.

另外,group element中只能使用ns,if,unless这三个属性。

参考地址:http://www.rosclub.cn/post-1027.html

LZ之前一直无法控制几个node之间的关系,主要是因为直接调用已有的可执行文件,发布的话题和接收的话题名称不一致,导致最后两者没法连接,一个简单的例子LZ和A说了一个命令,目的是传递到B,但是B却只听C的命令,那么LZ的命令自然无法到达B,而B也就不知道自己实际上需要做什么了…

最后是使用remap命令改了node的名称,好在问题解决了.O(∩_∩)O哈哈~

【ROS学习】launch文件的使用 我们都知道在使用ROS时,启动一个节点我们可以使用rosrun启动一个节点!但是如果要启动多个节点呢?是不是得一个个都得启动!是不是感觉特别麻烦和累赘!don't worry!ROS已经帮我们考虑好了!那就是launch 文件,我们可以在launch文件编写多个node节点,然后只需启动launch文件,就可以实现一键启动! 目录 一、launch文件快速使用 二、launch文件一些配置 1、launch根标签设置 2、launch的node标签 3、launch文件的include标签(常用 阅读详情

相关推荐

ROS2——launch文件(十四)

到目前为止,每当我们运行一个ROS节点,都需要打开一个新的终端运行一个命令。机器人系统中节点很多,每次都这样启动好麻烦呀。有没有一种方式可以一次性启动所有节点呢?答案当然是肯定的,那就是Launch启动文件,它是ROS系统中多节点启动与配置的一种脚本。 ROS2中的Launch文件就是基于Python描述的。Launch的核心目的是启动节点,我们在命令行中输入的各种参数,在Launch文件中,通过类似这样的很多代码模版,也可以进行配置,甚至还可以使用Python原有的编程功能,大大丰富了启动过程中的多样化

戚晨夕的博客 3951

ROS中的Launch启动文件

关于ros中的launch文件的一些描述

m0_57368670的博客 627

ROS2 Launch文件

在ROS1中launch文件是一种格式以.launch结尾的xml文档;而在ROS2中推荐使用Python方式编写launch文件,此时的launch文件是一种格式以.launch.py结尾的Python脚本。

波仔的博客 867

Ros 3-2 Launch文件

1、ROS节点运行管理launch文件 一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化? 采用的优化策略便是使用roslaunch 命令集合 launch 文件启动管理节点,并且在后续教程中,也多次使用到了 launch 文件。 概念: launch文件是一个xml 文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。

shyboyandgirl的博客 616

【面试经验】大疆笔试-计算机视觉算法B卷

3、a=np.random.randn(3,3) b=np.random.randn(3,1) ,那么c=a*b的维度应该是:*是元素乘法或者torch.mul,@才是矩阵乘法或者torch.matmul,不会触发广播机制;8、将分辨率降低一半时,精标定内参(fx、fy、cx、cy、k1、k2、k3)焦距、光心、畸变系数将分别变成(fx、fy、cx/2、cy/2、k1、k2、k3),只能搜到光心变成一半,畸变系数不变。12、KLT算法在频闪光源、重复纹理、高速机动、环境照度低的情况下效果显著下降。

litterfinger的博客 1444

别再死记硬背Payload了!深入理解Flask/Jinja2 SSTI的Python对象继承链与魔术方法

本文深入解析Flask/Jinja2 SSTI漏洞的底层原理,从Python对象模型出发,详细讲解如何通过魔术方法链实现RCE。文章揭示了Python对象继承链与魔术方法的精妙设计,提供了防御与绕过SSTI漏洞的实用技巧,帮助开发者深入理解漏洞本质并采取有效防护措施。

weixin_42525738的博客 356

ROS学习笔记2——launch文件

一个程序中可能需要启动多个节点,比如ROS内置的小乌龟程序,实现这个案例需要开启roscore节点、小乌龟可视化节点、键盘控制节点,显然是一个很繁琐的方法。launch文件的根标签,每个launch文件都需要有这样一个根标签,并且文件的所有内容必须包含在这个标签内,只要i有这样一个根标签,运行launch文件时,就会开启roscore。launch中的标签远不止这些,并且launch文件在ros工程中使用非常频繁,在后续的学习中,慢慢完善更新标签及其作用。pkg、type、name是三个最主要的参数。

Simulink_的博客 2647

R3LIVE 1.0 适配 Velodyne 16线雷达:3步配置解决150米漂移问题

本文详细解析了R3LIVE 1.0适配Velodyne 16线雷达时出现的150米漂移问题,并提供三步配置方案。通过调整雷达类型设置、运动补偿与时间对齐、视觉-激光联合优化等关键参数,有效解决了系统漂移问题,提升定位精度。适用于机器人定位与建图领域的开发者。

weixin_29054195的博客 268

ROS学习之launch文件

ROS学习之launch文件简单介绍node标签 简单介绍 launch文件本质上是XML文件,根标签由launch标签定义。子标签包括node,machine,param,rosparam,include,group,test,arg等 node标签 node标签定义了 ROS系统启动的节点,但需要注意的是,由于无法获知节点何时初始化完成,节点的启动顺序无法保证,因此在节点的实现上,应保证节点对...

单线程的Daniel的博客 908

通俗傻瓜式理清光栅化渲染和光线追踪渲染的原理

用通俗语言傻瓜式的讲清楚光栅渲染和光线追踪渲染的原理,方便没有相关理论基础的朋友理解入门。

qq_37366618的博客 2万+

用Charles抓包调试iOS应用?这份保姆级配置指南帮你绕过所有坑

本文提供了一份在Mac上使用Charles抓包调试iOS应用的保姆级配置指南。详细讲解了从Charles安装、Mac端代理设置、根证书安装,到iOS设备连接同一WiFi、配置代理以及最关键的系统证书信任等全流程步骤,并分享了SSL代理规则、断点调试等进阶技巧,帮助开发者高效定位和解决网络请求问题。

rice5的博客 640

6. ROS2中的launch文件

launch 是启动多个节点并设置参数的工具 使用方法: 进入到对应的文件夹,使用命令启动 ros2 launch file_name.launch 从功能包中启动launch ros2 launch package_name file_name.launch ...

wangwang的博客 611

【VMware】win 10:VMware 15 虚拟机安装 win 7 系统

目录 一、准备虚拟机 二、win7 ghost ISO镜像文件下载 三、VMware新建虚拟机 四、VMware安装win7 五、解决vmware虚拟机屏幕没有适应窗口全屏问题 一、准备虚拟机 查看我的另一博文:【VMware】VMware Workstation Pro15 虚拟机永久激活破解安装教程 二、win7 ghost ISO镜像文件下载 百度网盘下载地址:点击前往下载...

顾三殇 —— 博客空间(软件测试) 11万+

Ros学习笔记(十):理解 launch文件

launch文件,即启动文件,是ROS提供的一个管理启动节点的途径,一般来说,任何包都会包含启动文件,来指定和配置需要使用的节点,通常保存在launch文件目录下。 -->

banzhuan133的博客 2206

【温室气体】GOSAT 数据产品

【温室气体】GOSAT 数据产品

WW、forever的博客 238

基于计算机视觉的无人便利店技术:从算法到部署的系统化实战指南

摘要:本文系统介绍了基于计算机视觉的无人便利店技术方案,提出"商品检测-跟踪-动作识别-防损-结算"五段式流水线架构。详细阐述了YOLOv8-Seg商品检测、OC-Sort多目标跟踪、3D-CNN+ST-GCN动作识别等核心算法实现,并完成NVIDIA Jetson Xavier NX边缘端的优化部署。通过TensorRT量化、DeepStream加速等技术手段,系统在保持94.7%动作识别准确率的同时,将漏单率降至0.8%,单店云端算力成本较行业平均降低84%。所有代码已开源,可直接应

博客 624

【ROS】launch文件详解

参考:https://www.cnblogs.com/fuzhuoxin/p/12588402.html 在节点少,程序小的情况下可以一个一个节点来启动,测试运行效果;但是当工程规模大,需要的节点多时就显得比较费劲,用.launch文件来启动可以将需要的节点同时启动,不用再一个一个进行。为工程搭建提高了效率,里面还有很多参数灵活使用会带来非常高效的调试。 一、创建launch文件 在上个例子ROS 消息通讯——发布者/订阅者的来龙去脉的基础上创建launch文件去启动节点看效果会如何。 <lau.

lemonxiaoxiao的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ROS创建launch文件

Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master) <launch>:launch文件中的根元素采用标签定义

gyxx1998的博客 5779

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ros中的launch文件

ros中的launch文件

weixin_45868890的博客 6880

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ROS Launch文件

使用launch文件可以有效地管理和启动ROS系统中的多个节点,这对于调试和运行复杂的ROS应用程序非常有用。通过在launch文件中指定节点配置和行为,可以实现高度的自定义和自动化,简化了ROS系统的使用。运行相同类型的多个ROS节点时,确保每个节点都有一个独特的名称是关键。你可以通过指定不同的节点名称、使用不同的命名空间或利用arg参数和foreach循环(在支持的ROS版本中)来实现这一点。这些方法都确保了系统的灵活性和可扩展性。虽然C++和Python编写的ROS节点在.launch。

m0_73640344的博客 2461

ROS 如何书写launch文件

ros日常开发过程中,当我们创建的节点越来越多时,一个一个运行的话效率非常低下,这时我们可以通过输入一条指令来实现所有功能模块的启动。启动文件(Launch File)便是ROS中一种同时启动多个节点的途径,还可以自动启动ROSMaster节点管理器,而且可以实现每个节点的各种配置。 launch文件的使用如下: roslaunch PACKAGE_NAME LAUNCH_FILE_NAME 下...

qq_37082966的博客 4147

ROS入门(二):launch文件解析

如果为’log’,则stdout / stderr输出将发送到$ ROS_HOME / log中的日志文件,并且stderr将继续发送到屏幕。有时,节点1发布消息1给话题1(你可能需要该特定消息),而后,消息1进入了节点2,而节点2发布了消息2到话题2,消息2中包括了消息1的内容,消息2也被另一节点3接收。如果为true,则将当前文件中设置的所有args添加到为处理包含的文件而创建的子文件中。它启动一个单独的“talker”节点,该节点是“rospy_tutorials”软件包的一部分。

风吹落叶的博客 7974

ROS运行管理之launch文件

launch文件的详细解释

mxh3600的博客 8578

ros中的launch文件注释

ROS中launch文件的写法及节点调用相机驱动中的usb_cam包的launch文件相机标定中usb_cam包的launch文件launch文件rosrun和roslaunch的不同parameter说明 相机驱动中的usb_cam包的launch文件 &lt;launch&gt; &lt;node name="usb_cam" pkg="usb_cam" type="usb_cam_nod...

cyy116116的博客 8249

【ROS】launch文件

【ROS】launch文件

qq_45868001的博客 2623

ROS中启动文件launch文件详解

ROS中xxx.launch文件详解 .launch文件是ROS中用于同时启动多个节点的重要文件,在大型的ROS项目中使用频繁,所以掌握其主要元素与属性对ROS系统的应用至关重要: launch标签(元素)说明 launch拓展说明 parameter说明 1. 标签(元素)说明 - 以launch标签开头以表明是launch文件. - group标签定义命名空间. <group ns="turtlesim1"> <node pkg="turtlesim" name=".

weixin_43956732的博客 3957
上一篇: 【ROS】校准Poineer 3at
下一篇: 人生中第一次参加正式的长跑?
Felaim
Felaim 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄11年 3万+粉丝 606原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值