ROS总结一,catkin,package,CMakeList,Topic,node
ROS系統(tǒng)學(xué)習(xí)已經(jīng)有幾周了,但是感覺學(xué)的效率有點低。不過還是要把總結(jié)先寫了,以盡快進入下一階段學(xué)習(xí)。
PS:這篇總結(jié)主要是根據(jù)MOOC網(wǎng)中科院老師的講義來的。
推薦學(xué)習(xí),網(wǎng)址:https://www.icourse163.org/learn/ISCAS-1002580008?tid=1002759011#/learn/content?type=detail&id=1003899799&cid=1004769692
catkin編譯系統(tǒng)
catkin的誕生是為了替代rosbuild
一個Catkin的軟件包( package) 必須要包括兩個文件:
package.xml: 包括了package的描述信息
name, description, version, maintainer(s), license
opt. authors, url’s, dependencies, plugins, etc…
CMakeLists.txt: 構(gòu)建package所需的CMake文件
調(diào)用Catkin的函數(shù)/宏
解析 package.xml
找到其他依賴的catkin軟件包
將本軟件包添加到環(huán)境變量
catkin的編譯指令為catkin_make。catkin_make一般在創(chuàng)建包之后使用,它可以幫你寫好部分CMakeLists和package.xml的內(nèi)容,所以每一次包的內(nèi)容修改之后就catkin_make一下。就像編完代碼要運行之前必須先編譯。catkin_make也可以有一些參數(shù)如下:
catkin_make [args]
-h, --help 幫助信息
-C DIRECTORY, --directory DIRECTORY 工作空間的路徑 (默認(rèn)為 ‘.’)
–source SOURCE src的路徑 (默認(rèn)為’workspace_base/src’)
–build BUILD build的路徑 (默認(rèn)為’workspace_base/build’)
–use-ninja 用ninja取代make
–use-nmake 用nmake取’make
–force-cmake 強制cmake, 即使已經(jīng)cmake過
–no-color 禁止彩色輸出(只對catkin_make和CMake生效)
–pkg PKG [PKG …] 只對某個PKG進行make
–only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS …]
將指定的package列入白名單CATKIN_WHITELIST_PACKAGES,
之編譯白名單里的package。 該環(huán)境變量存在于CMakeCache.txt。
–cmake-args [CMAKE_ARGS [CMAKE_ARGS …]]
傳給CMake的參數(shù)
–make-args [MAKE_ARGS [MAKE_ARGS …]]
傳給Make的參數(shù)
–override-build-tool-check
用來覆蓋由于不同編譯工具產(chǎn)生的錯誤
catkin工作空間結(jié)構(gòu)介紹
catkin工作空間的結(jié)構(gòu),它包括了 src 、 build 、 devel 三個路徑, 在
有些編譯選項下也可能包括其他。 但這三個文件夾是catkin編譯系統(tǒng)默認(rèn)的。 它們的具體作用
如下:
src/: ROS的catkin軟件包( 源代碼包)
build/: catkin( CMake) 的緩存信息和中間文件
devel/: 生成的目標(biāo)文件( 包括頭文件, 動態(tài)鏈接庫, 靜態(tài)鏈接庫, 可執(zhí)行文件等) 、 環(huán)境變量。
下圖是catkin編譯工作流程。
build和devel文件夾是Catkin自動編譯生成的。而src文件夾則是主要用到的,我們寫的ROS程序和源代碼包都放在這個文件夾。如下圖所示:
下載tree工具包可以看到以下結(jié)構(gòu)圖:
Package軟件包
應(yīng)該說Package包是ROS的基本單元,任何語言程序都需要放到包中,因為包是編譯的基本單元。一個package的常見文件如下:
其中定義package的是 CMakeLists.txt 和 package.xml , 這兩個文件是package中必不可少的。 catkin編譯系統(tǒng)在編譯前, 首先就要解析這兩個文件。 這兩個文件就定義了一個package。
CMakeLists.txt: 定義package的包名、 依賴、 源文件、 目標(biāo)文件等編譯規(guī)則, 是package
不可少的成分
package.xml: 描述package的包名、 版本號、 作者、 依賴等信息, 是package不可少的成
分 src
/: 存放ROS的源代碼, 包括C++的源碼和(.cpp)以及Python的module(.py)
include/: 存放C++源碼對應(yīng)的頭文件
scripts/: 存放可執(zhí)行腳本, 例如shell腳本(.sh)、 Python腳本(.py)
msg/: 存放自定義格式的消息(.msg)
srv/: 存放自定義格式的服務(wù)(.srv)
models/: 存放機器人或仿真場景的3D模型(.sda, .stl, .dae等)
urdf/: 存放機器人的模型描述(.urdf或.xacro)
launch/: 存放launch文件(.launch或.xml)
- 創(chuàng)建Package
Package需要在catkin/src的文件夾下創(chuàng)建,可以用catkin_creat_pkg命令。指令如下:
catkin_create_pkg package depends(依賴的包名) - package相關(guān)命令
6.Node & Master
node 是ROS的最小進程單元,一個軟件包里可以有多個可執(zhí)行文件, 可執(zhí)行文件在運行之后就成了一個進程(process), 這個進程在ROS中就叫做節(jié)點。
master在整個網(wǎng)絡(luò)通信架構(gòu)里相當(dāng)于管理中心, 管理著各個node。 node首先在master處進行注冊, 之后master會將該node納入整個ROS程序中。node之間的通信也是先由master進行“牽線”, 才能兩兩的進行點對點通信。 當(dāng)ROS程序啟動時, 第一步首先啟動master, 由節(jié)點管理器處理依次啟動node。
$roscore指令可以啟動ROS master ,rosout ,parameter serve。
-
rosnode
-
launch
ROS中的通信方式中, topic是常用的一種。 對于實時性、 周期性的消息, 使用topic來傳輸是
最佳的選擇。 topic是一種點對點的單向通信方式, 這里的“點”指的是node, 也就是說node之
間可以通過topic方式來傳遞信息。 topic要經(jīng)歷下面幾步的初始化過程: 首先, publisher節(jié)點
和subscriber節(jié)點都要到節(jié)點管理器進行注冊, 然后publisher會發(fā)布topic, subscriber在
master的指揮下會訂閱該topic, 從而建立起sub-pub之間的通信。 注意整個過程是單向的。 其
結(jié)構(gòu)示意圖如下:
- 通信實例
總結(jié)
以上是生活随笔為你收集整理的ROS总结一,catkin,package,CMakeList,Topic,node的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博士师兄国奖分享会
- 下一篇: Arduino总结一