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