def get_urdf_parameters(urdf_file, base_elements=None, last_link_vector=None, base_element_type="<STR_LIT>"):
tree = ET.parse(urdf_file)<EOL>root = tree.getroot()<EOL>base_elements = list(base_elements)<EOL>if base_elements is None:<EOL><INDENT>base_elements = ["<STR_LIT>"]<EOL><DEDENT>elif base_elements is []:<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>joints = []<EOL>links = []<EOL>has_next = True<EOL>current_joint = None<EOL>current_link = None<EOL>if base_element_type == "<STR_LIT>":<EOL><INDENT>node_type = "<STR_LIT>"<EOL><DEDENT>elif base_element_type == "<STR_LIT>":<EOL><INDENT>node_type = "<STR_LIT>"<EOL><DEDENT>else:<EOL><INDENT>raise ValueError("<STR_LIT>".format(base_element_type))<EOL><DEDENT>while has_next:<EOL><INDENT>if len(base_elements) != <NUM_LIT:0>:<EOL><INDENT>next_element = base_elements.pop(<NUM_LIT:0>)<EOL><DEDENT>else:<EOL><INDENT>next_element = None<EOL><DEDENT>if node_type == "<STR_LIT>":<EOL><INDENT>(has_next, current_joint) = find_next_joint(root, current_link, next_element)<EOL>node_type = "<STR_LIT>"<EOL>if has_next:<EOL><INDENT>joints.append(current_joint)<EOL><DEDENT><DEDENT>elif node_type == "<STR_LIT>":<EOL><INDENT>(has_next, current_link) = find_next_link(root, current_joint, next_element)<EOL>node_type = "<STR_LIT>"<EOL>if has_next:<EOL><INDENT>links.append(current_link)<EOL><DEDENT><DEDENT><DEDENT>parameters = []<EOL>for joint in joints:<EOL><INDENT>translation = [<NUM_LIT:0>, <NUM_LIT:0>, <NUM_LIT:0>]<EOL>orientation = [<NUM_LIT:0>, <NUM_LIT:0>, <NUM_LIT:0>]<EOL>rotation = [<NUM_LIT:1>, <NUM_LIT:0>, <NUM_LIT:0>]<EOL>bounds = [None, None]<EOL>origin = joint.find("<STR_LIT>")<EOL>if origin is not None:<EOL><INDENT>if origin.attrib["<STR_LIT>"]:<EOL><INDENT>translation = [float(x) for x in origin.attrib["<STR_LIT>"].split()]<EOL><DEDENT>if origin.attrib["<STR_LIT>"]:<EOL><INDENT>orientation = [float(x) for x in origin.attrib["<STR_LIT>"].split()]<EOL><DEDENT><DEDENT>axis = joint.find("<STR_LIT>")<EOL>if axis is not None:<EOL><INDENT>rotation = [float(x) for x in axis.attrib["<STR_LIT>"].split()]<EOL><DEDENT>limit = joint.find("<STR_LIT>")<EOL>if limit is not None:<EOL><INDENT>if limit.attrib["<STR_LIT>"]:<EOL><INDENT>bounds[<NUM_LIT:0>] = float(limit.attrib["<STR_LIT>"])<EOL><DEDENT>if limit.attrib["<STR_LIT>"]:<EOL><INDENT>bounds[<NUM_LIT:1>] = float(limit.attrib["<STR_LIT>"])<EOL><DEDENT><DEDENT>parameters.append(lib_link.URDFLink(<EOL>name=joint.attrib["<STR_LIT:name>"],<EOL>bounds=tuple(bounds),<EOL>translation_vector=translation,<EOL>orientation=orientation,<EOL>rotation=rotation,<EOL>))<EOL><DEDENT>if last_link_vector is not None:<EOL><INDENT>parameters.append(lib_link.URDFLink(<EOL>translation_vector=last_link_vector,<EOL>orientation=[<NUM_LIT:0>, <NUM_LIT:0>, <NUM_LIT:0>],<EOL>rotation=[<NUM_LIT:1>, <NUM_LIT:0>, <NUM_LIT:0>],<EOL>name="<STR_LIT>"<EOL>))<EOL><DEDENT>return parameters<EOL>
Returns translated parameters from the given URDF file

Parameters
----------
urdf_file: str
    The path of the URDF file
base_elements: list of strings
    List of the links beginning the chain
last_link_vector: numpy.array
    Optional : The translation vector of the tip.
base_element_type: str

Returns
-------
list[ikpy.link.URDFLink]