Hi Eitan, This was indeed the solution. Koen On 3 August 2010 23:50, Eitan Marder-Eppstein wrote: > PLUGINLIB_REGISTER_CLASS is deprecated, but should still work just fine. > > I wonder if the line: "using namespace my_controller_ns" before the macro > could screw things up. I don't have a great reason for this, but I seem to > remember the Poco manifest stuff being a bit finiky when it was called from > within a namespace and this could have a similar effect. Perhaps, instead of > using the namespace, remove that line, call the macro, open the > my_controller_ns namespace, and put the rest of your implementation inside > of that. I'm not sure that'll fix anything, but its worth a shot and its > more consistent with how most of our plugins are written. > > Hope this helps, > > Eitan > > On Tue, Aug 3, 2010 at 1:51 PM, Stuart Glaser > wrote: >> >> He does have PLUGINLIB_REGISTER_CLASS.  Doesn't that still work? >> >> -Stu >> >> On Tue, Aug 3, 2010 at 1:28 PM, Tully Foote >> wrote: >> > That error is due to a lack of the PLUGINLIB_DECLARE_CLASS macro. >> >  See http://www.ros.org/wiki/pluginlib/Troubleshooting >> > >> > Tully >> > On Tue, Aug 3, 2010 at 11:59 AM, Stuart Glaser >> > >> > wrote: >> >> >> >> Hi Koen, >> >> >> >> This error: >> >> >> >> Cannot load library: No manifest in >> >> >> >> >> >> /home/kbuys/ros/private-kul-ros-pkg/ros_controller_tutorials/my_controller_pkg/lib/libmy_controller_lib.so: >> >> MyControllerPlugin" >> >> >> >> indicates that the library was built incorrectly.  Pluginlib searches >> >> the library for a particular symbol in order to find the plugins, and >> >> this error explains that it couldn't find the symbol.  Run the >> >> following to see what plugins the library contains: >> >> >> >> nm lib/libmy_controller_lib.so  | grep pocoBuildManifest >> >> >> >> Is your plugin listed? >> >> >> >> -Stu >> >> >> >> On Tue, Aug 3, 2010 at 11:02 AM, koen buys >> >> wrote: >> >> > $ cat controller_plugins.xml >> >> > >> >> >  > >> >         type="my_controller_ns::MyControllerClass" >> >> >         base_class_type="pr2_controller_interface::Controller" /> >> >> > >> >> > >> >> > >> >> > On 3 August 2010 18:44, Rob Wheeler wrote: >> >> >> What does your controller_plugins.xml file look like? >> >> >> >> >> >> -R >> >> >> >> >> >> On Tue, Aug 3, 2010 at 7:23 AM, koen buys >> >> >> >> >> >> wrote: >> >> >>> >> >> >>> Hi all, >> >> >>> >> >> >>> I'm trying to run the following tutorial: >> >> >>> >> >> >>> >> >> >>> >> >> >>> http://www.ros.org/wiki/pr2_mechanism/Tutorials/Running%20a%20realtime%20joint%20controller >> >> >>> Rxconsole is giving me the following error: >> >> >>> >> >> >>> "Could not load class MyControllerPlugin: Failed to load library >> >> >>> >> >> >>> >> >> >>> >> >> >>> /home/kbuys/ros/private-kul-ros-pkg/ros_controller_tutorials/my_controller_pkg/lib/libmy_controller_lib.so. >> >> >>> Make sure that you are calling the PLUGINLIB_REGISTER_CLASS macro >> >> >>> in >> >> >>> the library code, and that names are consistent between this macro >> >> >>> and >> >> >>> your XML. Error string: Cannot load library: No manifest in >> >> >>> >> >> >>> >> >> >>> >> >> >>> /home/kbuys/ros/private-kul-ros-pkg/ros_controller_tutorials/my_controller_pkg/lib/libmy_controller_lib.so: >> >> >>> MyControllerPlugin" >> >> >>> >> >> >>> Together with the following error after: >> >> >>> >> >> >>> "Could not load controller 'my_controller_name' because controller >> >> >>> type 'MyControllerPlugin' does not exist" >> >> >>> >> >> >>> We couldn't find the cause of it. When I did a : >> >> >>> >> >> >>> $ rosrun pr2_controller_manager pr2_controller_manager list-types >> >> >>> CartesianTrajectoryController >> >> >>> ContactObserverPlugin >> >> >>> JTTeleopController >> >> >>> JointGravityController >> >> >>> JointPendulumController >> >> >>> MyControllerPlugin >> >> >>> SlipGripControllerPlugin >> >> >>> SrhFakeJointCalibrationController >> >> >>> StanfordWBCPump >> >> >>> VelController >> >> >>> ethercat_trigger_controllers/MultiTriggerController >> >> >>> ethercat_trigger_controllers/ProjectorController >> >> >>> ethercat_trigger_controllers/TriggerController >> >> >>> ft_eval/PoseForceController >> >> >>> ft_eval/TwistForceController >> >> >>> joint_qualification_controllers/CheckoutController >> >> >>> joint_qualification_controllers/CounterbalanceTestController >> >> >>> joint_qualification_controllers/HeadPositionController >> >> >>> joint_qualification_controllers/HysteresisController >> >> >>> joint_qualification_controllers/JointLimitCalibrationController >> >> >>> joint_qualification_controllers/MotorJointCalibrationController >> >> >>> joint_qualification_controllers/WristDifferenceController >> >> >>> pr2_calibration_controllers/CasterCalibrationController >> >> >>> pr2_calibration_controllers/GripperCalibrationController >> >> >>> pr2_calibration_controllers/JointCalibrationController >> >> >>> pr2_calibration_controllers/WristCalibrationController >> >> >>> pr2_controller_manager/TestController >> >> >>> pr2_mechanism_controllers/CasterController >> >> >>> pr2_mechanism_controllers/CasterControllerNode >> >> >>> pr2_mechanism_controllers/LaserScannerTrajController >> >> >>> pr2_mechanism_controllers/Pr2BaseController >> >> >>> pr2_mechanism_controllers/Pr2BaseController2 >> >> >>> pr2_mechanism_controllers/Pr2GripperController >> >> >>> pr2_mechanism_controllers/Pr2Odometry >> >> >>> robot_mechanism_controllers/CartesianPoseController >> >> >>> robot_mechanism_controllers/CartesianTwistController >> >> >>> robot_mechanism_controllers/CartesianWrenchController >> >> >>> robot_mechanism_controllers/JointEffortController >> >> >>> robot_mechanism_controllers/JointPositionController >> >> >>> robot_mechanism_controllers/JointSplineTrajectoryController >> >> >>> robot_mechanism_controllers/JointTrajectoryActionController >> >> >>> robot_mechanism_controllers/JointVelocityController >> >> >>> rttuning_controllers/JointTuningController >> >> >>> teleop_controllers/JinvTeleopController7 >> >> >>> tff_controller/TFFController >> >> >>> tirt/TirtController >> >> >>> >> >> >>> It shows up. However now: >> >> >>> >> >> >>> $ rosrun pr2_controller_manager pr2_controller_manager load >> >> >>> MyControllerPlugin >> >> >>> Error when loading MyControllerPlugin >> >> >>> >> >> >>> This is my manifest: >> >> >>> >> >> >>> >> >> >>>   >> >> >>> >> >> >>>     my_controller_pkg >> >> >>> >> >> >>>   >> >> >>>  Koen >> >> >>>  BSD >> >> >>>   >> >> >>>  http://ros.org/wiki/my_controller_pkg >> >> >>>   >> >> >>>   >> >> >>>   >> >> >>>   >> >> >>>    > >> >>> plugin="${prefix}/controller_plugins.xml" >> >> >>> /> >> >> >>>   >> >> >>> >> >> >>> >> >> >>> This is my CMakeLists: >> >> >>> >> >> >>> cmake_minimum_required(VERSION 2.4.6) >> >> >>> include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) >> >> >>> >> >> >>> # Set the build type.  Options are: >> >> >>> #  Coverage       : w/ debug symbols, w/o optimization, w/ >> >> >>> code-coverage >> >> >>> #  Debug          : w/ debug symbols, w/o optimization >> >> >>> #  Release        : w/o debug symbols, w/ optimization >> >> >>> #  RelWithDebInfo : w/ debug symbols, w/ optimization >> >> >>> #  MinSizeRel     : w/o debug symbols, w/ optimization, stripped >> >> >>> binaries >> >> >>> #set(ROS_BUILD_TYPE RelWithDebInfo) >> >> >>> >> >> >>> rosbuild_init() >> >> >>> >> >> >>> #set the default path for built executables to the "bin" directory >> >> >>> set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) >> >> >>> #set the default path for built libraries to the "lib" directory >> >> >>> set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) >> >> >>> >> >> >>> #uncomment if you have defined messages >> >> >>> #rosbuild_genmsg() >> >> >>> #uncomment if you have defined services >> >> >>> #rosbuild_gensrv() >> >> >>> >> >> >>> #common commands for building c++ executables and libraries >> >> >>> #rosbuild_add_library(${PROJECT_NAME} src/example.cpp) >> >> >>> #target_link_libraries(${PROJECT_NAME} another_library) >> >> >>> #rosbuild_add_boost_directories() >> >> >>> #rosbuild_link_boost(${PROJECT_NAME} thread) >> >> >>> #rosbuild_add_executable(example examples/example.cpp) >> >> >>> #target_link_libraries(example ${PROJECT_NAME}) >> >> >>> rosbuild_add_library(my_controller_lib src/my_controller_file.cpp) >> >> >>> >> >> >>> And this is the content of my source file: >> >> >>> >> >> >>> #include "my_controller_pkg/my_controller_file.h" >> >> >>> #include >> >> >>> >> >> >>> using namespace my_controller_ns; >> >> >>> >> >> >>> /// Register controller to pluginlib >> >> >>> PLUGINLIB_REGISTER_CLASS(MyControllerPlugin, >> >> >>>                         my_controller_ns::MyControllerClass, >> >> >>>                         pr2_controller_interface::Controller) >> >> >>> >> >> >>> /// Controller initialization in non-realtime >> >> >>> bool MyControllerClass::init(pr2_mechanism_model::RobotState >> >> >>> *robot, >> >> >>>                            ros::NodeHandle &n) >> >> >>> { >> >> >>>  std::string joint_name; >> >> >>>  if (!n.getParam("joint_name", joint_name)) >> >> >>>  { >> >> >>>    ROS_ERROR("No joint given in namespace: '%s')", >> >> >>>              n.getNamespace().c_str()); >> >> >>>    return false; >> >> >>>  } >> >> >>> >> >> >>>  joint_state_ = robot->getJointState(joint_name); >> >> >>>  if (!joint_state_) >> >> >>>  { >> >> >>>    ROS_ERROR("MyController could not find joint named '%s'", >> >> >>>              joint_name.c_str()); >> >> >>>    return false; >> >> >>>  } >> >> >>>  return true; >> >> >>> } >> >> >>> >> >> >>> >> >> >>> /// Controller startup in realtime >> >> >>> void MyControllerClass::starting() >> >> >>> { >> >> >>>  init_pos_ = joint_state_->position_; >> >> >>> } >> >> >>> >> >> >>> >> >> >>> /// Controller update loop in realtime >> >> >>> void MyControllerClass::update() >> >> >>> { >> >> >>>  double desired_pos = init_pos_ + 0.5 * >> >> >>> sin(ros::Time::now().toSec()); >> >> >>>  double current_pos = joint_state_->position_; >> >> >>>  joint_state_->commanded_effort_ = -10 * (current_pos - >> >> >>> desired_pos); >> >> >>> } >> >> >>> >> >> >>> >> >> >>> /// Controller stopping in realtime >> >> >>> void MyControllerClass::stopping() >> >> >>> {} >> >> >>> _______________________________________________ >> >> >>> ros-users mailing list >> >> >>> ros-users@code.ros.org >> >> >>> https://code.ros.org/mailman/listinfo/ros-users >> >> >> >> >> >> >> >> > _______________________________________________ >> >> > ros-users mailing list >> >> > ros-users@code.ros.org >> >> > https://code.ros.org/mailman/listinfo/ros-users >> >> > >> >> >> >> >> >> >> >> -- >> >> Stuart Glaser >> >> sglaser -at- willowgarage -dot- com >> >> www.willowgarage.com >> >> _______________________________________________ >> >> ros-users mailing list >> >> ros-users@code.ros.org >> >> https://code.ros.org/mailman/listinfo/ros-users >> > >> > >> > >> > -- >> > Tully Foote >> > Systems Engineer >> > Willow Garage, Inc. >> > tfoote@willowgarage.com >> > (650) 475-2827 >> > >> > _______________________________________________ >> > ros-users mailing list >> > ros-users@code.ros.org >> > https://code.ros.org/mailman/listinfo/ros-users >> > >> > >> >> >> >> -- >> Stuart Glaser >> sglaser -at- willowgarage -dot- com >> www.willowgarage.com >> _______________________________________________ >> ros-users mailing list >> ros-users@code.ros.org >> https://code.ros.org/mailman/listinfo/ros-users > >