天天看點

(13)ROS學習-ros元功能包與launch檔案文法

1.ros元功能包:

1.1

在ROS中,提供了一種方式可以将不同的功能包打包成一個功能包,當安裝某個功能子產品時,直接調用打包後的功能包即可,該包又稱之為元功能包(metapackage)。MetaPackage是Linux的一個檔案管理系統的概念。是ROS中的一個虛包,裡面沒有實質性的内容,但是它依賴了其他的軟體包,通過這種方法可以把其他包組合起來,我們可以認為它是一本書的目錄索引,告訴我們這個包集合中有哪些子包,并且該去哪裡下載下傳。

作用:友善使用者的安裝,我們隻需要這一個包就可以把其他相關的軟體包組織到一起安裝了。

1.2元功能包的建立:

與建立功能包一樣的流程,隻是配置檔案不一樣。

建立一個功能包,依賴不需要添加任何東西

(13)ROS學習-ros元功能包與launch檔案文法

 cmakelists檔案如下:

(13)ROS學習-ros元功能包與launch檔案文法

 注意:CMakeLists.txt 中不可以有換行。

修改修改package.xml

<exec_depend>被內建的功能包</exec_depend>
 .....
 <export>
   <metapackage />
 </export>
           

比如:

(13)ROS學習-ros元功能包與launch檔案文法

 2.launch檔案編寫與基本文法:

2.1launch檔案介紹

launch 檔案是一個 XML 格式的檔案,可以啟動本地和遠端的多個節點,還可以在參數伺服器中設定參數。作用:簡化節點的配置與啟動,提高ROS程式的啟動效率。

2.2以 turtlesim 為例示範:

建立一個功能包,添加依賴 roscpp rospy std_msgs turtlesim

(13)ROS學習-ros元功能包與launch檔案文法

 建立一個叫launch的檔案夾,并建立一個test_launch.launch的檔案。

(13)ROS學習-ros元功能包與launch檔案文法
<launch>
    <node pkg="turtlesim" type="turtlesim_node"     name="myTurtle" output="screen" />
    <node pkg="turtlesim" type="turtle_teleop_key"  name="myTurtleContro" output="screen" />
</launch>
           

編譯運作,roslaunch 指令執行launch檔案時,首先會判斷是否啟動了 roscore,如果啟動了,則不再啟動,否則,會自動調用 roscore。

(13)ROS學習-ros元功能包與launch檔案文法

2.3  launch檔案标簽之launch:

1.屬性

  • deprecated = "棄用聲明"

    告知使用者目前 launch 檔案已經棄用

2.子級标簽

所有其它标簽都是launch的子級

如果繼續使用,可以運作成功,但是會把棄用聲明列印出來。

(13)ROS學習-ros元功能包與launch檔案文法
(13)ROS學習-ros元功能包與launch檔案文法

 2.4launch檔案标簽之node:

<node>

标簽用于指定 ROS 節點,是最常見的标簽,需要注意的是: roslaunch 指令不能保證按照 node 的聲明順序來啟動節點(節點的啟動是多程序的)

1.屬性

  • pkg="包名"

    節點所屬的包

  • type="nodeType"

    節點類型(與之相同名稱的可執行檔案)

  • name="nodeName"

    節點名稱(在 ROS 網絡拓撲中節點的名稱)

  • args="xxx xxx xxx" (可選)

    将參數傳遞給節點

  • machine="機器名"

    在指定機器上啟動節點

  • respawn="true | false" (可選)

    如果節點退出,是否自動重新開機

  • respawn_delay=" N" (可選)

    如果 respawn 為 true, 那麼延遲 N 秒後啟動節點

  • required="true | false" (可選)

    該節點是否必須,如果為 true,那麼如果該節點退出,将殺死整個 roslaunch

  • ns="xxx" (可選)

    在指定命名空間 xxx 中啟動節點

  • clear_params="true | false" (可選)

    在啟動前,删除節點的私有空間的所有參數

  • output="log | screen" (可選)

    日志發送目标,可以設定為 log 日志檔案,或 screen 螢幕,預設是 log

2.子級标簽

  • env 環境變量設定
  • remap 重映射節點名稱
  • rosparam 參數設定
  • param 參數設定

2.5launch檔案标簽之include:

1.屬性

  • file="$(find 包名)/xxx/xxx.launch"

    要包含的檔案路徑

  • ns="xxx" (可選)

    在指定命名空間導入檔案

2.子級标簽

  • env 環境變量設定
  • arg 将參數傳遞給被包含的檔案

2.5launch檔案标簽之remap

用于話題重命名

1.屬性

  • from="xxx"

    原始話題名稱

  • to="yyy"

    目标名稱

2.子級标簽

2.6launch檔案标簽之param

<param>

标簽主要用于在參數伺服器上設定參數,參數源可以在标簽中通過 value 指定,也可以通過外部檔案加載,在

<node>

标簽中時,相當于私有命名空間。

1.屬性

  • name="命名空間/參數名"

    參數名稱,可以包含命名空間

  • value="xxx" (可選)

    定義參數值,如果此處省略,必須指定外部檔案作為參數源

  • type="str | int | double | bool | yaml" (可選)

    指定參數類型,如果未指定,roslaunch 會嘗試确定參數類型,規則如下:

    • 如果包含 '.' 的數字解析未浮點型,否則為整型
    • "true" 和 "false" 是 bool 值(不區分大小寫)
    • 其他是字元串

2.子級标簽

2.7launch檔案标簽之rosparam

<rosparam>

标簽可以從 YAML 檔案導入參數,或将參數導出到 YAML 檔案,也可以用來删除參數,

<rosparam>

标簽在

<node>

标簽中時被視為私有。

1.屬性

  • command="load | dump | delete" (可選,預設 load)

    加載、導出或删除參數

  • file="$(find xxxxx)/xxx/yyy...."

    加載或導出到的 yaml 檔案

  • param="參數名稱"
  • ns="命名空間" (可選)

2.子級标簽

2.8launch檔案标簽之group

<group>

标簽可以對節點分組,具有 ns 屬性,可以讓節點歸屬某個命名空間

1.屬性

  • ns="名稱空間" (可選)
  • clear_params="true | false" (可選)

    啟動前,是否删除組名稱空間的所有參數(慎用....此功能危險)

2.子級标簽

  • 除了launch 标簽外的其他标簽

2.9launch檔案标簽之arg

<arg>

标簽是用于動态傳參,類似于函數的參數,可以增強launch檔案的靈活性

1.屬性

  • name="參數名稱"
  • default="預設值" (可選)
  • value="數值" (可選)

    不可以與 default 并存

  • doc="描述"

    參數說明

2.子級标簽

繼續閱讀