加载中…
个人资料
孤峰乔木
孤峰乔木
  • 博客等级:
  • 博客积分:0
  • 博客访问:39,480
  • 关注人气:24
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

ROS基础--rosplugin应用篇

(2017-07-18 14:54:03)
标签:

ros基础

分类: ros基础

Ros Plugin

1. 原由:

Ros中的插件实质上就是库文件,可以是动态库也可以是共享库,其优势是可以根据需要加载与注销,节省资源;而且可以单独修改编译,封装性较好。

 

2. 底层支持:

Ros提供了一套ros plugin实现的流程框架,并提供pluginlib包用于加载使用ros plugin。在本质上一个ros plugin就是一个子类,子类和父类被编译为一个库,向外面提供服务。Ros通过插件描述文件找到库和插件类,然后利用pluginlib包加载插件,使用之。

 

3. Ros plugin架构:

通常包含三个部分:

(1) 实现ros plugin,这一步ros有提供架构流程;

(2) Ros plugin注册到ros package中,也有架构流程

(3) ros 使用plugin,这一步主要使用pluginlib包实现。

 

4. 实现ros plugin:

(1)  创建一个ros包pluginlib_tutorials_:

A) cd catkin_ws/src

B) catkin_create_pkg pluginlib_tutorials_ roscpp pluginlib

(2)  创建基类RegularPolygon

A) cd catkin_ws/src/pluginlib_tutorials_/include/pluginlib_tutorials_/

B) touch polygon_base.h

C) 然后定义一个基类RegularPolygon,具体参考下面“代码”或者ros wiki

(3)  创建插件类/子类Triangle和Square:

A) cd catkin_ws/src/pluginlib_tutorials_/include/pluginlib_tutorials_/

B) touch polygon_plugins.h 

C) 定义插件类Triangle和Square

(4)  注册/导出插件:

A) cd catkin_ws/src

B) touch polygon_plugins.cpp

C) 使用PLUGINLIB_EXPORT_CLASS导出插件类

(5)  编译插件类:

A) CMakeLists.txt加入编译插件类选项。

至此插件类制作完成,下面是让ros找到插件类以及使用之。

 

5. ros plugin注册到ros package:

(1) 创建插件类描述文件 polygon_plugins.xml:

A) cd catkin_ws/src/pluginlib_tutorials_

B) 填充插件类信息和插件信息

(2) 导出插件类/插件:

A) 修改package.xml文件,加入导出信息。

export标签中,插件所属包名的填写,是以基类所属的报为准,而不是插件类所属的包为准,然后后面跟着插件类的xml文件。 基类和插件类很多时候不在同一个包中,这种情况,注意前面所述。检测插件是否完成在ros包中注册,可以使用下面命令测试:

rospack plugins --attrib=plugin pluginlib_tutorials

正常会输出插件类描述文件的全路径:

/mnt/data/work/ssh_test/ros_beginner/catkin_ws/src/pluginlib_tutorials_/polygon_plugins.xml

 

6. ros使用plugin:

(1)  创建节点:

A) cd catkin_ws/src/pluginlib_tutorials_/src

B) touch polygon_loader.cpp.

C) 利用pluginlib定义一个插件加载器,加载类型是基类。

D) 加载器常见插件类对象,并使用boost::shared_ptr子类类型引用之,然后可调用插 件方法,详见代码。

(2)  编译配置:

A) 修改Cmakefile.txt,将polygon_loader.cpp编译为一个节点。

B) 然后启动节点。

 

7.  使用流:

App应用---->pluginlib::ClassLoader 构建base class 的实例poly_loader ----> 通过ClassLoader 的createInstance方法构建插件类实例---->使用boost::shared_ptr 插件类类型指针引用。示例代码提供基类和插件类分别属于两个包的情况。

 

8.  参考:

http://wiki.ros.org/pluginlib/Tutorials/Writing and Using a Simple Plugin

 

9.  示例代码:

https://github.com/ahuer2435/ros_beginner/tree/master/catkin_ws/src/pluginlib_tutorials_

https://github.com/ahuer2435/ros_beginner/tree/master/catkin_ws/src/pluginlib_tutorials_2/


 

更多ROS文章,可以关注微信公众号:ROS编程,每周不定期更新

ROS基础--rosplugin应用篇



 

 

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有