package 軟件包
package是catkin編譯的最小單元,我們調用catkin_make編譯的對象就是一個個package,所以package也是ROS源碼存放的地方。
一個package常見的結構有:
├── CMakeLists.txt #package的編譯規則(必須)
├── package.xml #package的描述信息(必須)
├── src/ #源代碼文件
├── include/ #C++頭文件
├── scripts/ #可執行腳本
├── msg/ #自定義消息
├── srv/ #自定義服務
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件
通常ROS文件組織都是按照以上的形式,這是約定俗成的命名習慣,建議遵守。以上路徑 只有 CMakeLists.txt 和 package.xml 是必須的,其余路徑根據軟件包是否需要來決定 。
package創建
創建package需要工作空間的src目錄下,使用catkin_create_pkg package depends
其中package 是包名,depends是依賴的包名(如roscpp、rospy、std_msgs)執行命令后會自動完成軟件包的初始化,并將依賴包按格式寫入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]默認為當前目錄
rospack list #列出本機所有package
rospack find [package] #定位某個package
rospack profile [package] #刷新所有package位置記錄
rospack depends [package] #顯示package依賴包
roscd [package] #打開package
rosls [package] #相當于ls
rosdep check [package] #檢查package依賴是否滿足
rosdep install [package] #安裝package的依賴
rosdep db #生成和顯示依賴數據庫
rosdep init #初始化/etc/ros/rosdep中的源
rosdep keys 檢查package的依賴是否滿足
rosdep update 更新本地的rosdep數據庫
-
cmakelists.txt、package.xml文件介紹
CMakeList.txt指定源碼到目標文件的規則,該文件規定了package要依賴的包,編譯目標文件、編譯流程等。
cmakelists.txt寫法:
cmake_minimum_required() #CMake的版本號
project() #項目名稱
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新加宏,生成當前package的cmake配置,供依賴本包的其他軟件包調用 --重要
add_library() #生成庫
add_executable() #生成可執行二進制文件
add_dependencies() #定義目標文件依賴于其他目標文件,確保其他目標已被構建
target_link_libraries() #鏈接
catkin_add_gtest() #catkin新加宏,生成測試
install() #安裝至本機
語法推薦:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 。作者寫的很直白,掌握CMake語法可以加深理解ROS工程
package.xml 包含了package 的名稱、版本號、內容、編譯依賴、運行依賴等信息,實際上rospack find 、rosdep命令也是讀取該文件。
package.xml寫法:
package.xml有兩個版本,目前主流版本都支持。
版本一:
<pacakge> 根標記文件
<name> 包名
<version> 版本號
<description> 內容描述
<maintainer> 維護者
<license> 軟件許可證
<buildtool_depend> 編譯構建工具,通常為catkin --重要
<build_depend> 編譯依賴項,與Catkin中的 --總要
<run_depend> 運行依賴項 --重要
版本二:
<pacakge> 根標記文件
<name> 包名
<version> 版本號
<description> 內容描述
<maintainer> 維護者
<license> 軟件許可證
<buildtool_depend> 編譯構建工具,通常為catkin
#用depend來整合build_depend和run_depend
<depend> 指定依賴項為編譯、導出、運行需要的依賴,最常用 --重要
<build_depend> 編譯依賴項 --重要
<build_export_depend> 導出依賴項 --重要
#用depend來整合build_depend和run_depend
<exec_depend> 運行依賴項 --重要
<test_depend> 測試用例依賴項
<doc_depend> 文檔依賴項
-
機器人
+關注
關注
211文章
28445瀏覽量
207204 -
操作系統
+關注
關注
37文章
6834瀏覽量
123344 -
ROS
+關注
關注
1文章
278瀏覽量
17018
發布評論請先 登錄
相關推薦
評論