ROS pluginlib步骤

2021/7/10 23:38:53

本文主要是介绍ROS pluginlib步骤,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.创建插件
一般情况是有基类的,以move_base导航栈为例。其nav_core包下有几个头文件,这就是基类所在,其具体实现由继承类完成,基类的构造函数是protected

2.新建软件包
catkin_create_pkg  package_name roscpp  基类包名 ......

3.
继承类头文件要包含 基类
#include <基类包名/基类头文件名.h> 这里是因为头文件在/include/包名/头文件名。如果就在include文件夹里 不用包名就可以了

.cpp文件要包含一个头文件 #include <pluginlib/class_list_macros.h>

在继承类的.cpp文件中,在头文件之后要写一个宏PLUGINLIB_EXPORT_CLASS,目的是可以到出插件类
PLUGINLIB_EXPORT_CLASS(继承类空间名::继承类名, 基类空间名::基类名)


4.CMakeLists.txt
这里是生成一个插件,是一个库,所以要加入
add_library(想要插件名 src/插件.cpp 插件.cpp ....)

5.为继承类创建一个插件.xml 与CMakeLists.txt一个目录下
例如
<library path="lib/libpolygon_plugins">
  <class name="polygon_plugins/Regular_Triangle" type="polygon_plugins::Triangle" base_class_type="polygon_base::RegularPolygon">
    <description>This is a triangle plugin.</description>
  </class>
  <class name="polygon_plugins/Regular_Square" type="polygon_plugins::Square" base_class_type="polygon_base::RegularPolygon">
    <description>This is a square plugin.</description>
  </class>
</library>


//两个插件名的例子
<library path="lib/lib插件名">
  <class name="继承类空间/自定义插件名" type="继承类空间::继承类名" base_class_type="基类空间::基类名">
    <description>This is a triangle plugin.</description>
  </class>
  <class name="polygon_plugins/Regular_Square" type="polygon_plugins::Square" base_class_type="polygon_base::RegularPolygon">
    <description>This is a square plugin.</description>
  </class>
</library>


5.package.xml 的最后加入一行

<export>
    <!-- Other tools can request additional information be placed here -->
    <pluginlib_tutorials_ plugin="${prefix}/polygon_plugins.xml" />
</export>


  <继承类软件包名 plugin="${prefix}/上面4里的 插件名.xml" />
<export>不用加本来就有的;


6.验证

终端下
rospack plugins --attrib=plugin 基类软件包名

rospack plugins --attrib=plugin nav_core
输出如下:
clear_costmap_recovery /opt/ros/noetic/share/clear_costmap_recovery/ccr_plugin.xml
global_planner /opt/ros/noetic/share/global_planner/bgp_plugin.xml
base_local_planner /opt/ros/noetic/share/base_local_planner/blp_plugin.xml
navfn /opt/ros/noetic/share/navfn/bgp_plugin.xml
rotate_recovery /opt/ros/noetic/share/rotate_recovery/rotate_plugin.xml
dwa_local_planner /opt/ros/noetic/share/dwa_local_planner/blp_plugin.xml


调用插件类的用法:
包含头文件   #include <pluginlib/class_loader.h>   还有基类的头文件 等等
1.先新建基类的插件对象
pluginlib::ClassLoader<polygon_base::RegularPolygon> poly_loader("pluginlib_tutorials_", "polygon_base::RegularPolygon");
 
2.基类对象调用createInstance创建继承类实例
boost::shared_ptr<polygon_base::RegularPolygon> triangle = poly_loader.createInstance("polygon_plugins::Triangle");

3.继承类的实例有了,就可以调用继承类里的函数了

pluginlib::ClassLoader<基类所在空间名::基类名>poly_loader("基类所在软件包名",“基类所在空间::基类名”)

boost::shared_ptr<基类所在空间::基类名>triangle = poly_loader.createInstance("继承类所在空间名::继承类名")



这篇关于ROS pluginlib步骤的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程