如何使用ros :: pluginlib加载多库

时间:2017-05-17 08:53:55

标签: ros

我正在尝试使用ros::pluginlib加载一个名为A_Plugin的插件,该插件已正确注册到ROS Package System。需要注意的一点是,A_Plugin依赖Opensplice DDS,需要链接DDS库" libddskernel.so" " libdcpsisocpp.so&#34 ;.在CmakeLists.txt文件中,我这样写: ```

add_library(A_Plugin
  src/aplugin.cpp
)
target_link_libraries(A_Plugin
  $ENV{OSPL_HOME}/lib/libddskernel.so
  $ENV{OSPL_HOME}/lib/libdcpsisocpp.so
)

``` 它可以正确注册到ROS包系统,但是当我使用pluginlib :: ClassLoader加载A_plugin时,我在抛出errors:terminate MultiLibraryClassLoader的实例后调用了以下'pluginlib::CreateClassException'what()::无法创建类的对象type test :: A_Plugin因为没有工厂存在。确保库存在并通过MultiLibraryClassLoader::loadLibrary()显式加载。我怎么解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

我有类似的问题,结果我错过了* .cpp文件中的插件类声明。我把它包括在内并且工作正常。声明应该是这样的: PLUGINLIB_DECLARE_CLASS(rqt_example_cpp, MyPlugin, rqt_example_cpp::MyPlugin, rqt_gui_cpp::Plugin)

这可以在rqt教程github repo第62行的示例中看到: https://github.com/lucasw/rqt_mypkg/blob/master/rqt_example_cpp/src/rqt_example_cpp/my_plugin.cpp