0
$\begingroup$

So I have made a ROS plugin to make a new library and I am trying to test the library's methods by executing one of them by a node in a different workspace. when I execute the node this happen: [ERROR] [1719244165.939620169]: The plugin failed to load. Error: According to the loaded plugin descriptions the class ik_solver_plugin::iKinematicPlugin with base class type ik_solver_plugin::iKinematicPlugin does not exist. Declared types are

I have tried many options to check the CMakeLists.txt file or the package.xml file or the package_description.xml file but everything seems made correctly to me. What causes this error and how could i fix it?

$\endgroup$
2
  • $\begingroup$ What app is the plugin for? Which release of ros? Can you give us a url to a github.com repo containing this catkin package? $\endgroup$
    – Mike973
    Commented Jun 28 at 11:14
  • $\begingroup$ I wanted to make an IK solver but I was encountering this error, so in order to compare my work with something else I used the kdl_kinematics_plugin and still encounter the same ERROR. I have only modified the CMake file. I do not know if the issue lays in the CMakeLists.txt file or else. My idea is to have the IK solver developed in one workspace completed with shared library and have a ROS node in another workspace. Here the link for the github with the plugin and the node. catkin_ws_10 is the Ik solver and catkin_ws_11 has the node. github.com/Tommaso2025/Plugin $\endgroup$ Commented Jun 28 at 20:54

1 Answer 1

1
$\begingroup$

Package Visibility

If you are going to build in separate catkin_workspace in your user account, and then use them at the same time, you need to make the package(s) available by executing cmd source devel/setup.bash in the correct order.

So the steps for your scenario look like:

  • source /opt/ros/noetic/setup.bash
  • build the catkin_ws_10 workspace
  • source devel/setup.bash # for catkin_ws_10
  • build the catkin_ws_11 workspace
  • source devel/setup.bash # for catkin_ws_11
  • execute the app in catkin_ws_11

That said, my opinion is that this approach is more complicated than necessary, because you can simply put the code for both ik_load and kdl_kinematics_plugin side-by-side in the same catkin_ws/src/ directory during development.

Other Fixes

  1. You have the wrong filename in kdl_kinematic_plugin/CMakeLists.txt:
# Install the plugin description file to a custom directory
 install(FILES
-  plugin_description.xml
+  kdl_kinematics_plugin_description.xml
 )
  1. In ik_load/CMakeFiles.txt, your catkin_package() statement should contain no statements:
catkin_package(
-  INCLUDE_DIRS include
-  LIBRARIES ik_load
-  CATKIN_DEPENDS roscpp pluginlib geometry_msgs moveit_core moveit_kinematics kdl_kinematic_plugin
)
  1. Your xml file has errors. You have:
<library path="lib/libmoveit_kdl_kinematics_plugin">
  <class name="kdl_kinematics_plugin/KDLKinematicsPlugin"
         type="kdl_kinematics_plugin::KDLKinematicsPlugin"
         base_class_type="kinematics::KinematicsBase">

The "path" property should not have the "lib/" prefix, and the value should be the name of the .so file in catkin_ws/devel/lib/, so "libkdl_kinematics_plugin" for your package.

The "name" property should be removed completely (it's now an optional attribute.)

  1. In your load_ik.cpp, you are specifying the wrong class name to the ClassLoader. The second argument is the name of the base class, not the derived class.
  pluginlib::ClassLoader<kinematics::KinematicsBase> load_ik("kdl_kinematics_plugin", "kdl_kinematics_plugin::KDLKinematicsPlugin");

Have you enabled Debug logging for your load_ik ros node? I see some useful messages being logged by pluginlib.

Even with these 4 fixes, your node still doesn't work, but it looks to me like the plugin portion is being successfully loaded and executed.

$\endgroup$
3
  • $\begingroup$ Hello @Mike973 I have tried to apply the changes in the kdl_kinematic_plugin/CMakeLists.txt and ik_load/CMakeFiles.txt. Even update the githib: github.com/Tommaso2025/Plugin/tree/master I also tried to combine all toghether in the same workspace as you suggsted for package visibility problem but the error is always there. I was wandering if you can give me some feedback about the kdl_kinematics_plugin_description.xml and plugin_description.xml. In this wiki.ros.org/pluginlib/Troubleshooting the point 1.4 says that this kind of error is caused by the plugin.xml file. $\endgroup$ Commented Jun 30 at 17:52
  • $\begingroup$ I updated my answer to add fixes 3 and 4. $\endgroup$
    – Mike973
    Commented Jul 1 at 12:55
  • $\begingroup$ Hello @Mike973 I have updated the code with the fixes you mentioned, as you said the node still does not work. I have enabled the Debug logging but the most useful of it is this: [DEBUG] [1720046659.811653763]: Attempting to create managed instance for class kdl_kinematics_plugin::KDLKinematicsPlugin. [DEBUG] [1720046659.811679096]: Class kdl_kinematics_plugin::KDLKinematicsPlugin has no mapping in classes_available_. I do not understand entirely these messages. To me they are saying that the issue is within the plugin_description.xml or package.xml but to me they are both correct. $\endgroup$ Commented Jul 6 at 11:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.