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

2021-09-24 20:32:55 字數 2822 閱讀 5553

首先,安裝外掛程式的教程功能包,我的是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...