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 >