Robotics StackExchange | Archived questions

Can pr2_controller_interface/manager/mechanism be used with other robots?

Greetings,

I am currently using ROS Indigo and Linux Ubuntu 14.04. I found an impedance controller implementation for the PR2 robot found at: https://github.com/jiangxihj/ImpedCon...

This code uses the meta-package that contains the pr2controlinterface, pr2controlmanager, and pr2_mechanism. It can read/write joint data without topics.

My question is whether I can directly use this on a robot other than PR2, like the baxter robot? As I have tried to port the code, I have updated the launch and config files appropriately I believe, but the spawner process associated with the PR2controllermanager always crashes.

My current code can be seen here: https://github.com/birlrobotics/birl_baxter_controllers.git

I first load baxter as usual: $ ./baxter.sh sim $ roslaunch baxtergazebo baxterworld.launch

Then I run a roslaunch file that loads the impedance controller:

<launch>
    <!-- Load the impedance controller configuration from the YAML file to parameter server -->
    <rosparam file="$(find imped_control)/config/baxter_imped_controller.yaml" command="load" />

    <!-- Load the default controller -->
    <node pkg="pr2_controller_manager" type="spawner" args="r_arm_cart_imped_controller" name="r_arm_cart_imped_controller_spawner" output="screen"/>

    <!-- Load the default stopped controllers -->
    <node pkg="pr2_controller_manager" type="unspawner" args="r_arm_controller"  name="r_arm_stopper"/>

</launch>

The launch file loads the baxterimpedcontroller.yaml file which, calls my impedance controller like this:

robot:
  r_arm_cart_imped_controller:
    type: imped_control/ImpedControlPlugin
    root_name: base
    tip_name: r_gripper_r_finger_tip

The controller type is defined in the controller_plugins.xml code show below:

<library path="lib/libimped_control">
    <class name="imped_control/ImpedControlPlugin"
           type="imped_control_ns::ImpedControlClass"
           base_class_type="pr2_controller_interface::Controller" />
</library>

This plugin code is refered to in the package.xml file:

<package>
  <name>imped_control</name>
  <version>0.0.0</version>
  <description>Baxter impedance control package</description>

  <maintainer email="jhu@todo.todo">jhu</maintainer>
  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>pluginlib</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>pr2_controller_interface</build_depend>
  <build_depend>pr2_mechanism_model</build_depend>
  <build_depend>controller_interface</build_depend>
  <build_depend>control_toolbox</build_depend>
  <build_depend>effort_controllers</build_depend>
  <build_depend>baxter_core_msgs</build_depend>
  <build_depend>yaml-cpp</build_depend>

  <run_depend>controller_interface</run_depend>
  <run_depend>control_toolbox</run_depend>
  <run_depend>pr2_controller_interface</run_depend>
  <run_depend>pr2_mechanism_model</run_depend>
  <run_depend>effort_controllers</run_depend>
  <run_depend>baxter_core_msgs</run_depend>
  <run_depend>yaml-cpp</run_depend>
  <run_depend>pluginlib</run_depend>
  <run_depend>roscpp</run_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <controller_interface plugin="${prefix}/config/controller_plugins.xml" />
  </export>
</package>

The CMakeLists.txt seems correct and implements a shared library. The file is below and the library can be seen in devel/lib/libimped_control.so

cmake_minimum_required(VERSION 2.8.3)
project(imped_control)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  controller_interface
  control_toolbox
  baxter_core_msgs
  pluginlib
  pr2_controller_interface
  pr2_mechanism_model
  roscpp
)

## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED COMPONENTS system)
find_package(PkgConfig REQUIRED)
pkg_check_modules(YAML_CPP REQUIRED yaml-cpp)

find_path(YAML_CPP_INCLUDE_DIR
          NAMES yaml_cpp.h
          PATHS ${YAML_CPP_INCLUDE_DIRS})

find_library(YAML_CPP_LIBRARY
             NAMES YAML_CPP
             PATHS ${YAML_CPP_LIBRARY_DIRS})

if(${YAML_CPP_VERSION} VERSION_LESS 0.5)
  add_definitions(-DDEPRECATED_YAML_CPP_VERSION)
endif()

## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()

catkin_package(
  CATKIN_DEPENDS
  pluginlib
  pr2_controller_interface
  pr2_mechanism_model  
  controller_interface
  control_toolbox
  baxter_core_msgs
  roscpp
  DEPENDS yaml-cpp
  INCLUDE_DIRS include
  LIBRARIES ${PROJECT_NAME}
)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
  ${Boost_INCLUDE_DIR}
)

