iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0
Software Development

ROS進階學習筆記系列 第 7

Day 07 - 好用的腳本 roslaunch (2)

  • 分享至 

  • xImage
  •  

有鑑於昨天寫的文章被我同事看到(可惡好赤裸)以後說寫得太不完整了,決定今天再給他補完整一點XD

include launch

昨天寫的比較著重在使用launch檔執行node所需要的標籤,但其實launch檔也可以拿來執行另外一個launch檔:

<include file="$(find package)/launch/velodyne_vlp16_multi.launch" />

並且在launch內也可以下$的符號,跟shell script一樣可以定義參數以後在標籤內加入:

<!-- 先定義好參數以後 -->
<arg name="arg_name" 		default="arg_value" />

<node pkg="pkg_name" type="exec_node_name" name="node_name" 
		args="$(arg arg_name_1) $(arg arg_name_2)" />

<!-- 另外一種用法就是直接加在標籤內 -->
<include file="$(find pkg_name)/launch_files/launch_name.launch">
		<arg name="launch_arg" value="$(arg arg_name)" />
	</include>
  • launch_arg就是launch檔內需要的參數名稱,可以透過後面的value賦值給他。

arg標籤

剛剛寫的arg標籤設定數值的方式可以使用default和value兩種方式,其差別在於使用default的時候可以在cmd 下執行launch檔的時候修改參數值,value就是直接給定值了:

<arg name="arg_name" 		default="arg_value" />
<arg name="arg_name" 		value="arg_value" />

cmd:
$ roslaunch pkg_name launch_name.launch launch_arg:=arg_name

param 和 rosparam

都講到了arg,好像也不能免俗的講一下param和rosparam,基本上param對我來說是跟arg一樣的存在,只是一個可以用在include和node標籤中,另外一個只能用在node標籤內,所以誰比較好用應該很清楚了吧XD
arg是原生xml的標籤,param和rosparam算是ros新增出來的標籤,param用法跟arg很像,但是可以被ros master管理。而rosparam標籤就是用來管理param的,跟cmd直接下rosparam有一樣的效果。
用法:

	<param name="/param_name"	value="$(arg arg1)" />
    <rosparam command="delete" param="/param_name" />

如果加在node標籤底下,就會成為區域變數,若設定為全域變數的話,在cmd可以下rosparam set/get指令接收,詳細用法請參考我兩年前寫的文章,在此不贅述。

最後來個完整launch應該長怎樣的架構

<launch>
<!-- 參數定義在這邊 -->
	<arg name="arg1" 		default="lalala_input_arg_value" />
    <arg name="arg2" 		value="lalala_input_arg_value" />

	<param name="/param_name"	value="$(arg arg1)" />
    
<!-- 用launch執行launch檔-->
	<include file="$(find pkg_name)/launch_files/setup_tf.launch">
		<arg name="launch_arg" 				default="$(arg arg_name)"/>
	</include>

<!-- 執行node檔 -->
	<node pkg="pkg_name" type="node_name" name="node_mame" respawn="true">
		<param name="param_name" value="lalala_param_value" /> 
        <!-- 偷渡昨天的remap用法 -->
		<remap from="/points_raw" to="/sync_drivers/points_raw" if="$(arg sync)" />
	</node>

</launch>

Reference

http://wiki.ros.org/roslaunch/XML
https://durant35.github.io/2017/07/14/ROS_%3Carg%3E$%3Cparam%3E$%3Crosparam%3E/


上一篇
Day 06 - 好用的腳本 roslaunch
下一篇
Day 08 - package.xml 的奧妙
系列文
ROS進階學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言