A simpler and easier-to-use library for loading, manipulating, saving, and visualizing URDF files.
Project description
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
But why another one?!?
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 on 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 |
Entries for the above table were produced with:
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:
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, generate_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, generate_scene_graph=False))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
yourdfpy-0.0.23-py3-none-any.whl
(17.3 kB
view details)
File details
Details for the file yourdfpy-0.0.23-py3-none-any.whl
.
File metadata
- Download URL: yourdfpy-0.0.23-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60390077f26935d62f1012618a0c28bb24907d311b6a448243885fa7f45f76ca |
|
MD5 | 5fbc116914f1bd893e07841d438291e2 |
|
BLAKE2b-256 | 54c78e5939eaa4d04f77bd10a13d529d09e60e39aa82982ac7f51101c3d568db |