add_library(${PROJECT_NAME}
   src/imped_control.cpp
   src/utility.cpp
)

target_link_libraries(${PROJECT_NAME}
  ${catkin_LIBRARIES}
  ${Boost_LIBRARIES}
  ${YAML_CPP_LIBRARIES}

)

add_dependencies(${PROJECT_NAME}
  ${catkin_EXPORTED_TARGETS}
  baxter_core_msgs_gencpp
)

If I look inside the shared library with ldd, I don't see the pr2 mechanism model elements....

linux-vdso.so.1 =>  (0x00007ffef9534000)
    libpr2_mechanism_model.so => /opt/ros/indigo/lib/libpr2_mechanism_model.so (0x00007f852099d000)
    liborocos-kdl.so.1.3 => /opt/ros/indigo/lib/liborocos-kdl.so.1.3 (0x00007f852071e000)
    libclass_loader.so => /opt/ros/indigo/lib/libclass_loader.so (0x00007f85204ff000)
    libroscpp.so => /opt/ros/indigo/lib/libroscpp.so (0x00007f852019a000)
    librosconsole.so => /opt/ros/indigo/lib/librosconsole.so (0x00007f851ff6d000)
    librostime.so => /opt/ros/indigo/lib/librostime.so (0x00007f851fd43000)
    libboost_system.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 (0x00007f851fb14000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f851f8f5000)
    libconsole_bridge.so.0.2 => /usr/lib/x86_64-linux-gnu/libconsole_bridge.so.0.2 (0x00007f851f6eb000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f851f3e7000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f851f0e0000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f851eeca000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f851eb05000)
    libkdl_parser.so => /opt/ros/indigo/lib/libkdl_parser.so (0x00007f851e8fd000)
    liburdf.so => /opt/ros/indigo/lib/liburdf.so (0x00007f851e6d1000)
    libtinyxml.so.2.6.2 => /usr/lib/x86_64-linux-gnu/libtinyxml.so.2.6.2 (0x00007f851e4bc000)
    libroslib.so => /opt/ros/indigo/lib/libroslib.so (0x00007f851e2a9000)
    libboost_filesystem.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.54.0 (0x00007f851e093000)
    libPocoFoundation.so.9 => /usr/lib/libPocoFoundation.so.9 (0x00007f851dd46000)
    libroscpp_serialization.so => /opt/ros/indigo/lib/libroscpp_serialization.so (0x00007f851db43000)
    libxmlrpcpp.so => /opt/ros/indigo/lib/libxmlrpcpp.so (0x00007f851d925000)
    libcpp_common.so => /opt/ros/indigo/lib/libcpp_common.so (0x00007f851d71c000)
    libboost_thread.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0 (0x00007f851d506000)
    librosconsole_log4cxx.so => /opt/ros/indigo/lib/librosconsole_log4cxx.so (0x00007f851d2f2000)
    librosconsole_backend_interface.so => /opt/ros/indigo/lib/librosconsole_backend_interface.so (0x00007f851d0ef000)
    liblog4cxx.so.10 => /usr/lib/liblog4cxx.so.10 (0x00007f851cd07000)
    libboost_regex.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.54.0 (0x00007f851ca00000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f851c7f7000)
    /lib64/ld-linux-x86-64.so.2 (0x00005569e9be3000)
    liburdfdom_world.so.0.2 => /usr/lib/x86_64-linux-gnu/liburdfdom_world.so.0.2 (0x00007f851c5ca000)
    librosconsole_bridge.so => /opt/ros/indigo/lib/librosconsole_bridge.so (0x00007f851c3c5000)
    liburdfdom_model.so.0.2 => /usr/lib/x86_64-linux-gnu/liburdfdom_model.so.0.2 (0x00007f851c198000)
    librospack.so => /opt/ros/indigo/lib/librospack.so (0x00007f851bf57000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f851bd19000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f851bb00000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f851b8fc000)
    libaprutil-1.so.0 => /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0 (0x00007f851b6d4000)
    libapr-1.so.0 => /usr/lib/x86_64-linux-gnu/libapr-1.so.0 (0x00007f851b4a3000)
    libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007f851b129000)
    libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007f851ad22000)
    libboost_program_options.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.54.0 (0x00007f851aab3000)
    libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f851a54f000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f851a315000)
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f851a0eb000)
    libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f8519ee6000)
    libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007f8518679000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f8518475000)

Advice is appreciated.

Asked by Juan on 2017-01-16 02:48:41 UTC

Comments

Answers