HardwareInterface problem with Gazebo and ros_control
Hello! I am trying to simulate a full custom robot with Gazebo and MoveIt but I am running into one problem: gazebo cannot find the proper hardware interface for the joints in the URDF file.
I need to control two arms (UR10) so similarly to what's done in the package universal_robot
I define a controller for each joint type position_controllers/JointTrajectoryController. My URDF file uses UR10's original URDF file which defines the transmission elements as "PositionJointInterface":
<transmission name="${prefix}shoulder_pan_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${prefix}shoulder_pan_joint">
<hardwareInterface>PositionJointInterface</hardwareInterface>
</joint>
<actuator name="${prefix}shoulder_pan_motor">
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
And yet when I try to run gazebo and spawn the controllers I get this error:
[ERROR] [1445527289.044457090, 0.821000000]: Could not find joint 'leftshoulder_pan_joint' in 'hardware_interface::PositionJointInterface'.
[ERROR] [1445527289.044594098, 0.821000000]: Failed to initialize the controller
I have been digging around trying to find the problem and I noticed that after my URDF was converted with xacro PositionJointInterfaces turned into EffortJointInterfaces:
<transmission name="leftshoulder_pan_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="leftshoulder_pan_joint">
<hardwareInterface>EffortJointInterface</hardwareInterface>
</joint>
<actuator name="leftshoulder_pan_motor">
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
Can somebody explain what is going on?