ROS系统 launch启动文件的使用方法
launch文件:通過XML文件實現(xiàn)多節(jié)點的配置和啟動(可以自動啟動ROS Master)
使用步驟
- 選定功能包右擊 —> 添加 launch 文件夾
- 選定 launch 文件夾右擊 —> 添加 launch 文件
- 編輯 launch 文件內(nèi)容
- 運行 launch 文件
- 運行結(jié)果: 一次性啟動了多個節(jié)點
launch文件語法:
<launch> launch文件中的根元素采用<llaunch>標簽定義
啟動節(jié)點
<node pkg=“package-name” type=“executable-name” name=“node-name”>
- pkg :節(jié)點所在的功能包名稱
- type:節(jié)點的可執(zhí)行文件名稱
- name:節(jié)點運行時的名稱
- output:設(shè)置日志的輸出目標
- respawn、required、ns、args
參數(shù)設(shè)置
<lparam> 和 <rosparam>
設(shè)置ROS系統(tǒng)運行中的參數(shù),存儲在參數(shù)服務(wù)器中。
<lparam name=“output_frame” value=“odom” />
- name:參數(shù)名
- value:參數(shù)值
加載參數(shù)文件中的多個參數(shù):
<rosparam file=“params.yaml” command=“l(fā)oad” ns=“params” />
<arg>
launch文件內(nèi)部的局部變量,僅限于launch文件使用
<arg name=“arg-name” default=“arg-value” />
- name:參數(shù)名
- value:參數(shù)值
調(diào)用:
<param name=“foo” value="$(arg arg-name)" />
<node name=“node” pkg=“package” type=“type” args="$(arg arg-name)" />
重映射
<remap>
重映射ROS計算圖資源的命名
<remap from=“/turtlebotcmd_vel” to="/cmd_vel" />
- from:原命名
- to:映射之后的命名
嵌套
<include>
包含其他launch文件,類似C語言中的頭文件包含。
<include file="$(dirname)/other.launch" />
- file:包含的其他launch文件路徑
更多標簽參考:http://wiki.ros.org/roslaunch/XML
使用 launch 標簽啟動兩個節(jié)點。
代碼實現(xiàn)話題消息的定義:
https://blog.csdn.net/qq_44989881/article/details/118574750
創(chuàng)建 learning_launch 工程包
cd ~/catkin_ws/src catkin_create_pkg learning_launch cd ~/catkin_ws/src/learning_launch創(chuàng)建 launch 文件夾
mkdir launch cd launch創(chuàng)建 simple.launch 文件
touch 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>配置完成后,對工程目錄進行編譯
cd ~/catkin_ws catkin_make啟動 launch 文件
指令格式:
例如:
roslaunch learning_launch simple.launch使用 launch 標簽讀取 yaml 文件的配置
cd ~/catkin_ws/src/learning_launch/launch touch turtlesim_parameter_config.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> cd ~/catkin_ws/src/learning_launch mkdir config cd config touch param.yaml在 param.yaml 文件中添加以下代碼:
A: 123 B: "hello"group:C: 456D: "hello" roslaunch learning_launch turtlesim_parameter_config.launch rosparam listtf坐標系廣播與監(jiān)聽,用launch文件配置啟動
用代碼創(chuàng)建tf坐標系廣播與監(jiān)聽的方法: https://blog.csdn.net/qq_44989881/article/details/118603453
cd ~/catkin_ws/src/learning_launch/launch touch start_tf_demo_c++.launch在 start_tf_demo_c++.launch 文件中添加以下代碼:
<launch><!-- 海龜仿真器--><node pkg="turtlesim" type="turtlesim_node" name="sim"/><!-- 鍵盤控制--><node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/><!-- 兩只海龜?shù)膖f廣播--><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" /><!-- 監(jiān)聽tf廣播,并且控制turtle2移動--><node pkg="learning_tf" type="turtle_tf_listener" name="listener" /></launch>啟動節(jié)點
roslaunch learning_launch start_tf_demo_c++.launch touch start_tf_demo_py.launch在 start_tf_demo_py.launch 文件中添加以下代碼:
<launch><!-- 海龜仿真器--><node pkg="turtlesim" type="turtlesim_node" name="sim"/><!-- 鍵盤控制--><node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/><!-- 兩只海龜?shù)膖f廣播--><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><!-- 監(jiān)聽tf廣播,并且控制turtle2移動--><node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" /></launch>啟動節(jié)點
roslaunch learning_launch start_tf_demo_py.launch可直接在該窗口控制海龜?shù)囊苿印?br />
使用 launch 標簽給話題名稱 起個別名
cd ~/catkin_ws/src/learning_launch/launch touch turtlesim_remap.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>啟動節(jié)點
roslaunch learning_launch turtlesim_remap.launch<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
注:用 /cmd_vel 替換了 /turtle1/cmd_vel,相當(dāng)于起了個別名。
踩坑
RLException: [start_turtle.launch] is neither a launch file in package [hello_world_c] nor is [hello_world_c] a launch file name
The traceback for the exception was written to the log file
解決方法:
錯誤原因:環(huán)境變量設(shè)置有問題,重新添加環(huán)境變量后再執(zhí)行roslaunch
總結(jié)
以上是生活随笔為你收集整理的ROS系统 launch启动文件的使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS系统实现 tf坐标系广播与监听
- 下一篇: ROS系统 常用可视化工具的使用