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 >>>   >>>   >>>   >>>   >>>     >>>   >>> >>> >>> 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