∙ \bullet ∙ 通过 XML 文件实现多节点的配置和启动。(可自动启动 ROS Master)
2、L aunch 文件语法
■
\blacksquare
■ < launch >:launch 文件中的根元素采用 < launch > 标签
■
\blacksquare
■ < node >:启动节点
< node pkg="package-name" type="executable-name"> name="node-name" />
∙
\bullet
∙ pkg:节点所在的功能包名称
∙
\bullet
∙ type:节点的可执行文件名称
∙
\bullet
∙ name:节点运行时的名称
∙
\bullet
∙ 其他参数:output(打印输出)、respawn(节点重启)、required(节点是否启动)、ns(命名空间)、args(给节点输入参数)
3、参数设置
■
\blacksquare
■ < param >/< rosparam >
∙
\bullet
∙ 设置 ROS 系统运行中的参数,存储在参数服务器中。
< param name="output_frame" value="odom"/>
∙
\bullet
∙ name:参数名
∙
\bullet
∙ value:参数值
∙
\bullet
∙ 加载参数文件中的多个参数:
<rosparam file="params.yaml" command="load" ns="params"/>
■
\blacksquare
■ < arg >
∙
\bullet
∙ launch 文件内部的局部变量,仅限于 launch 文件使用
<arg name="arg-name" default ="arg-value"/>
∙
\bullet
∙ name:参数名
∙
\bullet
∙ value:参数值
∙
\bullet
∙ 调用:
<param name="foo" value="$(arg arg-name)"/>
<node name="node" pkg="package" type="type" args="$(arg arg-name)"/>
4、重映射 < remap >
∙
\bullet
∙ 重映射 ROS 计算图资源的命名
<remap from="/turtlebot/cmd_vel" to="/cmd_vel"/>
∙
\bullet
∙ from:原命名
∙
\bullet
∙ to:映射之后的命名
5、嵌套 < include >
∙
\bullet
∙ 包含其他 launch 文件,类似 C 语言中的头文件包含。
<include file="$(dirname)/other.launch"/>
∙ \bullet ∙ file :包含的其他 launch 文件路径
其他更多标签可参见:http://wiki.ros.org/roslaunch/XML
6、创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_launch //无需依赖
7、在 learning_launch 下的 src 文件中创建 launch 文件夹
∙
\bullet
∙ 创建 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>
∙ \bullet ∙ 编译
cd ~/catkin_ws
catkin_make
∙ \bullet ∙ 启动 launch
roslaunch learning_launch simple.launch//roslaunch <功能包名> <launch名>
∙
\bullet
∙ 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>
∙ \bullet ∙ param.yaml
A: 123
B: "hello"
group:
C: 456
D: "hello"
∙ \bullet ∙ 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>
∙ \bullet ∙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>
备注:以上launch运行方法相同。