ROS的初步學習 六 寫乙個簡單程式

2021-08-09 14:14:21 字數 3537 閱讀 6014

就像最初我們接觸c/c++一樣,我們的第乙個程式是「hello world!",現在開始編寫乙個」hello ros !"  

通過前面的學習,我們已經可以建立乙個工作空間和程式包。現在進入catkin_ws2/src,在下面 建乙個資料夾my_pkg,

catkin_create_pkg my_pkg
這時會在 my_pkg下生成兩個檔案

第乙個配置檔案 .xml 是清單檔案

第二個檔案 .txt 是cmake 的指令碼檔案。cmake 是乙個符合工業標準的跨平台編譯系統。這個檔案包含一系列的編譯指令,包括應該生成哪種可執行檔案,需要那些原始檔,以及在那裡可以找到所需的標頭檔案和鏈結庫。

catkin_create_pkg 他的工作只不過是建立了兩個包目錄,和這兩個配置檔案的預設版本,從而使使用者使用更方便。

挨著兩個配置檔案 命名乙個 hello.cpp的檔案。

#include

int main(int argc,char **argv)

ros::init 函式初始化ros客戶端庫。在程式起始處呼叫一次該函式。函式最後乙個引數是乙個包含節點預設名的字元。

ros::nodehandle(節點控制代碼)物件是你的程式用於和ros系統

互動的主要機制 。建立此物件會將你的程式註冊為ros節點

管理器的節點。最簡單的方法就是在整個程式中只建立乙個

nodehandle物件。

ros_info_stream 巨集將生成一條訊息,且這一訊息被傳送到

不同的位置,包括控制台視窗。

編譯 hello 程式

我們該如何編譯和執行這個程式呢?這些交給ros的catkin

編譯系統來處理。一共有四個步驟 。

宣告依賴庫

首先,我們需要宣告程式所依賴的其他功能包。對

於 c++程式而言,此步驟是必要的,以確保 catkin 能夠向 c++編譯

為了給出依賴庫,編輯包目錄下的 cmakelists.txt 檔案。該文

件的預設版本含有如下行:

find_package

(catkin required)

所依賴的其他 catkin 包可以新增到這一行的 components 關鍵字

後面,如下所示:

find_package

(catkin required

components my_pkg)

對於 hello 例程,我們需要新增名為 roscpp 的依賴庫,它提

供了 ros 的 c++客戶端庫。因此,修改後的 find_package 行如下

find_package(catkin required components roscpp)還需要在包的清單檔案中列出依賴庫,通過使用

build_depend (編譯依賴)和 run_depend(執行依賴)(報錯?)兩個關鍵

字實現:

package-namebuild_depend>

package-namerun_depend>(報錯?)

cmakelists.txt

宣告可執行檔案

接下來,我們需要在 cmakelists.txt 中新增兩行,

來宣告我們需要建立的可執行檔案。其一般形式是:

add_executable(executable-name source-files)

target_link_libraries(executable-name $)

cmake_minimum_required(version 2.8.3)

project(my_pkg)

**find_package(catkin required components roscpp)**

catkin_package()

include_directories(include

$)**add_executable(hello hello.cpp)**

target_link_libraries(hello $)

package.xml

<?xml version="1.0"?>

format="2">

my_pkgname>

0.0.0version>

the my_pkg packagedescription>

roscppbuild_depend>

roscpprun_depend>

在我們的例程中,hello 程式在編譯時和執行時都需要 roscpp 庫,

因此清單檔案需要包括:

roscppbuild_depend>

roscpprun_depend>

然而,在清單檔案中宣告的依賴庫並沒有在編譯過程中用到;

如果你在此處忽略它們,你可能不會看到任何錯誤訊息,直到發

布你的包給其他人,他們可能在沒有安裝所需包的情況下編譯你

發布的包而導致報錯。

編譯工作區

一旦你的 cmakelists.txt 檔案設定好,你就可以編譯

你的工作區,使用如下命令來編譯所有包中的所有可執行檔案:

catkin_make
sourcing setup.bash
最後的步驟是執行名為 setup.bash 的指令碼

檔案,它是 catkin_make 在你工作區的 devel 子目錄下生成的。

source devel/setup.bash
這個自動生成的指令碼檔案設定了若干環境變數,從而使 ros 能夠

找到你建立的功能包和新生成的可執行檔案。它類似於 setup.bash,但是是專門為你的工作區量身定做的。除非目錄結構發生變化,否則你只需要在每個終端執行此命令一次,即使你修改了**並且用 catkin_make 執行了重編譯。

所有這些編譯步驟完成後,新的 ros 程式就可以使用

rosrun(來執行,就像任何其他 ros 程式一樣。對於我們的例程,命令是:

不要忘了首先要啟動 roscore:這個程式是乙個節點,節點需

要乙個節點管理器才可以正常執行。順便說一下,這行輸出中的

數字代表時間,從 1970 年 1 月 1 日開始以秒計數,這一時間是

我們的 ros_info_stream 開始執行的時間。

ROS 用Python寫乙個簡單服務

一.編寫服務資料 在功能包的頂級目錄中,建立srv資料夾,並在裡面建立.srv檔案 先成為a.srv 在srv檔案中,填入服務資料,如 int64 a int64 b int64 sum其中,上方是請求資料,下方是答應資料 二.修改cmakelist和package.xml cmakelist ca...

ROS學習筆記46(寫和使用乙個簡單的外掛程式)

首先,安裝外掛程式的教程功能包,我的是kinetic版本的,安裝應如下 apt get install ros kinetic common tutorials然後呢,需要建立乙個功能包進行測試。這個功能包推薦放在catkin ws src目錄下。我們需要建立乙個我們的外掛程式將要繼承的基礎類。在這...

05 乙個簡單程式題

下列給定程式中函式fun的功能是 求出如下分數序列的前n項之和。和值通過函式值返回。2 1,3 2,5 3,8 5,13 8,21 13.例,若n 5,則應輸出8.391667。分析 分子分母規律不一致,分母用b表示,分子用a表示,則每一項可表示為a b,為了得到小數值,a,b型別為double.1...