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