package 軟件包
package是catkin編譯的最小單元,我們調(diào)用catkin_make編譯的對(duì)象就是一個(gè)個(gè)package,所以package也是ROS源碼存放的地方。
一個(gè)package常見的結(jié)構(gòu)有:
├── CMakeLists.txt #package的編譯規(guī)則(必須)
├── package.xml #package的描述信息(必須)
├── src/ #源代碼文件
├── include/ #C++頭文件
├── scripts/ #可執(zhí)行腳本
├── msg/ #自定義消息
├── srv/ #自定義服務(wù)
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件
通常ROS文件組織都是按照以上的形式,這是約定俗成的命名習(xí)慣,建議遵守。以上路徑 只有 CMakeLists.txt 和 package.xml 是必須的,其余路徑根據(jù)軟件包是否需要來決定 。
package創(chuàng)建
創(chuàng)建package需要工作空間的src目錄下,使用catkin_create_pkg package depends
其中package 是包名,depends是依賴的包名(如roscpp、rospy、std_msgs)執(zhí)行命令后會(huì)自動(dòng)完成軟件包的初始化,并將依賴包按格式寫入CMakeList.txt、package.xml.
gaocancan@ubuntu:~/catkin_test/src$ catkin_create_pkg catkin_test_pkg roscpp rospy std_msg
Created file catkin_test_pkg/CMakeLists.txt
Created file catkin_test_pkg/package.xml
Created folder catkin_test_pkg/include/catkin_test_pkg
Created folder catkin_test_pkg/src
Successfully created files in /home/gaocancan/catkin_test/src/catkin_test_pkg. Please adjust the values in package.xml.
gaocancan@ubuntu:~/catkin_test/src$ tree
.
├── catkin_test_pkg
│ ├── CMakeLists.txt
│ ├── include
│ │ └── catkin_test_pkg
│ ├── package.xml
│ └── src
└── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
4 directories, 3 files
gaocancan@ubuntu:~/catkin_test/src$
常用ros 命令:
如果不指定 [package]默認(rèn)為當(dāng)前目錄
rospack list #列出本機(jī)所有package
rospack find [package] #定位某個(gè)package
rospack profile [package] #刷新所有package位置記錄
rospack depends [package] #顯示package依賴包
roscd [package] #打開package
rosls [package] #相當(dāng)于ls
rosdep check [package] #檢查package依賴是否滿足
rosdep install [package] #安裝package的依賴
rosdep db #生成和顯示依賴數(shù)據(jù)庫
rosdep init #初始化/etc/ros/rosdep中的源
rosdep keys 檢查package的依賴是否滿足
rosdep update 更新本地的rosdep數(shù)據(jù)庫
-
cmakelists.txt、package.xml文件介紹
CMakeList.txt指定源碼到目標(biāo)文件的規(guī)則,該文件規(guī)定了package要依賴的包,編譯目標(biāo)文件、編譯流程等。
cmakelists.txt寫法:
cmake_minimum_required() #CMake的版本號(hào)
project() #項(xiàng)目名稱
find_package() #找到編譯需要的其他CMake/Catkin package
catkin_python_setup() #catkin新加宏,打開catkin的Python Module的支持
add_message_files() #catkin新加宏,添加自定義Message/Service/Action文件
add_service_files()
add_action_files()
generate_message() #catkin新加宏,生成不同語言版本的msg/srv/action接口 --重要
catkin_package() #catkin新加宏,生成當(dāng)前package的cmake配置,供依賴本包的其他軟件包調(diào)用 --重要
add_library() #生成庫
add_executable() #生成可執(zhí)行二進(jìn)制文件
add_dependencies() #定義目標(biāo)文件依賴于其他目標(biāo)文件,確保其他目標(biāo)已被構(gòu)建
target_link_libraries() #鏈接
catkin_add_gtest() #catkin新加宏,生成測(cè)試
install() #安裝至本機(jī)
語法推薦:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 。作者寫的很直白,掌握CMake語法可以加深理解ROS工程
package.xml 包含了package 的名稱、版本號(hào)、內(nèi)容、編譯依賴、運(yùn)行依賴等信息,實(shí)際上rospack find 、rosdep命令也是讀取該文件。
package.xml寫法:
package.xml有兩個(gè)版本,目前主流版本都支持。
版本一:
<pacakge> 根標(biāo)記文件
<name> 包名
<version> 版本號(hào)
<description> 內(nèi)容描述
<maintainer> 維護(hù)者
<license> 軟件許可證
<buildtool_depend> 編譯構(gòu)建工具,通常為catkin --重要
<build_depend> 編譯依賴項(xiàng),與Catkin中的 --總要
<run_depend> 運(yùn)行依賴項(xiàng) --重要
版本二:
<pacakge> 根標(biāo)記文件
<name> 包名
<version> 版本號(hào)
<description> 內(nèi)容描述
<maintainer> 維護(hù)者
<license> 軟件許可證
<buildtool_depend> 編譯構(gòu)建工具,通常為catkin
#用depend來整合build_depend和run_depend
<depend> 指定依賴項(xiàng)為編譯、導(dǎo)出、運(yùn)行需要的依賴,最常用 --重要
<build_depend> 編譯依賴項(xiàng) --重要
<build_export_depend> 導(dǎo)出依賴項(xiàng) --重要
#用depend來整合build_depend和run_depend
<exec_depend> 運(yùn)行依賴項(xiàng) --重要
<test_depend> 測(cè)試用例依賴項(xiàng)
<doc_depend> 文檔依賴項(xiàng)
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28593瀏覽量
207829 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6870瀏覽量
123548 -
ROS
+關(guān)注
關(guān)注
1文章
279瀏覽量
17045
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論