URDF Error No valid hardware interface element found in joint
Dear all,
I am fairly new to ROS and Gazebo.
I am using ros-kinetic and gazebo7.3 on Ubuntu 16.04. I have been following this tutorial (http://www.generationrobots.com/blog/...) and have adapted it slightly for my own vehicle (4 wheels instead of 2, skid drive plugin instead of diff drive).
I receive errors when running roslaunch on my own project, and I get the same errors when using the same command on the project provided at the above link. I assume that means that I am missing something in ros or Gazebo.
Running:
roslaunch jaguar4x4_gazebo jaguar4x4_world.launch
gives the following errors (repeated for each joint and trans):
[ERROR] [1472045218.311147687, 0.142000000]: No valid hardware interface element found in joint 'left_back_wheel_hinge'.
[ERROR] [1472045218.311359894, 0.142000000]: Failed to load joints for transmission 'left_back_trans'.
Also:
[ERROR] [1472045218.646822285, 0.365000000]: Exception thrown while initializing controller leftfrontWheel_effort_controller. Could not find resource 'left_front_wheel_hinge' in 'hardware_interface::EffortJointInterface'. [ERROR] [WallTime: 1472045219.647578] [1.363000] Failed to load leftfrontWheel_effort_controller [INFO] [WallTime: 1472045219.647938] [1.363000] Loading controller: leftbackwheel_effort_controller [ERROR] [WallTime: 1472045220.651591] [2.366000] Failed to load leftbackwheel_effort_controller
This error is repeated for each of the 4 wheels.
I have seen similar error messages posted on this site, the solutions don’t seem to fix mine.
(1). http://answers.gazebosim.org/question...
I already use the hardwareInterface tags
(2). I have already installed ros_control
EDIT -------------------------------------------------------------------
I think maybe there is an issue with the way that I have created my joints and the use of the hardwareInterface tags.
In my macros.xacro file I create my joints and link the transmission separately (I repeat this twice for the front and back wheels):
<joint name="${lr}_front_wheel_hinge" type="continuous"> <parent link="chassis"/> <child link="${lr}_front_wheel"/> <origin xyz="${+wheelPos-chassisLength+2*wheelRadius} ${tY*wheelWidth/2+tY*chassisWidth/2} ${wheelRadius}" rpy="0 0 0" /> <axis xyz="0 1 0" rpy="0 0 0" /> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint>
<transmission name="${lr}_front_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${lr}_front_wheel_hinge" />
<actuator name="${lr}_front_Motor">
<hardwareInterface>EffortJointInterface</hardwareInterface>
<mechanicalReduction>10</mechanicalReduction>
</actuator>
</transmission>
Doing it this way gives the errors mentioned above, but my model in Gazebo appears.
If I try to merge both of these blocks so that there is just one joint tag wrapped by the transmission tags then I get the following error and my model does not appear in Gazebo:
[ERROR] [1473672367.041892175]: Failed to find root link: Two root links found: [footprint] and [left_back_wheel]
I don't understand why I get this error because I have a joint between my chassis base link and the world in my Jaguar4x4.xacro file :
<link name="footprint" />
<joint name="base_joint" type="fixed">
<parent link="footprint"/>
<child link="chassis"/>
</joint>
I now get a number of errors when trying to combine the joint and transmission blocks, so I imagine that this is not the best way to go?
Edit 2 -------------------------------------------------------------------------
Here is my jaguar4x4_control/config/jaguar4x4_control.yaml file ...
Try <transmission name="${lr}_front_trans"> <type>transmission_interface/SimpleTransmission</type> <joint name="${lr}_front_wheel_hinge"> <hardwareinterface>EffortJointInterface</hardwareinterface> /> <actuator name="${lr}_front_Motor"> <hardwareinterface>EffortJointInterface</hardwareinterface> <mechanicalreduction>10</mechanicalreduction> </actuator> </transmission> Could you give the config file for your gazebo ros controller?
@GuillaumeB sorry for the slow response. I tried the code but I get the same errors. I have attached my config file
Your config file seems correct. have you : <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotnamespace>/robot_gazebo</robotnamespace> </plugin> </gazebo> in your urdf? you really need to specify the hardwareinterface twice in the <transmission>. One time for the <joint> and one time for the <actuator>
@GuillaumeB I do have that code in my URDF. I tried adding the additional hardwareInterface but that didn't work. I really thought it had worked but it was just another model that was still appearing in my gazebo. I still get the controller spawner warning and an error stating that a process had died
I have now created a new model using a single .world file. (I followed this tutorial mostly http://machineawakening.blogspot.co.uk/2015/05/controlling-differential-drive-robot-in.html). I can use the turtlesim teleop key node and I can use twist commands. I just now need to work out how to publish twist command via scripts and process images etc. Do you think it is worth me giving up on the URDF one do you see any future issues with this single file approach?
Using only one file is not 'modular' but if you just need something to work as soon as possible use this. If you are still interrested in using your URDF and gazebo_ros_controller please see -> http://www.generationrobots.com/blog/en/2015/02/robotic-simulation-scenarios-with-gazebo-and-ros/ I found that it was a pretty complete tutorial
@GuillaumeB Thanks for the help, that was actually the tutorial I used. However, as I mentioned in the original post I couldn't actually run the code supplied by that tutorial, I received the same errors as the one that I have on my own code. It'd be good if I could get the URDF working eventually, but I think for now it is probably best to make some progress so I will use the single file for now. Thanks again for the help.
Were there any solutions for this problem? I recently got the same kind of error and cannot figure out what the problem is: [link text](http://answers.gazebosim.org/question/18186/libgazebo_ros_control-in-ros-indigo-is-throwing-exception-for-joint_position_controllers-bug-dec-2017/)