ros系統(tǒng)入門筆記(一)

寫在前面

我在CSDN上寫了一套關(guān)于ros基礎(chǔ)的圖文教程,歡迎關(guān)注!!!


ROS的工程結(jié)構(gòu)(文件系統(tǒng))

Ros工程結(jié)構(gòu)

1. catkin編譯的工作流程如下:

  1. 首先在工作空間catkin_ws/src/下遞歸的查找其中每一個(gè)ROS的package。
  2. package中會有package.xml和CMakeLists.txt文件,Catkin(CMake)編譯系統(tǒng)依據(jù)CMakeLists.txt文件,從而生成makefiles(放在catkin_ws/build/)。
  3. 然后make剛剛生成的makefiles等文件,編譯鏈接生成可執(zhí)行文件(放在catkin_ws/devel)。

詳細(xì)解釋相關(guān)包內(nèi)容:

  • src/: ROS的catkin軟件包(源代碼包)
  • build/: catkin(CMake)的緩存信息和中間文件
  • devel/: 生成的目標(biāo)文件(包括頭文件,動態(tài)鏈接庫,靜態(tài)鏈接庫,可執(zhí)行文件等)、環(huán)境變量

2. 使用catkin_make進(jìn)行編譯

要用catkin編譯一個(gè)工程或軟件包,只需要用catkin_make指令。一般當(dāng)我們寫完代碼,執(zhí)行一次catkin_make進(jìn)行編譯,調(diào)用系統(tǒng)自動完成編譯和鏈接過程,構(gòu)建生成目標(biāo)文件。編譯的一般性流程如下

$ cd ~/catkin_ws #回到工作空間,catkin_make必須在工作空間下執(zhí)行
$ catkin_make    #開始編譯
$ source ~/catkin_ws/devel/setup.bash #刷新壞境

注意: catkin編譯之前需要回到工作空間目錄,catkin_make在其他路徑下編譯不會成功。編譯完成后,如果有新的目標(biāo)文件產(chǎn)生(原來沒有),那么一般緊跟著要source刷新環(huán)境,使得系統(tǒng)能夠找到剛才編譯生成的ROS可執(zhí)行文件。這個(gè)細(xì)節(jié)比較容易遺漏,致使后面出現(xiàn)可執(zhí)行文件無法打開等錯(cuò)誤。

3. package詳解

1) 組織形式

  • 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/: 存放機(jī)器人或仿真場景的3D模型(.sda, .stl, .dae等)
  • urdf/: 存放機(jī)器人的模型描述(.urdf或.xacro)
  • launch/: 存放launch文件(.launch或.xml)

通常ROS文件組織都是按照以上的形式,這是約定俗成的命名習(xí)慣,建議遵守。以上路徑中,只有CMakeLists.txt和package.xml是必須的,其余路徑根據(jù)軟件包是否需要來決定。

2) package創(chuàng)建

創(chuàng)建一個(gè)package需要在catkin_ws/src下,用到catkin_create_pkg命令,用法是:

catkin_create_pkg package depends

其中package是包名,depends是依賴的包名,可以依賴多個(gè)軟件包。


Master 節(jié)點(diǎn)管理器

master就像一個(gè)大管家,每個(gè)小弟node想要和其他node交朋友,必須先跟大管家master注冊,注冊之后,兩個(gè)node小弟就可以互相通信了


兩個(gè)功能

在開始執(zhí)行ros程序前,第一步是啟動master,命令式roscore, 同時(shí)該命令順帶啟動了其余兩個(gè)東西:


啟動master

Node節(jié)點(diǎn)

ROS中的節(jié)點(diǎn),通常是按照功能劃分,一個(gè)node實(shí)現(xiàn)某個(gè)指定功能。node就是Ros中進(jìn)程的概念。是包里可執(zhí)行文件(包括c++編譯文件 && .py && .sh文件)運(yùn)行的實(shí)例。
與node相關(guān)的指令如下:

// 啟動node的方法很簡單:
$ rosrun [pkg_name] [node_name]
// 列出當(dāng)前運(yùn)行的node信息
$ rosnode list
// 顯示某個(gè)node的詳細(xì)信息
$ rosnode info [node_name]
// 停止某個(gè)node運(yùn)行
$ rosnode kill [node_name]

Roslaunch

啟動master和多個(gè)node的方法, 正如前文提及到的ros工程目錄中的launch文件夾,沒錯(cuò),下面要啟動運(yùn)行l(wèi)aunch文件的時(shí)候,就是在對應(yīng)pkg文件夾下launch文件夾下的對應(yīng)launch文件。

// 啟動命令如下:
$ roslaunch [pkg_name] [file_name.launch]
  • launch文件寫法
    launch文件寫法和pkg文件夾下的package.xml文件寫法類似,都遵循xml文件標(biāo)簽格式,具體如下:


    launch文件編寫

ROS下的四種通訊方式

topic通訊

topic是node之間通訊最常見的一種方式,是一種異步通訊方式,兩個(gè)node之間通過publish和subscribe的機(jī)制,進(jìn)行信息交流。

  • massage:topic內(nèi)容的數(shù)據(jù)類型,或者稱為topic的格式標(biāo)準(zhǔn),定義在 *.msg文件下
    可以認(rèn)為Massage是類的概念,具體通訊過程中的massage屬于對象或者實(shí)例。
    該文件存放在pkg/msg文件夾下
massage編寫格式

很像是在寫函數(shù)中的結(jié)構(gòu)體

  • topic和msg相關(guān)指令
// 列出所有的topic
$ rostopic list
// 顯示某個(gè)topic屬性信息
$ rostopic show [/topic_name]
// 顯示某個(gè)topic內(nèi)容
$ rostopic echo [/topic_name]
// 像某個(gè)topic發(fā)布內(nèi)容
$ rostopic pub [topic_name]  ...(要發(fā)布的內(nèi)容)
---
// 列出所有的msg
$ rosmsg list
// 顯示某個(gè)msg內(nèi)容
$ rosmsg show [/msg_name]

Service通訊

Ros的同步通信的方式,兩個(gè)node之間通過request/reply方式通信
service沒人調(diào)用的時(shí)候他就不執(zhí)行。


service

這里需要注意:同步意味著阻塞,就是client端在發(fā)送request之后,會一直等待server回傳reply.

topic和service對比

service文件編寫格式

上圖中service應(yīng)答的格式,就一定是個(gè)msg文件了。
具體舉例子如下圖所示:


service中的reply

在編寫完msg和srv文件后要記得一點(diǎn):修改這個(gè)包的xml文件和cmake文件
對應(yīng)文件修改關(guān)鍵點(diǎn)

相關(guān)命令如下:


service通訊的相關(guān)命令

參數(shù)服務(wù)器 Parameter Service

參數(shù)服務(wù)器本身就是個(gè)字典,我們可以通過以下三種方式對之進(jìn)行讀寫:

  1. 命令行模式


    通過命令行操作參數(shù)服務(wù)器
  2. launch文件


    launch文件通過標(biāo)簽表示
  3. 在.py 和 .cpp文件直接編寫

Action通訊

升級版service

對應(yīng)的action文件編寫規(guī)則
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容