launch文件:通過XML文件實現多節點的配置和啟動(可自動啟動ROS Master)
launch文件中包含很多標簽和屬性
*launch文件語法
<launch> <node pkg="turtlesim" name = "sim1" type="turtlesim_nade"/> <node pkg="turtlesim" name = "sim2" type="turtlesim_node"/> </launch>
<launch> launch文件中的根元素采用<launch>標簽定義
啟動節點
<node pkg="package-name"type="executable-name"name="node-name"/>
* pkg: 節點所在的功能包名稱
<node> * type:節點的可執行文件名稱
* name: 節點運行時的名稱
* output 、respawn、required 、ns 、args
參數設置
<paran>/
<rosparam>
設置ROS系統運行中的參數,存儲在參數服務器中
<param name="output_frame"value="odom"/>
*name:參數名
*value:參數值
加載參數文件中的多個參數
<rosparam file="params.yaml" command="load" ns= "params"/>
<arg> launch文件內部的局部變量,僅限於launch文件使用 <arg name="arg-name" default="arg-value"/> * name: 參數名 * value: 參數值 調用如下 <param name="foo" value="$(arg arg-value"/> <node name="node" pkg="package"type="type" args="$(arg arg-name)"/>
重映射
標簽<remap> 重映射RoS計算圖資源的命名 <remap from="/turtlebot/cmd_vel"to="/cmd_vel"/> *from :原命名 * to : 映射之后的命名
嵌套
<include> 包含其他launch文件,類似C語言中的頭文件包含 <include file="$(dirname)/other.launch"/> *file :包含的其他launch文件路徑
我習慣的在src目錄下創建對應的功能包,為了更好的管理代碼空間
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_launch
下面介紹一些launch文件的應用例子
例1:simple.launch
1 <launch> 2 <node pkg="learning_topic" type="person_subscriber" name="talk er" output="screen" /> 3 <node pkg="learning_topic" type="person_publisher" name="liste ner" output="screen" /> 4 </launch>
這個launch文件比較簡單,用一個根標簽包含兩個node標簽,啟動兩個node節點,啟動launch文件如下,觀察到兩個節點並行運行。而且不需要再去啟動roscore,已經自動啟動了。
qqtsj ~ roslaunch learning_launch simple.launch ... logging to /home/qqtsj/.ros/log/a8e85210-44bd-11ea-aa0f-9822efa1466f/roslaunch-qqtsj-Nitro-AN515-51-21388.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://qqtsj-Nitro-AN515-51:35961/ SUMMARY ======== PARAMETERS * /rosdistro: melodic * /rosversion: 1.14.3 NODES / listener (learning_topic/person_publisher) talker (learning_topic/person_subscriber) auto-starting new master process[master]: started with pid [21398] ROS_MASTER_URI=http://localhost:11311 setting /run_id to a8e85210-44bd-11ea-aa0f-9822efa1466f process[rosout-1]: started with pid [21409] started core service [/rosout] process[talker-2]: started with pid [21412] process[listener-3]: started with pid [21414] [ INFO] [1580539196.883750317]: Publish Person Info: name:Tom age:18 sex:1 [ INFO] [1580539197.883984881]: Publish Person Info: name:Tom age:18 sex:1 [ INFO] [1580539197.884465911]: Subcribe Person Info: name:Tom age:18 sex:1 [ INFO] [1580539198.883864113]: Publish Person Info: name:Tom age:18 sex:1 [ INFO] [1580539198.884350887]: Subcribe Person Info: name:Tom age:18 sex:1
例2: turtlesim_parameter_config.launch
1 <launch> 2 3 <param name="/turtle_number" value="2"/> 4 5 <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_no de"> 6 <param name="turtle_name1" value="Tom"/> 7 <param name="turtle_name2" value="Jerry"/> 8 9 <rosparam file="$(find learning_launch)/config/param.yaml" command="load"/> 10 </node> 11 12 <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_te leop_key" output="screen"/> 13 14 </launch> 15 16
這個launch文件用於參數設置
qqtsj ~ roslaunch learning_launch turtlesim_parameter_config.launch ... logging to /home/qqtsj/.ros/log/fffc0146-44c2-11ea-aa0f-9822efa1466f/roslaunch-qqtsj-Nitro-AN515-51-23633.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://qqtsj-Nitro-AN515-51:36955/ SUMMARY ======== PARAMETERS * /rosdistro: melodic * /rosversion: 1.14.3 * /turtle_number: 2 * /turtlesim_node/A: 123 * /turtlesim_node/B: hello * /turtlesim_node/group/C: 456 * /turtlesim_node/group/D: hello * /turtlesim_node/turtle_name1: Tom * /turtlesim_node/turtle_name2: Jerry NODES / turtle_teleop_key (turtlesim/turtle_teleop_key) turtlesim_node (turtlesim/turtlesim_node) auto-starting new master process[master]: started with pid [23643] ROS_MASTER_URI=http://localhost:11311 setting /run_id to fffc0146-44c2-11ea-aa0f-9822efa1466f process[rosout-1]: started with pid [23654] started core service [/rosout] process[turtlesim_node-2]: started with pid [23661] process[turtle_teleop_key-3]: started with pid [23662] Reading from keyboard --------------------------- Use arrow keys to move the turtle.
qqtsj ~ rosparam list /background_b /background_g /background_r /rosdistro /roslaunch/uris/host_qqtsj_nitro_an515_51__36955 /rosversion /run_id /turtle_number /turtlesim_node/A /turtlesim_node/B /turtlesim_node/group/C /turtlesim_node/group/D /turtlesim_node/turtle_name1 /turtlesim_node/turtle_name2
例3:start_tf_demo_c++.launch
1 <launch> 2 3 <!-- Turtlesim Node--> 4 <node pkg="turtlesim" type="turtlesim_node" name="sim"/> 5 <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" o utput="screen"/> 6 7 <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/tu rtle1" name="turtle1_tf_broadcaster" /> 8 <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/tu rtle2" name="turtle2_tf_broadcaster" /> 9 10 <node pkg="learning_tf" type="turtle_tf_listener" name="listen er" /> 11 12 </launch>
這個launch文件是上講說的小海龜跟隨實例,這里不需要開啟5個終端,只需要運行對應的launch文件就可以了
qqtsj ~ roslaunch learning_launch start_tf_demo_c++.launch ... logging to /home/qqtsj/.ros/log/bb367d92-44cd-11ea-aa0f-9822efa1466f/roslaunch-qqtsj-Nitro-AN515-51-25949.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://qqtsj-Nitro-AN515-51:39467/ SUMMARY ======== PARAMETERS * /rosdistro: melodic * /rosversion: 1.14.3 NODES / listener (learning_tf/turtle_tf_listener) sim (turtlesim/turtlesim_node) teleop (turtlesim/turtle_teleop_key) turtle1_tf_broadcaster (learning_tf/turtle_tf_broadcaster) turtle2_tf_broadcaster (learning_tf/turtle_tf_broadcaster) auto-starting new master process[master]: started with pid [25959] ROS_MASTER_URI=http://localhost:11311 setting /run_id to bb367d92-44cd-11ea-aa0f-9822efa1466f process[rosout-1]: started with pid [25970] started core service [/rosout] process[sim-2]: started with pid [25973] process[teleop-3]: started with pid [25977] process[turtle1_tf_broadcaster-4]: started with pid [25979] Reading from keyboard --------------------------- Use arrow keys to move the turtle. process[turtle2_tf_broadcaster-5]: started with pid [25981] process[listener-6]: started with pid [25987]