古月居 ROS入门21讲 第十九讲 launch启动文件的使用方法
Launch文件:通过配置XML文件实现多节点的配置与启动(可自动启动Master)
创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_launch
cd learn_launch
mkdir launch
创建launch文件
cd launch
vim simple.launch
输入以下内容
<launch>
<node pkg="learning_topic" type="person_subscriber" name="listener" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="talker" output="screen" />
</launch>
编译并运行
catkin_make
roslaunch learning_launch simple.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" output="screen" />
</launch>
需要在learning_launch文件夹下创建config文件夹,再创建param.xml:
A: 123
B: "hello"
group:
C: 456
D: "world"
运行时遇到错误:
RLException: error loading <rosparam> tag:
file does not exist [${find learning_launch}/config/param.yaml]
XML is <rosparam command=“load” file="${find learning_launch}/config/param.yaml"/>
解决
- 将
${find learning_launch}
改为$(find learning_launch)
- 如果将
${find learning_launch}
写为绝对路径也会报相同的错。
start_tf_demo_c++.launch
<launch>
<node name="sim" pkg="turtlesim" type="turtlesim_node"/>
<node name="teleop" pkg="turtlesim" type="turtle_teleop_key" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" name="turtle1_tf_broadcaster" args="turtle1"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" name="turtle2_tf_broadcaster" args="turtle2"/>
<node pkg="learning_tf" type="turtle_tf_listener" name="listener"/>
</launch>
~
start_tf_demo_py.launch
<launch>
<node name="sim" pkg="turtlesim" type="turtlesim_node"/>
<node name="teleop" pkg="turtlesim" type="turtle_teleop_key" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster.py" name="turtle1_tf_broadcaster" args="_turtle:=turtle1"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster.py" name="turtle2_tf_broadcaster" args="_turtle:=turtle2"/>
<node pkg="learning_tf" type="turtle_tf_listener.py" name="listener"/>
</launch>
或
<launch>
<node name="sim" pkg="turtlesim" type="turtlesim_node"/>
<node name="teleop" pkg="turtlesim" type="turtle_teleop_key" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster.py" name="turtle1_tf_broadcaster">
<param name="turtle" type="string" value="turtle1"/>
</node>
<node pkg="learning_tf" type="turtle_tf_broadcaster.py" name="turtle2_tf_broadcaster">
<param name="turtle" type="string" value="turtle2"/>
</node>
<node pkg="learning_tf" type="turtle_tf_listener.py" name="listener"/>
</launch>
turtlesim_remap.launch
<launch>
<include file="$(find learning_launch)/launch/simple.launch"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim">
<remap from="/turtle1/cmd_vel" to="cmd_vel"/>
</node>
</launch>
~