首先,安裝外掛程式的教程功能包,我的是kinetic版本的,安裝應如下:
$ apt-get install ros-kinetic-common-tutorials
然後呢,需要建立乙個功能包進行測試。這個功能包推薦放在catkin_ws/src目錄下。
我們需要建立乙個我們的外掛程式將要繼承的基礎類。在這個例子中,我們將要建立兩個regularpolygon物件,並將之後使用它們,所以我們需要創造乙個regularpolygon類。開啟你常用的編輯器,並在catkin_ws/src/pluginlib_tutorials_/include/pluginlib_tutorials_/polygon_base.h,貼上如下內容:
#ifndef pluginlib_tutorials__polygon_base_h_
#define pluginlib_tutorials__polygon_base_h_
namespace polygon_base
protected:
regularpolygon(){}
};};#endif
這裡建立乙個抽象類。需要注意的乙個地方是initialize成員函式。
開啟include/pluginlib_tutorials_/polygon_plugins.h,並貼上上如下內容
#ifndef pluginlib_tutorials__polygon_plugins_h_
#define pluginlib_tutorials__polygon_plugins_h_
#include #include namespace polygon_plugins
void initialize(double side_length)
double area()
double getheight()
private:
double side_length_;
};class square : public polygon_base::regularpolygon
void initialize(double side_length)
double area()
private:
double side_length_;
};};#endif
程式很簡單,我們建立了兩個繼承regularpolygon的類。
開啟src/polygon_plugins.cpp,並貼上如下內容:
#include #include #include pluginlib_export_class(polygon_plugins::********, polygon_base::regularpolygon)
pluginlib_export_class(polygon_plugins::square, polygon_base::regularpolygon)
注意:允許我們把c++類註冊為乙個外掛程式。
注意:pluginlib_export_class(polygon_plugins::square, polygon_base::regularpolygon)
1.第乙個引數是:外掛程式類的全名
2.第二個引數是:外掛程式基類的全名
想要建立乙個外掛程式庫,需要在cmakelists.txt檔案中新增如下內容:
include_directories(include)
add_library(polygon_plugins src/polygon_plugins.cpp)
然後通過catkin_make編譯。
6.1 外掛程式的plugin xml描述檔案
建立乙個建立名為polygon_plugin.xml的檔案
this is a ******** plugin.
this is a square plugin.
很簡單,不再解釋。
6.2 註冊外掛程式到ros系統
為確保pluginlib可以查到ros系統所有外掛程式,定義外掛程式的package必須顯式的指定哪個包匯出了什麼外掛程式。
這通常在package.xml檔案中定義。
這裡標籤pluginlib_tutorials_ plugin是定義外掛程式基類的package名稱,屬性plugin是前面定義的外掛程式描述符檔案。
注意:如果外掛程式類與基類不在同一package,為了使外掛程式的export生效,還必須新增對外掛程式基類所在package的依賴。
my_plugin_test
my_plugin_test
#include #include int main(int argc, char** ar**)
catch(pluginlib::pluginlibexception& ex)
return 0;
}
需要給cmakelists.txt檔案新增如下內容:
add_executable(polygon_loader src/polygon_loader.cpp)
target_link_libraries(polygon_loader $)
最後使用catkin_make進行編譯,並大概可以看到如下內容:
[ info] [walltime: 1279658450.869089666]: ******** area: 43.30
[ info] [walltime: 1279658450.869138007]: square area: 100.00
ROS學習筆記10(建立乙個ROS訊息和服務)
這篇教程主要介紹怎樣建立和編譯乙個msg訊息和srv服務檔案,同時介紹rosmsg,rossrv,roscp等命令工具。3 srv使用 4 小結 msg檔案 header header string child frame id geometry msgs posewithcovariance po...
ROS 用Python寫乙個簡單服務
一.編寫服務資料 在功能包的頂級目錄中,建立srv資料夾,並在裡面建立.srv檔案 先成為a.srv 在srv檔案中,填入服務資料,如 int64 a int64 b int64 sum其中,上方是請求資料,下方是答應資料 二.修改cmakelist和package.xml cmakelist ca...
ROS的初步學習 六 寫乙個簡單程式
就像最初我們接觸c c 一樣,我們的第乙個程式是 hello world 現在開始編寫乙個 hello ros 通過前面的學習,我們已經可以建立乙個工作空間和程式包。現在進入catkin ws2 src,在下面 建乙個資料夾my pkg,catkin create pkg my pkg這時會在 my...