今天在拆整個pr2_manipulation相關的launch檔時,發現有很多地方都用到參數的true或false來判斷要不要執行某個launch檔或是node,感覺之後會常常用到,而且不弄懂要怎麼改值無法真正懂這些launch檔在寫什麼.
我先寫了一個簡單launch file(ricky_test_sim.launch),這個launch file會根據sim的值來決定要不要啟動gazebo並加入一些物體
<launch>
<arg name=”sim” default=”false”/>
<include if=”$(arg sim)” file=”$(find manipulation_worlds)/launch/pr2_table_object.launch”/>
</launch>
若直接啟動可想而知只會啟動roscore,因為launch檔中預設的sim是false.
———————————————–
要改變sim的值,方法就是寫另一個launch檔來呼叫, 寫法是
<launch>
<arg name=”sim” default=”true”/>
<include file=”/home/rosfuerte/project/ros/code_training/try_launch/ricky_test_sim.launch”>
<arg name=”sim” value=”$(arg sim)”/>
</include>
</launch>
直接在這個launch file裡面設定sim是true,然後把這個sim傳到它呼叫的launch file,也就是我寫的第一個launch file,這樣就可以修改了
這樣寫的好處是我如果開發了一個package,在寫launch檔時,可以先把一些別人可能會用到的功能寫在launch file裡,但用來判斷會不會用到這些功能的argument我都先預設為false,如果之後寫的application的launch檔會用到這些功能,在application的launch檔設為true即可.