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步骤的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-14JavaScript中的SOLID设计原则讲解
- 2024-12-13Qt项目实战:新手入门与初级教程
- 2024-12-13STL容器项目实战:从入门到实践
- 2024-12-13数组指针项目实战入门教程
- 2024-12-13Linux部署Scrapy资料:新手入门教程
- 2024-12-13Python爬虫资料入门教程
- 2024-12-13Python资料:新手入门的必备指南
- 2024-12-13Scrapy部署管理资料:新手入门指南
- 2024-12-13Scrapy部署管理资料入门教程
- 2024-12-13Python编程基础与实战教程