Skip to main content

Documentation Status Coverage Status PyPI version

yourdfpy

Yet anOther URDF parser for Python. Yup, it's another one. Deal with it.

Yourdfpy is a simpler and easier-to-use library for loading, manipulating, validating, saving, and visualizing URDF files.

Installation

You can install yourdfpy directly from pip:

pip install yourdfpy

Visualization

Once installed, you can visualize a URDF model from the command line:

yourdfpy ./my_description/urdf/robot.urdf

You can use the following keyboard shortcuts to inspect your model:

  • a: Toggle rendered XYZ/RGB axis markers (off, world frame, every frame)
  • w: Toggle wireframe mode (good for looking inside meshes, off by default)
  • c: Toggle back face culling (on by default but in wireframe mode it is sometimes useful to see the back sides)

But why another one?!?

Why are you wasting not only your but also our time? you might ask. Fair point. There are already urdfpy and urdf_parser_py that deal with URDFs. Unfortunately, none of these solutions allow customizable URDF parsing that is fully independent of validation and mesh loading. Dealing with filenames, outdated dependencies, open bug reports, and limited flexibility when it comes to serialization are other disadvantages. As shown in the table below, yourdfpy is the most robust one when it comes to loading URDFs in the wild.

Example URDFs

urdfpy urdf_parser_py yourdfpy
Decouple parsing from validation :heavy_check_mark:
Decouple parsing from loading meshes :heavy_check_mark: :heavy_check_mark:
Visualize URDF :heavy_check_mark: :heavy_check_mark:
Forward Kinematics :heavy_check_mark: :heavy_check_mark:
Robustness test: loading 12 URDF files from here 4/12 6/12 12/12
Avg. loading time per file (w/ mesh loading) 480 ms 370 ms
(w/o mesh loading) 3.2 ms 6.2 ms
Test on 4 URDF files on which urdfpy succeeds 347.5 ms 203 ms
Test on 6 URDF files on which urdf_parser_py succeeds 2.6 ms 3.8 ms
Click to expand code listing that produces the above table entries.
robot_assets = ['robot-assets/urdfs/robots/barret_hand/bhand_model.URDF', 'robot-assets/urdfs/robots/robotiq_gripper/robotiq_arg85_description.URDF', 'robot-assets/urdfs/robots/anymal/anymal.urdf', 'robot-assets/urdfs/robots/franka_panda/panda.urdf', 'robot-assets/urdfs/robots/ginger_robot/gingerurdf.urdf', 'robot-assets/urdfs/robots/halodi/eve_r3.urdf', 'robot-assets/urdfs/robots/kinova/kinova.urdf', 'robot-assets/urdfs/robots/kuka_iiwa/model.urdf', 'robot-assets/urdfs/robots/pr2/pr2.urdf', 'robot-assets/urdfs/robots/ur10/ur10_robot.urdf', 'robot-assets/urdfs/robots/ur5/ur5_gripper.urdf', 'robot-assets/urdfs/robots/yumi/yumi.urdf']

import urdfpy
import urdf_parser_py
import yourdfpy

from functools import partial

def load_urdfs(fnames, load_fn):
    results = {fname: None for fname in fnames}
    for fname in fnames:
        try:
            x = load_fn(fname)
            results[fname] = x
        except:
            print("Problems loading: ", fname)
            pass
    print(sum([1 for x, y in results.items() if y is not None]), "/", len(fnames))
    return results

# parsing success rate
load_urdfs(robot_assets, urdfpy.URDF.load)
load_urdfs(robot_assets, urdf_parser_py.urdf.URDF.load)
load_urdfs(robot_assets, yourdfpy.URDF.load)

# parsing times
%timeit load_urdfs(robot_assets, urdfpy.URDF.load)
%timeit load_urdfs(robot_assets, urdf_parser_py.urdf.URDF.load)
%timeit load_urdfs(robot_assets, yourdfpy.URDF.load)
%timeit load_urdfs(robot_assets, partial(yourdfpy.URDF.load, load_meshes=False, build_scene_graph=False))

# fairer comparison with yourdfpy
urdfpy_fnames = [x for x, y in load_urdfs(robot_assets, urdfpy.URDF.load).items() if y is not None]
%timeit load_urdfs(urdfpy_fnames, yourdfpy.URDF.load)

# fairer comparison with urdf_parser_py
urdfparser_fnames = [x for x, y in load_urdfs(robot_assets, urdf_parser_py.urdf.URDF.from_xml_file).items() if y is not None]
%timeit load_urdfs(urdfparser_fnames, functools.partial(yourdfpy.URDF.load, load_meshes=False, build_scene_graph=False))

Metadata

Release files for yourdfpy 0.0.60

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yourdfpy 0.0.60
File Size Uploaded
yourdfpy-0.0.60.tar.gz 538.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yourdfpy 0.0.60
File Interpreter ABI Platform
yourdfpy-0.0.60-py3-none-any.whl Python 3 none any Details

Total release size: 560.4 kB

Release files / yourdfpy-0.0.60.tar.gz

Download URL yourdfpy-0.0.60.tar.gz
Size 538.2 kB
Tags Source
SHA-256 checksum
How to use checksums
2af2d8bdeea1b85b642590a3b4236fdb35746d7b3e38ce460a169c18d9c4f868
BLAKE2b-256 checksum
How to use checksums
ff1920c50861f30aff7720f9a601f386d73760c2df9961de1f98d0dbf3b85e69
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / yourdfpy-0.0.60-py3-none-any.whl

Download URL yourdfpy-0.0.60-py3-none-any.whl
Size 22.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8a187a8b18c98db87c76e9a950581b3c875b761e00df83942526c17ea693166c
BLAKE2b-256 checksum
How to use checksums
c8604ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release history Release notifications | RSS feed

This release

0.0.60 This release

2 release files

0.0.59

2 release files

0.0.58

2 release files

0.0.57

2 release files

0.0.56

2 release files

0.0.53

2 release files

0.0.52

2 release files

0.0.49

2 release files

0.0.48

2 release files

0.0.47

2 release files

0.0.44

2 release files

0.0.42

2 release files

0.0.41

2 release files

0.0.40

2 release files

0.0.39

2 release files

0.0.38

2 release files

0.0.37

2 release files

0.0.36

2 release files

0.0.35

2 release files

0.0.34

2 release files

0.0.33

2 release files

0.0.32

2 release files

0.0.31

2 release files

0.0.30

2 release files

0.0.24

1 release file

0.0.23

1 release file

0.0.14

1 release file

0.0.5

1 release file

0.0.3

1 release file

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page