ROS中如何快速實現plugin外掛程式

2021-10-22 07:16:46 字數 2135 閱讀 2878

wiki百科:plugin外掛程式

目錄

步驟:step1:建立基類

step2: 建立外掛程式類

step3: 註冊外掛程式

step4: 編譯外掛程式庫

step5: 外掛程式設定ros系統可見

step6: 應用外掛程式

#ifndef pluginlib_tutorials__polygon_base_h_

#define pluginlib_tutorials__polygon_base_h_

namespace polygon_base

protected:

regularpolygon(){}

};};#endif

基類的建構函式可有可無

建構函式放在protected下,說明父類的初始化需要initialize()函式來完成。

外掛程式類即派生類,用以例項化的類。

#ifndef pluginlib_tutorials__polygon_plugins_h_

#define pluginlib_tutorials__polygon_plugins_h_

#include "polygon_base.h"

#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

pluginlib_export_class(子類1, 父類)

...pluginlib_export_class(子類n, 父類)

功能:匯出派生類,並向ros系統註冊派生類。目的能讓ros系統搜尋到該類。

ps:該匯出行語句,一般寫在對應派生類的**.cpp檔案末尾

#include #include "pluginlib_test/polygon_base.h"

#include "pluginlib_test/polygon_plugins.h"

/* 註冊外掛程式

*/pluginlib_export_class(polygon_plugins::********, polygon_base::regularpolygon)

pluginlib_export_class(polygon_plugins::square, polygon_base::regularpolygon)

修改cmakelists.txt檔案中的add_library($ src/*.cpp),使之能編譯出庫檔案(外掛程式的實質即為庫檔案)。

create 乙個外掛程式

類描述檔案plugins.xml檔案,描述外掛程式的詳細內容。例如

this is a ******** plugin.

this is a square plugin.

其中 pluginlib_test為step4中生成的庫的名字,********和square為外掛程式類(子類),regularpolygon為父類。

把該外掛程式的描述檔案plugins.xml,新增到功能包的查詢檔案package.xml中,例如:

其中 pluginlib_test為功能包的包名

應用案例如下:

#include #include "pluginlib_test/polygon_base.h"

int main(int argc, char** ar**)

catch(pluginlib::pluginlibexception& ex)

return 0;

}

包含classloader:外掛程式載入類 。

ROS與Python中如何使用引數

在這裡我將簡單介紹引數的獲取,引數的設定,引數的修改和引數的查詢 1.引數的獲取 使用rospy.get param param name 獲取全域性引數 rospy.get param global param name 獲取目前命名空間的引數 rospy.get param param name...

如何在ROS中獲得日誌級別

用這個功能的人好像不多,搜了一大圈也沒搜到有用的答案,鋪天蓋地的設定日誌級別,在 answer.ros.org 上有兩個回答 現在是3個了 但是都比較陳舊了,答案是12年的,對應的是比較舊的版本。最後實在沒辦法只能研究原始碼,比較新的ros獲得日誌級別的 如下 std map std string,...

ROS中如何使用外部的庫

include directories include lib emuc 2.h 自己新增的內容 此處新增絕對路徑會警告,因為需要的不是路徑而是檔案 link libraries 自己新增的內容思路就是 在include directories中新增鏈結庫對應的標頭檔案 在link librarie...