1. 程式人生 > >編寫第一個ROS(建立工作空間workspace和功能包package)

編寫第一個ROS(建立工作空間workspace和功能包package)

剛接觸ROS,學著寫了第一個程式,怕以後忘記,就將其步驟記錄下來。。

首先你必須保證你電腦已安裝配置好ROS。

1.建立工作空間(workspace)

    我們所建立功能包package,應該全部放到一個叫做工作空間(workspace)的目錄中 。你可以把目錄儲存在你賬號的任何位置例如,我所建立的工作空間的是路徑/home,同時你可以用任何你喜歡的名字命名你的工作空間,我的工作空間名為 test,現在請使用標準的mkdir命令列去建立一個工作空間。我首先建立一個工作空間,名字為test,

此處建立的工作空間還需要在工作區目錄中建立一個叫做 src 的子目錄。這個子目錄將用於存放功能包的原始碼。而 程式碼中的 “-p” ,這時mkdir命令會自動建立所有不存在的目錄。

在終端命令中鍵入(開啟終端的快捷鍵為“Ctrl+Alt+T”)

mkdir -p ~/test/src

執行後你會發現你名為test的工作空間中已經有了一個src 的子目錄。這樣你的工作空間建立已經完成。

2.建立功能包(package)

建立一個新ROS功能包的命令應該在你工作空間中的src目錄下執行:catkin_create_pkg package-name,package-name指的是你功能包的名字,我所建立的功能包名為amin,注意是在你工作空間中的src目錄下執行(cd命令可以進入你要進入的目錄)繼續在終端中鍵入

cd ~/test/src

進入src目錄下執行

catkin_create_pkg amin

其實,這個功能包建立命令沒有做太多工作,它只不過建立了一個存放這個功能包的目錄(也就是我所建立的功能包amin),並在amin那個目錄下生成了兩個配置檔案。
第一個配置檔案,叫做 package.xml,稱為清單檔案。

第二個檔案,叫做 CMakeLists.txt,是一個 Cmake 的指令碼檔案,Cmake 是一個符合工業標準的跨平臺編譯系統。這個檔案包含了一系列的編譯指令,包括應該生成哪種可執行檔案,需要哪些原始檔,以及在哪裡可以找到所需的標頭檔案和連結庫。當然,這個檔案表明 catkin 在內部使用了 Cmake。

注意:ROS 包的命名遵循一個命名規範,只允許使用小寫字母、數字和下劃線,而且首字元必須是一個小寫字母。一些 ROS工具,包括 catkin,不支援那些不遵循此命名規範的包。

可以不看此處:編輯清單檔案 建立包後,你可能希望編輯其 package.xml 檔案,其中包含一些描述這個包的元資料。通過 catkin_create_pkg 建立的功能包預設含有很豐富的註釋,對於讀者在很大程度上是不言自明的。然而,請注意,無論是在編譯時還是在執行時,其中的大部分資訊 ROS 並沒有使用,這些資訊只有在你公開發布程式碼時才變得重要。本著保持文件與實際功能同步的精神,至少填寫description 和 maintainer 兩部分可能是比較合理的。

3.編寫ROS程式

我編寫一個簡單的 hello,ros!的程式,命名為hello.cpp。這個名為 hello.cpp 的原始檔 也 存 放 在 你 的 功 能 包 amin文 件 夾 中 , 挨 著 package.xml 和CMakeLists.txt。

注意:一些線上教程建議在你的功能包目錄中建立 src 目錄來存放 C ++原始檔。這個附加的組織結構可能是有益的,特別是對於那些含有多種型別檔案的較大的功能包,但它不是嚴格必要的。

#include <ros/ros.h>

int main ( int argc , char ** argv ) 
{
  ros::init ( argc , argv , "hello" ) ;
  ros::NodeHandle nh ;
  ROS_INFO_STREAM( " Hello , ROS! " ) ;
}

4.編譯 Hello 程式

我們該如何編譯和執行這個程式呢?這些交給ROS的catkin編譯系統來處理。

第一步:宣告依賴庫

 首先,我們需要宣告程式所依賴的其他功能包。對於 c++程式而言,此步驟是必要的,以確保 catkin 能夠向 c++編譯器提供合適的標記來定位編譯功能包所需的標頭檔案和連結庫。為了給出依賴庫,

編輯包目錄下的 CMakeLists.txt 檔案。

該文件的預設版本含有如下行:find_package(catkin REQUIRED)

所依賴的其他 catkin 包可以新增到這一行的 COMPONENTS 關鍵字後面,如下所示:find_package(catkin REQUIRED COMPONENTS package-names)

對於 hello 例程,我們需要新增名為 roscpp 的依賴庫,它提供了 ROS 的 C++客戶端庫。因此,修改後的 find_package 行如下:

find_package(catkin REQUIRED COMPONENTS roscpp)

我們同樣需要在包的清單檔案package.xml 中列出依賴庫,通過使用build_depend (編譯依賴)和 run_depend(執行依賴)兩個關鍵字實現:格式如下:
<build_depend>package-name</build_depend>
<run_depend>package-name</run_depend>
在hello 程式在編譯時和執行時都需要 roscpp 庫,因此清單檔案package.xml加入:

