launch文件的理解

来源:互联网 发布:淘宝客的链接怎么看 编辑:程序博客网 时间:2024/05/02 04:45

Launch中节点的添加与重映射:

<launch>

<groupns="turtlesim1">

     <nodepkg="turtlesim"name="sim"type="turtlesim_node"/>

</group>

<groupns="turtlesim2">

     <node pkg="turtlesim"name="sim"type="turtlesim_node"/>

</group>

       <groupns="turtlesim3">

     <nodepkg="turtlesim"name="sim"type="turtlesim_node"/>

</group>    

            <node pkg="turtlesim" name="turtle_mimic"type="mimic">

             <remapfrom="input"to="turtlesim1/turtle1"/>

             <remapfrom="output"to="turtlesim2/turtle1"/>

             </node>

             <node pkg="turtlesim"name="turtle_mimic1"type="mimic">

             <remap from="input"to="turtlesim1/turtle1"/>

             <remapfrom="output"to="turtlesim3/turtle1"/>

            </node>   

</launch>


<include> 包含其他文件,包含文件中定义的参数、变量、节点都会按深度优先遍历依次执行生效

<arg> 参数声明,arg_1通过命令行传递,arg_2 传递到included.launch, arg_3 默认值可以被重写覆盖,agr_4不能被重写

<argname="arg_1" />

    <param name="param_1"value="$(arg arg_1)"/>

<launch>

          <arg name="arg_2" />

          <param name="param_2"value="$(arg arg_2)"/>

</launch>

<includefile="$(find pkg_name)/path-to/included.launch"ns="namespace">  

        <arg name="arg_2"  value="value" />

</include>

<argname="arg_3" default="value" />

    <arg name="arg_4"  value="value" />

    <node pkg="pkg_name"type="exe_name" name="node_name1" args="arg1 arg2arg3" respawn="true" output="screen"> 

        <param name="name1"type="double" value="10.0"/>

        <param name="name2"value="$(arg arg_1)"/>

        <param name="name3" value="$(envENVIRONMENT_VARIABLE_NAME)"/>

        <param name="name4"command="$(find pkg_name)/path-to/exe '$(findpkg_name)/path-to/arg.txt'"/>

<param>:设置变量到参数服务器,参数服务器的概念看ros wiki

<rosparam>:dump/load、delete parametersfrom/to  Parameter Server,常用来加载程序的参数配置文件到参数服务器,然后程序从参数服务器取得参数值;

<remap>:名称映射 from:被映射名称to:目标名称,名称映射的概念看ros wiki

<remapfrom="laser_topic" to="/scan"/>

        <remap from="base_link"to="$(arg arg_1)"/>

        <rosparam command="load"file="$(find pkg_name)/example.yaml"/>

<paramname="frame_id" value="$(arg frame_id)"/>

 

    <group if="$(arguse_rviz)">

      <node pkg="rviz"type="rviz" name="rviz"

            args="-d $(findpkg_name)/launch/VLP16_2D.rviz"/>

    </group>

</launch>

上面的launch文件首先声明了一些参数,之后include另一个launch文件,included.launch文件中的节点会按深度优先执行配置和启动;

之后该launch文件启动3个节点,前两个节点来自同一个包的同一个可执行文件,节点命名不能相同,每个节点可以进行自己的参数配置;

之后该launch文件启动rviz节点,参数传递 rviz的配置文件,不同配置用于显示不同的信息

<group>可以作为一组标签的容器,从而使该组有独立的名称空间

所以标签可使用 if/unless属性,如果条件成立则包含标签

<node>常用属性tag:

    pkg:"pkg_name"  包名

    type:"exe_name"  节点类型,即编译生成的可执行文件

    name:"node_name" 节点名称,自定义但不能重复

    args:"arg1 ..."  传递节点的参数列表

    respawn:"true" 如果节点退出自动重启 default:false

    output:"screen" 标准输出/标准错误输出重定向屏幕,log重定向log文件,default:log

    required:"true" 如果节点退出,杀死全部launch进程

    launch-prefix:"prefix arguments" 前置的参数,可以使用其他工具如gdb,valgrind

 

1. sys.exit(n) 退出程序引发SystemExit异常, 可以捕获异常执行些清理工作. n默认值为0, 表示正常退出. 其他都是非正常退出. 还可以sys.exit("sorry, goodbye!"); 一般主程序中使用此退出.
2. os._exit(n), 直接退出, 不抛异常, 不执行相关清理工作. 常用在子进程的退出.
3. exit()/quit(), 跑出SystemExit异常. 一般在交互式shell中退出时使用.

os._exit() 直接退出 Python 解释器,其后的代码都不执行。
sys.exit() 引发一个 SystemExit 异常,没有捕获这个异常,会直接退出;捕获这个异常可以做一些额外的清理工作。
exit() 跟 C 语言等其他语言的 exit() 应该是一样的。


一般来说os._exit()用于在线程中退出
sys.exit()
用于在主线程中退出。

exit(0)和exit(1)

exit(0):无错误退出 
exit(1):有错误退出 
退出代码是告诉解释器的(或操作系统


原创粉丝点击