機器人操做系統入門(二)ROS文件系統

參考資料: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

  • 軟件包編譯後無需安裝就可以使用
  • 自動生成 find_package() 代碼, pkg-config 文件
  • 解決了多個軟件包構建順序問題

一個Catkin的軟件包(package)必需要包括兩個文件:url

  • package.xml:包括了package的描述信息
  1. name, description, version, maintainer(s), license
  2. opt. authors, url's, dependencies, plugins, etc...
  • CMakeLists.txt:構建package所需的CMake文件
  1. 調用Catkin的函數/宏
  2. 解析 package.xml
  3. 找到其餘依賴的catkin軟件包
  4. 將本軟件包添加到環境變量

(2)工做原理

catkin編譯的工做流程以下:  //至關於封裝了cmake和make

  • 首先在工做空間 catkin_ws/src/ 下遞歸的查找其中每個ROS的package
  • package中會有 package.xml 和 CMakeLists.txt 文件,Catkin(CMake)編譯系統依據 CMakeLists.txt 文件,從而生成 makefiles (放在 catkin_ws/build/ )
  • 而後 make 剛剛生成的 makefiles 等文件,編譯連接生成可執行文件(放在 catkin_ws/devel )

注:要用catkin編譯一個工程或軟件包,只須要用 catkin_make 指令  //catkin編譯以前須要回到工做空間目錄, catkin_make 在其餘路徑下編譯不會成功,若是有新的目標文件產生須要緊接着「source刷新環境

2. Catkin工做空間

(1)初始化

1 $ mkdir -p ~/catkin_ws/src  
2 $ cd ~/catkin_ws/
3 $ catkin_make #初始化工做空間
  • catkin_make命令必須位於工做空間目錄catkin_ws下運行
  • 原先的初始化命令catkin_init_workspace在src目錄下運行

(2)結構介紹  //用 tree 命令查看

1 $ cd ~/catkin_ws
2 $ sudo apt install tree
3 $ tree

默認包含三個文件夾:

  • src/: ROS的catkin軟件包(源代碼包)
  • build/: catkin(CMake)的緩存信息和中間文件
  • devel/: 生成的目標文件(包括頭文件,動態連接庫,靜態連接庫,可執行文件等)、環境變量

編譯流程以下:

注:yaml文件通常存儲了ROS須要加載的參數信息,一些屬性的配置。一般在launch文件或程序中讀取.yaml文件,把參數加載到參數服務器上。

3. package軟件包  //catkin編譯的基本單元

(1)結構

一個package下常見的文件、路徑有

其中CMakeLists.txt和package.xml定義了整個package(必不可少

  • CMakeLists.txt: 定義package的包名、依賴、源文件、目標文件等編譯規則
  • package.xml: 描述package的包名、版本號、做者、依賴等信息
  • src/: 存放ROS的源代碼,包括C++的源碼和(.cpp)以及Python的module(.py)
  • include/: 存放C++源碼對應的頭文件
  • scripts/: 存放可執行腳本,例如shell腳本(.sh)、Python腳本(.py)
  • msg/: 存放自定義格式的消息(.msg)
  • srv/: 存放自定義格式的服務(.srv)
  • models/: 存放機器人或仿真場景的3D模型(.sda, .stl, .dae等)
  • urdf/: 存放機器人的模型描述(.urdf或.xacro)
  • launch/: 存放launch文件(.launch或.xml)

(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)做用

  • pacakge.xml 包含了package的名稱、版本號、內容描述、維護人員、軟件許可、編譯構建工具、編譯依賴、運行依賴等信息。
  • 實際上 rospack find 、 rosdep 等命令之因此能快速定位和分析出package的依賴項信息,就是直接讀取了每個package中的 package.xml 文件爲用戶提供了快速瞭解一個package的渠道

(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的不一樣之處

  • CMakeLists.txt :加入了catkin_metapackage()宏,指定本軟件包爲一個metapacakge
  • package.xml :標籤將全部軟件包列爲依賴項,標籤中添加標籤聲明。
相關文章
相關標籤/搜索