{ "info": { "author": "Alexander Fabisch", "author_email": "afabisch@googlemail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Scientific/Engineering :: Visualization" ], "description": "[![Travis Status](https://travis-ci.org/rock-learning/pytransform3d.svg?branch=master)](https://travis-ci.org/rock-learning/pytransform3d)\n[![CircleCI Status](https://circleci.com/gh/rock-learning/pytransform3d/tree/master.svg?style=shield&circle-token=:circle-token)](https://circleci.com/gh/rock-learning/pytransform3d)\n\n# pytransform3d\n\nA Python library for transformations in three dimensions.\n\nThe library focuses on readability and debugging, not on computational\nefficiency.\nIf you want to have an efficient implementation of some function from the\nlibrary you can easily extract the relevant code and implement it more\nefficiently in a language of your choice.\n\nThe library integrates well with the\n[scientific Python ecosystem](https://www.scipy-lectures.org/)\nwith its core libraries Numpy, Scipy and Matplotlib.\nWe rely on [Numpy](https://www.numpy.org/) for linear algebra and on\n[Matplotlib](https://matplotlib.org/) to offer plotting functionalities.\n[Scipy](https://www.scipy.org/) is used if you want to automatically\ncompute new transformations from a graph of existing transformations.\n\nHeterogenous software systems that consist of proprietary and open source\nsoftware are often combined when we work with transformations.\nFor example, suppose you want to transfer a trajectory demonstrated by a human\nto a robot. The human trajectory could be measured from an RGB-D camera, fused\nwith IMU sensors that are attached to the human, and then translated to\njoint angles by inverse kinematics. That involves at least three different\nsoftware systems that might all use different conventions for transformations.\nSometimes even one software uses more than one convention.\nThe following aspects are of crucial importance to glue and debug\ntransformations in systems with heterogenous and often incompatible\nsoftware:\n* Compatibility: Compatibility between heterogenous softwares is a difficult\n topic. It might involve, for example, communicating between proprietary and\n open source software or different languages.\n* Conventions: Lots of different conventions are used for transformations\n in three dimensions. These have to be determined or specified.\n* Conversions: We need conversions between these conventions to\n communicate transformations between different systems.\n* Visualization: Finally, transformations should be visually verified\n and that should be as easy as possible.\n\npytransform3d assists in solving these issues. Its documentation clearly\nstates all of the used conventions, it makes conversions between rotation\nand transformation conventions as easy as possible, it is tightly coupled\nwith Matplotlib to quickly visualize (or animate) transformations and it\nis written in Python with few dependencies. Python is a widely adopted\nlanguage. It is used in many domains and supports a wide spectrum of\ncommunication to other software.\n\nIn addition, pytransform3d offers...\n\n* the TransformManager which manages complex chains of transformations\n (with export to graph visualization as PNG, additionally requires pydot)\n* the TransformEditor which allows to modify transformations graphically\n (additionally requires PyQt4)\n* the UrdfTransformManager which is able to load transformations from\n [URDF](http://wiki.ros.org/urdf) files (additionally requires\n beautifulsoup4)\n\npytransform3d is used in various domains, for example:\n\n* specifying motions of a robot\n* learning robot movements from human demonstration\n* sensor fusion for human pose estimation\n\n## Installation\n\nUse pip to install the package:\n\n [sudo] pip[3] install [--user] pytransform3d\n\nYou can install pytransform3d[all] if you want to have support for pydot\nexport. Make sure to install graphviz (on Ubuntu: `sudo apt install graphviz`)\nif you want to use this feature.\n\n... or clone the repository and go to the main folder.\n\nInstall dependencies with:\n\n pip install -r requirements.txt\n\nInstall the package with:\n\n python setup.py install\n\n## Documentation\n\nThe API documentation can be found\n[here](https://rock-learning.github.io/pytransform3d/).\n\nThe docmentation of this project can be found in the directory `doc`.\nNote that currently sphinx 1.6.7 is required to build the documentation.\nTo build the documentation, run e.g. (on unix):\n\n cd doc\n make html\n\nThe HTML documentation is now located at `doc/build/html/index.html`.\nNote that `sphinx` is required to build the documentation.\n\n## Example\n\nThis is just one simple example. You can find more examples in the subfolder\n`examples/`.\n\n```python\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport pytransform3d.rotations as pr\nimport pytransform3d.transformations as pt\nfrom pytransform3d.transform_manager import TransformManager\n\n\nrandom_state = np.random.RandomState(0)\n\nee2robot = pt.transform_from_pq(\n np.hstack((np.array([0.4, -0.3, 0.5]), pr.random_quaternion(random_state))))\ncam2robot = pt.transform_from_pq(\n np.hstack((np.array([0.0, 0.0, 0.8]), pr.q_id)))\nobject2cam = pt.transform_from(\n pr.matrix_from_euler_xyz(np.array([0.0, 0.0, 0.5])),\n np.array([0.5, 0.1, 0.1]))\n\ntm = TransformManager()\ntm.add_transform(\"end-effector\", \"robot\", ee2robot)\ntm.add_transform(\"camera\", \"robot\", cam2robot)\ntm.add_transform(\"object\", \"camera\", object2cam)\n\nee2object = tm.get_transform(\"end-effector\", \"object\")\n\nax = tm.plot_frames_in(\"robot\", s=0.1)\nax.set_xlim((-0.25, 0.75))\nax.set_ylim((-0.5, 0.5))\nax.set_zlim((0.0, 1.0))\nplt.show()\n```\n\n![output](https://rock-learning.github.io/pytransform3d/_images/plot_transform_manager.png)\n\n## Tests\n\nYou can use nosetests to run the tests of this project in the root directory:\n\n nosetests\n\nA coverage report will be located at `cover/index.html`.\nNote that you have to install `nose` to run the tests and `coverage` to obtain\nthe code coverage report.\nThe branch coverage is currently 100% for code that is not related to the\nGUI.\n\n## Contributing\n\nIf you wish to report bugs, please use the issue tracker at Github.\nIf you would like to contribute to pytransform3d, just open an issue or\na merge request.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rock-learning/pytransform3d", "keywords": "", "license": "BSD-3-Clause", "maintainer": "", "maintainer_email": "", "name": "pytransform3d", "package_url": "https://pypi.org/project/pytransform3d/", "platform": "", "project_url": "https://pypi.org/project/pytransform3d/", "project_urls": { "Homepage": "https://github.com/rock-learning/pytransform3d" }, "release_url": "https://pypi.org/project/pytransform3d/1.1/", "requires_dist": null, "requires_python": "", "summary": "3D transformations for Python", "version": "1.1" }, "last_serial": 4753683, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "eee487074f792965fa11c0175bc43350", "sha256": "afabc6b316c13400be699bd8928dddfaad2a06280d0eec166bb730da10b5c5c3" }, "downloads": -1, "filename": "pytransform3d-1.0.tar.gz", "has_sig": false, "md5_digest": "eee487074f792965fa11c0175bc43350", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26277, "upload_time": "2018-12-07T14:49:38", "url": "https://files.pythonhosted.org/packages/d6/48/d0de43cb8d5da258b4e0aadc565f76a87c5584b4868db62409f2425206c7/pytransform3d-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "d4ad0844e53d2f29c71c5de4e16d2c88", "sha256": "e6f1c719f8f1711cd10668c4cbd1b9724bc0815d1639dd244dfd129ab17175dc" }, "downloads": -1, "filename": "pytransform3d-1.1.tar.gz", "has_sig": false, "md5_digest": "d4ad0844e53d2f29c71c5de4e16d2c88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27057, "upload_time": "2019-01-29T08:16:02", "url": "https://files.pythonhosted.org/packages/5b/77/6bc7a586f58e2d8d46dba3e5e33d3b4957b7c821eb55e8f49d91188c9845/pytransform3d-1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d4ad0844e53d2f29c71c5de4e16d2c88", "sha256": "e6f1c719f8f1711cd10668c4cbd1b9724bc0815d1639dd244dfd129ab17175dc" }, "downloads": -1, "filename": "pytransform3d-1.1.tar.gz", "has_sig": false, "md5_digest": "d4ad0844e53d2f29c71c5de4e16d2c88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27057, "upload_time": "2019-01-29T08:16:02", "url": "https://files.pythonhosted.org/packages/5b/77/6bc7a586f58e2d8d46dba3e5e33d3b4957b7c821eb55e8f49d91188c9845/pytransform3d-1.1.tar.gz" } ] }