<build_depend>roscpp</build_depend>
<run_depend>roscpp</run_depend>

package.xml的開啟方式用gedit開啟如圖:

注意:然而,在清單檔案中宣告的依賴庫並沒有在編譯過程中用到;如果你在此處忽略它們,你可能不會看到任何錯誤訊息,直到釋出你的包給其他人,他們可能在沒有安裝所需包的情況下編譯你釋出的包而導致報錯。

第二步:宣告可執行檔案

接下來,我們需要在 CMakeLists.txt 中新增兩行,來宣告我們需要建立的可執行檔案。

其一般形式是:add_executable(executable-name source-files)                           此處executable-name為執行檔案的名字(hello),source-files為原始檔的名字(hello.cpp)

                      target_link_libraries(executable-name ${catkin_LIBRARIES})


第一行聲明瞭我們想要的可執行檔案的檔名,以及生成此可執行檔案所需的原始檔列表。如果你有多個原始檔,把它們列在此處,並用空格將其區分開。

第二行告訴 Cmake 當連結此可執行檔案時需要連結哪些庫(在上面的 find_package 中定義)。如果你的包中包括多個可執行檔案,為每一個可執行檔案複製和修改上述兩行程式碼。

在我的例程中,我們需要一個名為 hello 的可執行檔案,它通過名為 hello.cpp 的原始檔編譯而來。所以我們需要新增如下幾行程式碼到 CMakeLists.txt 中:

add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})

第三步:編譯工作區

利用catkin_make這個命令進行編譯,注意必須從你的工作空間目錄執行,此命令時是進入你的工作空間目錄。

cd ~/test

catkin_make這個命令它將會完成一些配置步驟(尤其是你第一次執行此命令時),並且在你的工作區中建立 devel 和 build 兩個子目錄。這兩個新目錄用於存放和編譯相關的檔案,例如自動生成的編譯指令碼、目的碼和可執行檔案。如果你喜歡,當完成功能包的相關工作後(譯者注:即完成了編寫、除錯、測試等一系列工作後,此時程式碼基本定型),可以放心地刪除 devel 和 build兩個子目錄。

catkin_make

執行完後你的工作空間目錄裡多了devel 和 build 兩個子目錄。如圖為執行出來結果。


當然,有可能如 果 你 看 到 來 自 catkin_make 的編譯 錯 誤 , 提 示 無 法 找 到ros/ros.h 標頭檔案,或者 ros::init 等 ROS 函式未定義的錯誤,你會在執行此步驟時看見它們。最大的可能性是你的 CMakeLists.txt 沒有正確宣告對 roscpp的依賴。

在更正它們以後,你可以重新執行 catkin_make 來完成編譯工作。

5.執行hello程式

首先要啟動 roscore:這個程式是一個節點,節點需要一個節點管理器才可以正常執行。啟動節點管理器的命令:

roscore

啟動完節點管理器後,執行名為 setup.bash 的指令碼檔案,它是 catkin_make 在你工作區的 devel 子目錄下生成的。

這個自動生成的指令碼檔案設定了若干環境變數,從而使 ROS 能夠找到你建立的功能包和新生成的可執行檔案。(也就是將程式註冊)

注意:除非目錄結構發生變化,否則你只需要在每個終端執行此命令一次,即使你修改了程式碼並且用 catkin_make 執行了重編譯。

注意:此命令必須在你的工作空間目錄執行,進入你的工作空間目錄的命令上文提到過cd ~/test”,否則會出現“沒有那個檔案或目錄”

source devel/setup.bash

最後一步,執行節點,用命令:使用格式為"rosrun package-name executable-name"   package-name 為功能包名稱, executable-name為可執行檔名稱

rosrun amin hello

執行結果如圖:

這樣一個簡單的ROS程式就完成了。。

當然網上也有官方的教程,有點不一樣,我覺得這篇很有用,也成功的運行了。這裡有官方教程的一個簡化版,很有必要看下:http://blog.csdn.net/yake827/article/details/44564057

相關推薦

