[ros-users] Running a realtime joint controller: Tutorial Error

Rob Wheeler wheeler at willowgarage.com
Tue Aug 3 16:44:08 UTC 2010


What does your controller_plugins.xml file look like?

-R

On Tue, Aug 3, 2010 at 7:23 AM, koen buys <koen.buys at mech.kuleuven.be>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:
>
> <package>
>  <description brief="my_controller_pkg">
>
>     my_controller_pkg
>
>  </description>
>  <author>Koen</author>
>  <license>BSD</license>
>  <review status="unreviewed" notes=""/>
>  <url>http://ros.org/wiki/my_controller_pkg</url>
>  <depend package="pr2_controller_interface"/>
>  <depend package="pr2_mechanism_model"/>
>  <depend package="pluginlib"/>
>  <export>
>    <pr2_controller_interface plugin="${prefix}/controller_plugins.xml" />
>  </export>
> </package>
>
> 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 <pluginlib/class_list_macros.h>
>
> 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 at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ros.org/pipermail/ros-users/attachments/20100803/98d4dd8f/attachment-0003.html>


More information about the ros-users mailing list