ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

You have some tools available to help you debug urdf files, you can check it at the urdf wiki page. Personnally I use :

check_urdf /PATH/TO/URDF

When running this with your urdf the output is :

Error:   joint limit: no effort
         at line 146 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/joint.cpp
Error:   Could not parse limit element for joint [steering_joint_left_1]
         at line 494 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/joint.cpp
Error:   joint xml is not initialized correctly
         at line 207 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/model.cpp
ERROR: Model Parsing the xml failed

Eventhough the lines are not the ones from the urdf file it can directly tells you that something is wrong with a limit tag within a joint tag. After a quick search in the file you'll see that at the lines 327 and 349 you miss the attributes effort and velocity within the limit tag.

After correcting that, the output of the previous command is now :

Error:   Failed to find root link: Two root links found: [body] and [suspension_main_right_2]
         at line 238 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/model.cpp
ERROR: Model Parsing the xml failed

This error means that there are two links in your urdf that are not a child of any other link. You can only have one link like that : it's called the root link. The tools tells you that body and suspension_main_right_2 are defined as root links. So all you have to do is correct your urdf to set a parent to suspension_main_right_2.

Once you've done it you can print the graph of your link with :

urdf_to_graphiz /PATH/TO/URDF

Note : After I did it (by setting the parent of suspension_main_right_2 to body) your graph looks odd to me, is it intended to have suspension_left_1 being the child of suspension_holder_left_1 AND of suspension_main_left_1 (same with right and 1,2) ?

You have some tools available to help you debug urdf files, you can check it at the urdf wiki page. Personnally I use :

check_urdf /PATH/TO/URDF

When running this with your urdf the output is :

Error:   joint limit: no effort
         at line 146 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/joint.cpp
Error:   Could not parse limit element for joint [steering_joint_left_1]
         at line 494 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/joint.cpp
Error:   joint xml is not initialized correctly
         at line 207 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/model.cpp
ERROR: Model Parsing the xml failed

Eventhough the lines are not the ones from the urdf file it can directly tells you that something is wrong with a limit tag within a joint tag. After a quick search in the file you'll see that at the lines 327 and 349 you miss the attributes effort and velocity within the limit tag.

After correcting that, the output of the previous command is now :

Error:   Failed to find root link: Two root links found: [body] and [suspension_main_right_2]
         at line 238 in /build/urdfdom-UJ3kd6/urdfdom-0.4.1/urdf_parser/src/model.cpp
ERROR: Model Parsing the xml failed

This error means that there are two links in your urdf that are not a child of any other link. You can only have one link like that : it's called the root link. The tools tells you that body and suspension_main_right_2 are defined as root links. So all you have to do is correct your urdf to set a parent to suspension_main_right_2.

Once you've done it you can print the graph of your link with :

urdf_to_graphiz /PATH/TO/URDF

Note : After I did it (by setting the parent of suspension_main_right_2 to body) your graph looks odd to me, is it intended to have suspension_left_1 being the child of suspension_holder_left_1 AND of suspension_main_left_1 (same with right and 1,2) ?


Edit : After checking again, I've found out that suspension_main_right_2 has no parents because of a typo probably. For the joint spring_right_2 the child is set to suspension_main_left_2 instead of suspension_main_right_2.