參考資料:git
https://www.icourse163.org/course/ISCAS-1002580008?tid=1003713012 //中國大學MOOCgithub
https://www.bilibili.com/video/av23401751 //B站shell
《ROS操做系統入門講義》PDF下載緩存
連接:https://pan.baidu.com/s/1OCja2WLDRnjYXMrpnZ3-sQ
提取碼:mziy服務器
第二章 ROS文件系統ide
1. Catkin編譯系統(Groovy版本後投入使用) //早期的ROS編譯系統是rosbuild函數
(1)特色工具
Catkin沿用了包管理的傳統像 find_package() 基礎結構, pkg-config;擴展了CMake,例如ui
一個Catkin的軟件包(package)必需要包括兩個文件:url
(2)工做原理
catkin編譯的工做流程以下: //至關於封裝了cmake和make
注:要用catkin編譯一個工程或軟件包,只須要用 catkin_make 指令 //catkin編譯以前須要回到工做空間目錄, catkin_make 在其餘路徑下編譯不會成功,若是有新的目標文件產生須要緊接着「source刷新環境」
2. Catkin工做空間
(1)初始化
1 $ mkdir -p ~/catkin_ws/src 2 $ cd ~/catkin_ws/ 3 $ catkin_make #初始化工做空間
(2)結構介紹 //用 tree 命令查看
1 $ cd ~/catkin_ws 2 $ sudo apt install tree 3 $ tree
默認包含三個文件夾:
編譯流程以下:
注:yaml文件通常存儲了ROS須要加載的參數信息,一些屬性的配置。一般在launch文件或程序中讀取.yaml文件,把參數加載到參數服務器上。
3. package軟件包 //catkin編譯的基本單元
(1)結構
一個package下常見的文件、路徑有
其中CMakeLists.txt和package.xml定義了整個package(必不可少)
(2)package的建立:catkin_create_pkg 命令
用法:catkin_create_pkg 包名 依賴項 // 如catkin_create_pkg test_pkg roscpp rospy std_msgs
(3)相關命令
經常使用命令:rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y //用於安裝工做空間中 src 路徑下全部package的依賴項(由pacakge.xml文件指定)
4. CMakeLists.txt:規定了package要依賴哪些package,要編譯生成哪些目標,如何編譯等等流程
很是重要,它指定了由源碼到目標文件的規則,catkin編譯系統在工做時首先會找到每一個package下的CMakeLists.txt,而後按照規則來編譯構建。
(1)寫法 //進一步的CMake語法可參考《CMake實踐》:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf
整體的宏結構以下:
(2)示例(turtlesim包下的turtlesim/CMakeLists.txt)
5. package.xml:軟件包的描述文件,描述包的基本信息
(1)做用
(2)寫法:遵循xml標籤的寫法
格式1(old):
其中,1-6爲必備標籤
格式2(new):
(3)示例(turtlesim/package)
老版本
新版本
6. Metapackage //老版本里的概念爲「功能包集」stack
做用:將一些相近的功能模塊、軟件包放到一塊兒
(1)常見metapackage
其中,navigation metapackage包含如下軟件包:
navigation就是一個簡單的package,裏面只有幾個文件,但它依賴了其餘全部的軟件包
(2)寫法 //metapackage爲虛包,無具體的包文件
通常有且僅有兩個文件:CMakeLists.txt 和 pacakge.xml
CMakeLists.txt 寫法以下:
1 cmake_minimum_required(VERSION 2.8.3) 2 project(ros_academy_for_beginners) 3 find_package(catkin REQUIRED) 4 catkin_metapackage() #聲明本軟件包是一個metapacakge
package.xml 寫法以下:
與普通package的不一樣之處: