马鞍山网站制作,wordpress 分类函数,广东粤网建设有限公司,网站建设项目的结论0.何为launch#xff1f;
launch#xff0c;中文含义是启动#xff0c;launch文件顾名思义就是启动文件#xff0c;要说这launch文件啊#xff0c;那还得从roslaunch说起。 相传#xff0c;在程序猿们还没有使用roslaunch之前#xff0c;需要手动rosrun逐个启动node
launch中文含义是启动launch文件顾名思义就是启动文件要说这launch文件啊那还得从roslaunch说起。 相传在程序猿们还没有使用roslaunch之前需要手动rosrun逐个启动node遇到大工程的时候其繁杂程度不可想象一度民不聊生。直到神实在看不下去了于是送给程序猿们一份礼物唤名roslaunch。roslaunch法力无边只需程序猿们编写一个launch文件启动大量节点弹指之间。从此一传十十传百程序猿们过上了幸福快乐的生活…… (故事纯属虚构看着玩就行了) 这故事虽假但roslaunch大法却不虚。roslaunch是一个用于自动启动ros节点的命令行工具从命令的字面上看还跟rosrun有些相似
roslaunch PACKAGE_NAME LAUNCH_FILE_NAME 1
只不过roslaunch的操作对象并非节点而是launch文件。launch文件是描述一组节点及其话题重映射和参数的XML文件。根据规范这些文件的后缀都是.launch 一个最简单的launch文件可以像下面这样
launch node namedemo pkgdemo_package typedemo_pub outputscreen/ node namedemo pkgdemo_package typedemo_sub outputscreen/ /launch 1 2 3 4 5 6
1.launch标签小结 1.0 launch
launch标签就像一个有容乃大的括号规定了一片区域所有的launch文件都由launch开头由/launch结尾所有的描述标签都要写在launch/launch之间
launch …… …… …… /launch 1 2 3 4 5
1.1 node
node标签可以说是launch文件里最常见的标签了每个node标签里包括了ROS图中节点的名称属性name、该节点所在的包名pkg以及节点的类型type其实就是可执行文件的名称如果是用Python编写的就填写xxx.py如果是cpp就写编译生成的可执行文件名在上面的例子中还出现了output这个东西这个属性在调试阶段很有用output“screen”表示了将终端输出转储在当前的控制台上而不是在日志文件中。 属性 属性作用 nameNODE_NAME 为节点指派名称这将会覆盖掉ros::init()定义的node_name pkgPACKAGE_NAME 节点所在的包名 typeFILE_NAME 执行文件的名称如果是用Python编写的就填写xxx.py如果是cpp就写编译生成的可执行文件名 outputscreen 终端输出转储在当前的控制台上而不是在日志文件中 respawntrue 当roslaunch启动完所有该启动的节点之后会监测每一个节点保证它们正常的运行状态。对于任意节点当它终止时roslaunch 会将该节点重启 requiredtrue 当被此属性标记的节点终止时roslaunch会将其他的节点一并终止。注意此属性不可以与respawntrue一起描述同一个节点 launch-prefix command-prefix 我的理解是相当于在执行启动命令时加上一段命令前缀 ns NAME_SPACE 这个属性可以让你在自定义的命名空间里运行节点 1.2include
该标签可以导入另一个roslaunch XML文件到当前文件。 属性 属性作用 file $(find pkg-name)/path/filename.xml 指明我们想要包含进来的文件 nsNAME_SPACE 相对NAME_SPACE命名空间导入文件
使用起来就像下面这样
include file$(find demo)/launch/demo.launch nsdemo_namespace/ 1
1.3remap
remap标签顾名思义重映射ROS支持topic的重映射remap标签里包含一个original-name和一个new-name及原名称和新名称。 比如现在你拿到一个节点这个节点订阅了/chattertopic然而你自己写的节点只能发布到/demo/chattertopic由于这两个topic的消息类型是一致的你想让这两个节点进行通讯那么可以在launch文件中这样写
remap fromchatter todemo/chatter/ 1
这样就可以直接把/chattertopic重映射到/demo/chatter这样子不用修改任何代码就可以让两个节点进行通讯。 如果这个 remap标签写在与 node 元素的同一级而且在launch 元素内的最顶层。 那么这个重映射将会作用于launch文件中所有的节点。 1.4param
param标签的作用相当于命令行中的rosparam set 比如现在在参数服务器中添加一个名为demo_param值为666的参数
param namedemo_param typeint value666/ 1
1.5rosparam
rosparam标签允许从YAML文件中一次性导入大量参数。 使用起来就像这样
rosparam commandload file$(find pkg-name)/path/name.yaml/ 1
1.6arg
arg标签用来在launch文件中定义参数arg和param在ROS里有根本性的区别就像局部变量和全局变量的区别一样。arg不储存在参数服务器中不能提供给节点使用只能在launch文件中使用。param则是储存在参数服务器中可以被节点使用。
arg namedemo/ 1
像上面这样就简单地声明了一个参数名叫demo但是声明不等于定义我们需要给他赋值在赋值之后参数才能够发挥作用。
arg namedemo value666/ arg namedemo default666/ 1 2
以上是两种简单的赋值方法两者的区别是使用后者赋值的参数可以在命令行中像下面这样被修改前者则不行。
roslaunch demo demo.launch demo:6666 1
arg还有更加高级也更加灵活的用法 $(arg arg_name) 当$(arg arg_name)出现在launch文件任意位置时将会自动替代为所给参数的值。 1.7group
group标签可以将若干个节点同时划分进某个工作空间。
group nsdemo_1 node namedemo_1 pkgdemo_1 typedemo_pub_1 outputscreen/ node namedemo_1 pkgdemo_1 typedemo_sub_1 outputscreen/ /group group nsdemo_2 node namedemo_2 pkgdemo_2 typedemo_pub_2 outputscreen/ node namedemo_2 pkgdemo_2 typedemo_sub_2 outputscreen/ /group 1 2 3 4 5 6 7 8
group标签还可以做到对node的批量管理。比如我可以同时终止在同一个group中的节点。
group if1-or-0 …… …… …… /group
group unless1-or-0 …… …… …… /group 1 2 3 4 5 6 7 8 9 10 11
第一种情况当if属性的值为0的时候将会忽略掉group/group之间的标签。 第二种恰好相反当if属性的值为1的时候将会忽略掉group/group之间的标签。 但是我们通常不会直接用1或0来定义if标签。因为这样不够灵活。 通常会搭配$(arg arg_name)来使用。 demo.launch文件
launch include fileinclude.launch arg namedemo_arg value1/ /include /launch 1 2 3 4 5
include.launch文件
launch arg namedemo_arg/ group if$(demo_arg) node namedemo pkgdemo typedemo_pub outputscreen/ node namedemo pkgdemo typedemo_sub outputscreen/ /group /launch --------------------- 作者沐棋 来源CSDN 原文https://blog.csdn.net/weixin_41995979/article/details/81784987 版权声明本文为博主原创文章转载请附上博文链接