1.ros元功能包:
1.1
在ROS中,提供了一種方式可以将不同的功能包打包成一個功能包,當安裝某個功能子產品時,直接調用打包後的功能包即可,該包又稱之為元功能包(metapackage)。MetaPackage是Linux的一個檔案管理系統的概念。是ROS中的一個虛包,裡面沒有實質性的内容,但是它依賴了其他的軟體包,通過這種方法可以把其他包組合起來,我們可以認為它是一本書的目錄索引,告訴我們這個包集合中有哪些子包,并且該去哪裡下載下傳。
作用:友善使用者的安裝,我們隻需要這一個包就可以把其他相關的軟體包組織到一起安裝了。
1.2元功能包的建立:
與建立功能包一樣的流程,隻是配置檔案不一樣。
建立一個功能包,依賴不需要添加任何東西

cmakelists檔案如下:
注意:CMakeLists.txt 中不可以有換行。
修改修改package.xml
<exec_depend>被內建的功能包</exec_depend>
.....
<export>
<metapackage />
</export>
比如:
2.launch檔案編寫與基本文法:
2.1launch檔案介紹
launch 檔案是一個 XML 格式的檔案,可以啟動本地和遠端的多個節點,還可以在參數伺服器中設定參數。作用:簡化節點的配置與啟動,提高ROS程式的啟動效率。
2.2以 turtlesim 為例示範:
建立一個功能包,添加依賴 roscpp rospy std_msgs turtlesim
建立一個叫launch的檔案夾,并建立一個test_launch.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。
2.3 launch檔案标簽之launch:
1.屬性
-
告知使用者目前 launch 檔案已經棄用deprecated = "棄用聲明"
2.子級标簽
所有其它标簽都是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.子級标簽
- 無