就像最初我們接觸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...