ROS实践手册(九)Launch文件启动

笔者根据 古月居 · ROS入门21讲 学习整理,并参考《ROS机器人开发实践》一书。
相关课件及源码可参考 Github/huchunxu/ros_21_tutorials

Launch文件常用语法

  • : 根元素标签 <launch> </launch>
  • : 启动节点 <node pkg="package-name" type="executable-name" name="node-name" />
    • pkg: 节点所在功能包名称
    • type: 节点的可执行文件名称
    • name: 节点运行时的名称
    • 可选属性
      • output: 是否在终端打印日志信息
      • respawn: 节点若发生故障是否重启
      • required: 节点是否必须启动
      • ns: 命名空间namespace避免命名冲突
      • args: 节点所需的运行参数
  • : 设置参数 `` * name: 参数名 * value: 参数值
  • : 加载参数文件中的多个参数 <rosparam file="params.yaml" command="load" ns="params" />
    • file: yaml参数配置文件
    • command: 加载指令
      • list:列出当前所有参数
      • dump:保存参数到文件
      • load:从文件读取参数
    • ns: 命名空间namespace避免命名冲突
  • : launch文件内部的局部变量,仅限于launch文件使用 <arg name="arg-name" default="arg-value" />
    • name: 参数名
    • value: 参数值
    • 调用
      • <param name="foo" value="$(arg arg-name)" />
      • <node name="node" pkg="package" type="type" args="$(arg arg-name)" />
  • : 重映射ROS计算图资源 <remap from="/turtlebot/cmd_vel" to="/cmd_vel" />
    • from: 原命名
    • to: 映射之后的命名
  • : 嵌套包含其他launch文件,类似C语言中的头文件包含 <include file="$(dirname)/other.launch" />
    • file: 包含的其他launch文件的路径
  • 更多标签可参见:http://wiki.ros.org/roslaunch/XML

simple.launch实践

  • 右键点击 ROS 工作区下的 “catkin_ws/src” ,选择 “新建ROS包” ,输入包名称及其依赖包的名称 learning_launch ,回车后,会创建名为 “learning_launch” 无依赖的 ROS 包。
  • 右键点击 catkin_ws/src/learning_launch/launch 文件夹,点击 “新建launch文件” 输入文件名simple.launch
  • 编辑 simple.launch 文件如下。
<launch>
    <node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
    <node pkg="learning_topic" type="person_publisher" name="listener" output="screen" /> 
</launch>

  • 在主界面左上角,修改资源管理器旁的构建方式为“Debug”,并点击小锤子进行构建
  • 无需启动roscore,因为launch文件启动方式默认启动roscore。
  • 在主界面右侧下方点击“+”创建新终端,输入$ source devel/setup.bash。输入$ roslaunch learning_launch simple.launch启动

其他launch实例文件

start_tf_demo_c++.launch

<launch>
    <!-- Turtlesim Node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
    <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
    <node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
 </launch>

start_tf_demo_py.launch

<launch>
    <!-- Turtlesim Node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
    <node name="turtle1_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
    	<param name="turtle" type="string" value="turtle1" />
    </node>
    <node name="turtle2_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
    	<param name="turtle" type="string" value="turtle2" /> 
    </node>
    <node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" />
</launch>

turtlesim_parameter_config.launch

<launch>
    <param name="/turtle_number"   value="2"/>
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
        <param name="turtle_name1"   value="Tom"/>
        <param name="turtle_name2"   value="Jerry"/>
        <rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
    </node>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>

turtlesim_remap.launch

<launch>
    <include file="$(find learning_launch)/launch/simple.launch" />
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
        <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
    </node>
</launch>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章