編寫一個ROS(建立工作空間workspace功能package

剛接觸ROS,學著寫了第一個程式,怕以後忘記,就將其步驟記錄下來。。 首先你必須保證你電腦已安裝配置好ROS。 1.建立工作空間(workspace)     我們所建立功能包package,應該全部放到一個叫做工作空間(workspace)的目錄中 。你可以把目錄儲存在你賬號的任何位置例如,我所建立的

1.ROS建立工作空間

  建立一個catkin 工作空間: $ mkdir -p ~/catkin_ws/src //建立一個資料夾 $ cd ~/catkin_ws/src      //到該檔案目錄下 $ catkin_init_workpace

ROS建立工作空間以及編譯一個

在ROS層面上編寫軟體,需要有相關的工作空間(workspace)。 生成工作控制元件並不複雜,首先,我們開啟一個控制檯(Ctrl+Alt+T),在使用者路徑下信件一個資料夾,我們起名為LearnROS(也可以起一個自己喜歡的名字)。 然後在這個資料夾中再建立一個資料夾,我

ROS學習筆記(一):建立工作空間功能

所有的ROS程式,包括我們自己開發的程式,都被組織成功能包,而ROS的功能包被存放在稱之為工作空間的目錄下。因此,在我們寫程式之前,第一步是建立一個工作空間以容納我們的功能包。其實ROS工作空間就是linux下的一個目錄,建立ROS工作空間就是建立一個linux目錄(我們建立名為catkin_ws的

ROS建立工作空間程式

要使用ROS系統進行開發,首先需要在ROS下建立工作空間(workspace)和程式包(package)。 建立工作空間: $ mkdir -p ~/catkin_ws/src 執行上述命令即在使用者主目錄下建立了catkin_ws資料夾及其子資料夾src(-p表示建立目標路徑上的所

ros回爐2-建立工作空間

建立ros工作空間 *均以indigo為例 在Groovy之前所有版本的ROS都使用rosbuild來建立ROS堆和包。從Groovy開始,另一種名叫catkin的建系統被引入。同時,堆被元資料包取代。 由於現在使用Groovy之前版本的較少,所有我們就從catkin開始學習。

編寫一個python 指令碼(重要檔案建立備份

程式設計思路: 需要備份的檔案和目錄由一個列表指定。 備份應該儲存在主備份目錄中。 檔案備份成一個zip檔案。 zip存檔的名稱是當前的日期和時間。 我們使用標準的zip命令,它通常預設地隨Linux/Unix發行版提供。Windows使用者可以使用Info-Z

ROS工作空間功能建立,以及建立節點,實現節點之間的通訊

我是ROS初學者,完全根據《ROS機器人高效程式設計》第三版這本書學習的,學習第2.4節時,經常會出現一些莫名其妙的問題,所以通過各種上網查資料,最後終於完成了書上的程式設計!以下是我對ROS工作空間的建立、建立節點、實現通訊進行總結   第一步:建立ROS工作空間   我們

ros 無法建立工作空間

在ros的工作空間中執行catkin_make出現下面的錯誤 執行其他的python指令同樣會有這個錯誤。 from pkg_resources import load_entry_point File "/usr/lib/python2.7/site-

建立工作空間建立使用自己的ros功能

建立自己的工作空間: 首先在ctrl+alt+T開啟一個終端,輸入如下命令來建立一個catkin_ws(名字自己定)的工作空間,以後所有的功能包都放在catkin_ws/src目錄下: mkdir -

第二天---介紹Python編譯器,pycharm設置以及編寫一個Python程序

python學習記錄介紹Python編譯器1.linux下:一般使用vi或者vim直接編譯以.py為後綴的文件,使用vi需要自己搜索vim python 自動補全以方便我們編寫。2.windos下:(1)使用submit選擇Python類型進行編譯,但是對於初學者submit需要安裝許多插件,很麻煩。這些後面

編寫一個HTML5文件

菜單 圖片 oss sublime bad log 顯示 技術分享 彈出 1.3.1 HTML文件的編寫方法編寫HTML文件主要有如下3種方法:手工直接編寫由於HTML語言編寫的文件是標準的ASCII文本文件,所以我們可以使用任何的文本編輯器來打開並編寫HTML文件,如W

編寫一個H5頁面

ntp int 小寫 itl body ado har put utf <!DOCTYPE html><html ><head> <meta charset="UTF-8"> <title>第一個H5頁面</

使用Pycharm編寫一個python程序

int 解釋 image ado 保存 f2c run 51cto 顯示 使用Pycharm編寫第一個python程序打開 Pycharm,選擇 Create New Project,創建一個新項目 選擇Pure Python表示創建一個純Python程序項目, Locat

react學習筆記(二編寫一個react組件

pub 技術 spa class ima ade ext css pan 繼續上一節課的內容,打開App.js:會看到如下代碼: import React, { Component } from ‘react‘; //在此文件中引用React,以及reat的組件類

C語言入門 2 安裝VS2013開發環境並編寫一個C語言程式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

ubuntu16.04下ROS作業系統學習(四 / 一ROS基礎-工作空間

主要知識點: 1.src、build、devel、install各資料夾的功能介紹。 2.建立工作空間(建立資料夾,初始化工作空間)、編譯工作空間、設定環境變數,檢查環境變數 (echo $ROS_PACKAGE_PATH) 3.建立功能包:catkin_create_pkg <

C++在另一個檔案建立名稱空間並呼叫

head.h #ifndef KW_H #define KW_H namespace kw { extern std::string name; } #endif // KW_H head.cpp #include <string> #includ

Flutter入坑指南:編寫一個Flutter應用

本文由 愛學園平臺 進行聯合編輯整理輸出 原作者:愛學園——莫比烏斯環 這是 Flutter 系列文章的第二篇,關於 Flutter 的相關學習文章後面還有很多,如果您喜歡的話,請持續關注 ,謝謝! Flutter 是 Google 推出的移動端跨平臺開發框架,使

1、編寫一個java程式--Hello—World

1、下載JDK8.0檔案 下載網址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 關於系統配置環境變數,問度娘吧! 2、下載編譯器 編譯器有很多種,包括:Editplus、Ult