Moveit Custom Controller
I'm trying to use Moveit and Gazebo with a custom controller provided by my robot's manufacturer. When I launch both moveit(+ rviz) and gazebo and try to plan, I get the following error:
[ERROR] [1586291253.875844268, 5322.770000000]: Unable to identify any set of controllers that can actuate the specified joints: [ right_gripper_l_finger_joint right_j0 right_j1 right_j2 right_j3 right_j4 right_j5 right_j6 ]
[ERROR] [1586291253.875874497, 5322.770000000]: Known controllers and their joints:
controller '/robot/limb/right' controls joints:
right_j0
right_j1
right_j2
right_j3
right_j4
right_j5
right_j6
Note, that this works when I disable the gripper, meaning that moveit doesn't know what to do with the right_gripper_l_finger_joint
. However, I specify the contoller for this joint in my controller manager yaml file like so:
controller_list:
# ...
- name: /io/end_effector
action_ns: right_gripper
type: sawyer_sim_controllers/ElectricGripperController
default: true
joints:
- right_gripper_l_finger_joint
I've verified that the name and action namespace listed are correct:
>>># rostopic list | grep right_gripper
/io/end_effector/right_gripper/command
/io/end_effector/right_gripper/config
/io/end_effector/right_gripper/state
And if I inspect the running controllers with rosservice call /robot/controller_manager/list_controllers
I see my controller running:
controller:
- name: "electric_gripper_controller"
state: "running"
type: "sawyer_sim_controllers/ElectricGripperController"
claimed_resources:
- hardware_interface: "sawyer_hardware_interface::SharedJointInterface"
resources: [right_gripper_l_finger_joint/MAIN_SETPOINT_COMMAND, right_gripper_r_finger_joint/MAIN_SETPOINT_COMMAND]
So, is there a piece here that I'm missing?
Edit:
Somehow I missed this before, but when starting RViz and moveit, it logs the following error:
[ERROR] [1586294845.676943431, 116.035000000]: Unknown controller type: sawyer_sim_controllers/ElectricGripperController
Still not sure what causes this as my ros params seem to be set up correctly and the controller manager knows about this type.
You're last edit seems to point to a cause here. (I'm assuming) MoveIt doesn't appear to know that type of controller. That would cause it to fail loading that stanza, leading to no controllers for your
right_gripper_l_finger_joint
, leading to the error message you quoted earlier.Right, I understand that moveit doesn't know about the controller, but given that it is a subclass of EffortJointInterface, it should still be able to work with it, right? Or is it a matter of somehow notifying moveit about it's existence?
There's a difference between a MoveIt controller and a
ros_control
controller. You link to a package providingros_control
plugins/controllers/capabilities.MoveIt doesn't do anything directly with
ros_control
controllers.That may be the main issue here. If
sawyer_sim_controllers/ElectricGripperController
is actually aros_control
controller, you cannot just use it with MoveIt directly.I'm not sure if MoveIt or ros_control is giving you that "Unknown controller type", here's a trick for improving the verbosity of your terminal. Add to .bash.rc
More info: http://dav.ee/blog/notes/archives/898